Apache Burr: 用于可靠 AI Agent 的状态机框架
Apache Burr (Incubating) 是一个纯 Python 框架,旨在通过将 AI agent 和应用程序视为状态机来简化其开发。通过使用标准的 Python 函数和装饰器取代复杂的领域特定语言 (DSLs) 和 YAML 配置,Burr 使开发者能够构建从简单的聊天机器人到复杂的多智能体系统,并专注于可靠性和可观测性。
核心架构与 API
Apache Burr 利用基于动作 (actions) 和转换 (transitions) 的可组合接口来定义应用程序逻辑。这种方法允许开发者在不依赖“魔法”抽象的情况下,完全控制执行流。
基于动作的逻辑
开发者使用 @action 装饰器来定义 agent 的构建块。每个动作指定它读取和写入状态的哪些部分,从而确保清晰的数据边界。例如,一个聊天动作可能会读取消息历史记录,并在 LLM 调用后写入更新后的历史记录。
状态机构建
应用程序使用 ApplicationBuilder 模式进行组装。此过程包括:
- 定义动作:注册执行工作的 Python 函数。
- 设置转换:映射应用程序如何从一个动作移动到另一个动作。
- 初始化状态:为应用程序状态设置初始值。
- 配置追踪器:设置本地或远程追踪以实现可观测性。
关键技术特性
Burr 提供了一套专门旨在将 AI agent 从原型推向生产级系统的工具。
可观测性与调试
Burr 内置了一个 UI,允许开发者实时监控、调试和追踪应用程序的每一步。该 UI 提供了状态变化发生时的可见性,这对于调试 LLM 输出的非确定性本质至关重要。
状态管理与持久化
该框架会自动将状态持久化到磁盘、数据库或自定义后端。这种能力允许应用程序从中断的地方精确地恢复执行,为长时间运行的 agent 提供了一种强大的机制。
人机交互集成 (Human-in-the-Loop)
Burr 支持在任何步骤暂停执行以等待人工输入。这对于审批工作流和交互式 agent 至关重要,因为在这些场景中,人类必须在 AI 继续进行之前验证 AI 的决策。
并行性与模块化设计
该框架支持分支和并行,允许动作并行运行 (fan-out/fan-in) 并创建复杂的有向无环图 (DAGs)。开发者还可以通过组合子应用程序来保持模块化设计。
生态系统与集成
Burr 的设计与底层 LLM 或框架无关,可以与各种行业工具集成:
- LLMs:OpenAI, Anthropic.
- Frameworks:LangChain, Hamilton, Haystack.
- Validation and Serving:Pydantic, FastAPI, Instructor.
- Storage:PostgreSQL.
- UI:Streamlit.
社区观点与技术评析
虽然该项目已获得关注,但 Hacker News 上的开发者讨论揭示了对其结构化方法的支持者与更倾向于极简抽象的支持者之间的分歧。
支持 Burr 的论点
用户强调了从其他框架迁移的便利性。一位开发者指出:
"从 LangChain 迁移到 Burr 简直是改变了游戏规则!我只用了几个小时就开始使用 Burr,而之前尝试理解 LangChain 时却花了几天甚至几周时间。"
其他用户称赞了状态管理和可观测性,指出 UI 使调试变得 "易如反掌"。
技术批评
一些经验丰富的工程师认为,agent 框架往往会掩盖核心逻辑。一位批评者建议,对于许多 agent,核心循环(上下文构建、LLM 调用、工具执行、解析)足够简单,因此使用 1:1 的自定义代码比使用框架的抽象更具可维护性。
此外,一些开发者批评了在 Python 中使用 Builder 模式和装饰器进行流控制的做法,认为这些模式更适合 Rust 等语言,或者应该作为过滤器而非注册机制来使用。
与其他工具的比较
社区成员将 Burr 与 LangGraph 进行了比较,认为 Burr 通过 builder pattern 实现的状态机,在 agent 编排方面提供了与 LangGraph 方法类似的函数性结果。