Apache Burr 配置参数详解
Apache Burr 0.42.0 配置参数详解:应用构建器各方法、运行期 halt 控制、本地与 S3 跟踪存储参数、Web UI 服务端 CLI 选项与环境变量,均含实测回显。
Apache Burr 配置参数详解
目标:以 burr 0.42.0(实际安装主体 apache-burr 0.42.0)为基线,详解 Apache Burr 的配置体系:应用构建期 ApplicationBuilder 各链式方法、运行期 run/iterate 控制参数、本地与 S3 跟踪存储参数,以及 Web UI 服务端 CLI 选项与环境变量。文中参数均来自源码核对与真实环境实测,Python 3.10.12(Ubuntu 22.04)。
一、配置体系总览
Apache Burr 的配置分布在四个层级,分别控制状态机结构、执行行为、轨迹存储与服务形态:
| 配置层级 | 主要入口 | 作用 |
|---|---|---|
| 应用构建期 | ApplicationBuilder 链式方法 | 定义动作、转移、初始状态、入口、跟踪与持久化 |
| 运行期 | Application.run / iterate | 控制执行、暂停点与外部输入 |
| 跟踪存储 | with_tracker 与 TrackingClient | 记录执行轨迹并落盘或上传 |
| 服务端 | burr CLI 选项与环境变量 | 控制 Web UI 服务端口、监听地址、存储后端 |
💡 技术拓展:Python 工作流框架生态中,Prefect、Airflow 侧重大规模调度与分布式编排,Temporal 主打长期运行工作流与持久化执行,而 Apache Burr 主打轻量级状态机与可观测性,适合对话机器人、智能体、模拟仿真等决策型应用,单机 pip 安装即可快速跑通,无需额外调度集群。
二、应用构建期配置(ApplicationBuilder)
所有应用级配置通过 ApplicationBuilder 链式方法声明,最终由 build() 生成 Application 对象。以下按方法逐个说明,配套的验证应用沿用快速入门中的计数器状态机。
2.1 动作声明(@action 与 with_actions)
@action 装饰器通过 reads(读取的状态键)与 writes(写入的状态键)声明动作对状态的读写契约,with_actions 将动作注册到应用:
@action(reads=[], writes=["count"])
def counter(state: State) -> State:
return state.update(count=state["count"] + 1)
@action(reads=["count"], writes=["result"])
def summarize(state: State) -> State:
return state.update(result=f"count reached {state['count']}")
app = ApplicationBuilder().with_actions(counter=counter, summarize=summarize)
实测回显(with_actions 后落盘的 graph.json 中动作结构,含源码、输入与可选输入声明):
{"type": "action", "name": "counter", "reads": [], "writes": ["count"], "code": "@action(reads=[], writes=[\"count\"])\ndef counter(state: State) -> State:\n return state.update(count=state[\"count\"] + 1)\n", "inputs": [], "optional_inputs": []}
2.2 转移规则(with_transitions)
with_transitions 接收 (from_action, to_action, condition) 三元组定义状态机边;condition 使用 expr("表达式") 或 default 兜底:
.with_transitions(
("counter", "counter", expr("count < 3")),
("counter", "summarize", default),
)
实测坑:第三项直接传字符串会在 build 时崩溃,实测回显为 AttributeError: 'str' object has no attribute 'name',必须使用 expr 或 default 包装。落盘的 graph.json 中转移结构实测回显:
{"type": "transition", "from_": "counter", "to": "counter", "condition": "count < 3"}
{"type": "transition", "from_": "counter", "to": "summarize", "condition": "default"}
2.3 初始状态与入口(with_state / with_entrypoint)
with_state 以关键字参数设置初始状态,with_entrypoint 指定首个执行的动作:
.with_state(count=0, result="")
.with_entrypoint("counter")
2.4 标识符(with_identifiers)
with_identifiers(app_id, partition_key, sequence_id) 显式指定应用标识:app_id 默认自动生成 UUID;partition_key 用于区分同一项目的应用分组(如用户 ID),与持久化和查询强相关;sequence_id 用于从指定序列号启动。实测中省略参数时,每次运行自动生成 UUID 目录(见后续落盘回显)。
2.5 跟踪与生命周期钩子(with_tracker / with_hooks)
with_tracker(tracker="local", project="default", params=None, use_otel_tracing=False):tracker 传字符串 local 时按 project 与 params 实例化 LocalTrackingClient(params 支持 storage_dir、serde_kwargs 透传),也可直接传入 TrackingClient 实例;use_otel_tracing 开启 OpenTelemetry 追踪,需安装 burr[opentelemetry]。with_hooks 挂载任意生命周期适配器(追踪、度量、日志)。实测回显(with_tracker(project="burr-quickstart") 后落盘结构):
ls ~/.burr/burr-quickstart/1b853a06-13d9-44e2-83a0-55897f602302/
graph.json
log.jsonl
metadata.json
2.6 状态持久化与初始化(with_state_persister / initialize_from)
with_state_persister(persister, on_every="step") 按指定间隔持久化状态,当前仅支持 step;传入非法值实测回显:
ValueError: on_every month not supported
initialize_from(initializer, resume_at_next_action, default_state, default_entrypoint, fork_from_app_id, fork_from_partition_key) 从持久化状态恢复运行,或通过 fork_from_app_id 从既有应用分支出新应用。
2.7 子应用与并行(with_spawning_parent / with_parallel_executor / with_typing)
with_spawning_parent(app_id, sequence_id, partition_key) 声明当前应用由父应用在指定序列号处派生的父子跟踪关系(区别于 fork 的断点续跑,spawn 表示应用完全内嵌于父应用中)。with_parallel_executor(executor_factory) 为动作提供并行执行线程池工厂。with_typing(typing_system) 为状态启用类型系统校验。
三、运行期配置(run / iterate)
Application.run(halt_before, halt_after, inputs) 串行执行至结束或命中暂停条件:halt_after 在目标动作执行完成后暂停,halt_before 在目标动作执行前暂停,inputs 传入动作所需外部输入。实测回显(halt_after=["summarize"]):
stopped after action: summarize
result: {}
final state: {'count': 3, 'result': 'count reached 3', '__SEQUENCE_ID': 3, '__PRIOR_STEP': 'summarize'}
iterate 与 run 参数一致,但以生成器形式逐步产出,便于流式消费每个步骤的状态与结果。
四、跟踪与存储配置(LocalTrackingClient / S3TrackingClient)
4.1 本地跟踪 LocalTrackingClient
构造参数:project(必填,项目名仅允许字母数字与下划线、连字符)、storage_dir(默认 ~/.burr)、serde_kwargs(序列化参数)。轨迹按 基目录/项目/应用ID 三级目录组织,默认落在 ~/.burr/<project>/<app_id>/,内含 graph.json、metadata.json、log.jsonl。执行日志行实测回显(begin_entry 与 end_entry 各一条,end_entry 携带该步完整状态):
{"type":"begin_entry","start_time":"2026-10-13T15:52:26.177326","action":"counter","inputs":{},"sequence_id":0}
{"type":"end_entry","end_time":"2026-10-13T15:52:26.177503","action":"counter","result":{},"exception":null,"state":{"count":1,"result":"","__SEQUENCE_ID":0,"__PRIOR_STEP":"counter"},"sequence_id":0}
4.2 S3 跟踪 S3TrackingClient
构造参数:project(必填)、bucket(必填)、region、endpoint_url(兼容 S3 的对象存储如 MinIO 可指定)、non_blocking(异步写)、flush_interval(批量刷写间隔,默认 5 秒)、unique_tracker_id、serde_kwargs。与 Web UI 服务端 --backend s3 配合使用,将轨迹写入对象存储。程序示例:
from burr.tracking.s3client import S3TrackingClient
client = S3TrackingClient(
project="burr-quickstart",
bucket="burr-traces",
endpoint_url="http://127.0.0.1:9000",
)
五、Web UI 服务端配置
5.1 CLI 选项
burr 主命令实测帮助回显:
Usage: burr [OPTIONS]
Options:
--port INTEGER Port to run the server on
--dev-mode Run the server in development mode
--no-open Run the server without opening it
--no-copy-demo_data Don't copy demo data over.
--host TEXT Host to run the server on -- use 0.0.0.0 if you want
to expose it to the network
--backend [local|s3] Backend to use for the server.
--help Show this message and exit.
各选项作用:--port 监听端口;--host 监听地址,0.0.0.0 表示对外暴露;--dev-mode 开发模式(自动重载);--no-open 不自动打开浏览器;--no-copy-demo_data 跳过演示数据初始化;--backend 指定服务端轨迹后端,local 读取 ~/.burr,s3 读取对象存储。
5.2 环境变量
服务端还支持以下环境变量(来自 burr.tracking.server 源码核对):
| 环境变量 | 默认值 | 作用 |
|---|---|---|
| PORT | 8000 | uvicorn 监听端口 |
| BURR_SERVE_STATIC | true | 是否由服务端托管前端静态资源 |
| BURR_BACKEND_IMPL | burr.tracking.server.backend.LocalBackend | 服务端轨迹后端实现类路径 |
| burr_path | ~/.burr | 本地后端轨迹数据目录 |
| BURR_SERVER_ROOT | ~/.burr_server | S3 后端相关服务器根目录 |
实测回显(不设置 PORT 时以 CLI --port 7241 启动,服务监听 7241 并对外提供 /ready、/api/v0/version、/api/v0/projects 等接口):
INFO: Uvicorn running on http://0.0.0.0:7241 (Press CTRL+C to quit)
六、验证与参考链接
综合验证:以上述配置项构建并运行计数状态机应用,完成四次动作执行,tracker 落盘 2 个应用目录;Web UI 服务启动后 /ready 返回 200,/api/v0/version 返回 {"version":"0.42.0"},/api/v0/projects 中可见 burr-quickstart 项目,配置体系全链路可用。
- Apache Burr 官方文档:https://burr.dagworks.io/
- Apache Burr GitHub 仓库:https://github.com/apache/burr
- PyPI apache-burr 包页面:https://pypi.org/project/apache-burr/
- Apache Incubator Burr 项目页:https://incubator.apache.org/projects/burr.html