OpenRath
面向多智能体、多会话工作流的状态优先 Python 运行时。
按维度查看评分与理由
证据显示:README 描述了生产模式下的权限控制(如 token 携带显式 action grants、租户/项目作用域、策略检查、secret 引用、信任标签、审计),但未提供具体实现细节或配置示例。用户确认机制(如 NEEDS_REVIEW 中断)在 README 中提及,但未说明如何触发或配置。数据流透明度方面,Session 和 lineage 概念提供了追踪能力,但未展示实际的数据流图或日志。敏感数据处理仅提及 secret 引用,未说明加密或脱敏。依赖安全方面,pyproject.toml 列出了依赖但未提供漏洞扫描或锁定文件(uv.lock 存在但未审查)。外部影响方面,Effect Ledger 和 idempotency keys 提及,但未展示具体实现。回滚方面,checkpoints 和 resumable queues 提及,但未说明回滚机制。来源归属方面,README 和 LICENSE 提供了版权信息,但 publisher 未验证。扣分原因:多数安全特性仅声明而无实现证据,且 publisher 身份未知。
证据显示:README 和 pyproject.toml 中的 API 描述一致,测试文件 test_public_surface.py 验证了公共 API 的同步性,表明内部一致性良好。依赖在 pyproject.toml 中明确列出,且 CI 配置了构建和 lint 工作流,但未提供依赖可用性测试。失败消息方面,README 提到 NEEDS_REVIEW 状态,但未提供错误处理示例。扣分原因:失败消息的具体格式和错误处理策略未展示。
证据显示:README 明确描述了多种使用场景(单代理、多代理、多会话等),并提供了示例代码和示例目录,表明受众和场景覆盖良好。能力边界方面,README 区分了 FlowToolCall 和 BackendTool,并说明了沙箱和内存后端的可插拔性。触发精度方面,Selector 和 workflow 的触发条件描述较清晰,但未提供详细的触发规则。环境适配方面,支持本地、OpenSandbox、OpenViking 等后端,并提供了环境变量配置。扣分原因:触发精度和部分环境配置细节不足。
证据显示:README 结构清晰,提供了安装、示例、文档链接,信息架构良好。安装说明详细,包括 pip 安装和可选依赖。命名稳定性方面,README 提到 v2.0.0 是生产版本,但未提供命名约定或 API 稳定性说明。示例和 FAQ 方面,提供了 12 个示例,但未提供 FAQ。已知限制方面,README 提到 Agent Server HTTP 表面仍为 Beta,但未列出其他限制。许可证为 BSD-3-Clause,符合要求。版本和变更日志方面,README 提到 v2.0.0 但未提供 CHANGELOG。维护责任方面,README 提供了 GitHub 链接,但未明确维护者。扣分原因:缺少 FAQ、CHANGELOG 和明确的维护者信息。
证据显示:README 提供了多个示例,输出为 Session 对象,易于使用。边际价值方面,OpenRath 提供了多代理多会话的独特范式,可能具有较高价值。成本效益方面,README 提到上下文复用和 token 消耗减少,但未提供基准测试。扣分原因:成本效益缺乏数据支持。
证据显示:README 中的声明(如生产特性)未提供具体实现或测试证据。跨来源验证方面,README 引用了 arXiv 论文和文档网站,但未提供其他独立来源。事实与推断分离方面,README 将设计理念和功能描述混合,未明确区分。扣分原因:声明缺乏可追溯性,且未提供独立验证。
- Publisher 身份未验证,需谨慎对待其来源。
- 安全特性(如权限控制、审计)在 README 中声明但未提供实现细节,需进一步审查代码。
- 依赖安全未提供漏洞扫描或锁定文件审查,建议检查 uv.lock 和依赖版本。
- 缺少 FAQ、CHANGELOG 和明确的维护者信息,可能影响长期维护。
这个 Agent 能做什么,适合哪些场景?
OpenRath 是一个以 Session 为中心的 Python 多智能体与多会话运行时,并以 PyTorch 的组合模型作为其设计类比。Session 保存有序消息块、沙箱位置、谱系、用量和待处理工作;Agent、Workflow、Tool、Memory 与 Selector 围绕它组合执行。工作流以 `forward(session) -> session` 为接口,可分叉、合并和压缩会话,并在运行时通过 `flow.Selector` 选择下一个工作流。v2.0.0 还提供生产运行层:步骤与路由可编译为不可变计划,运行状态可通过 Checkpoint、Lease、Effect Ledger 和 Interrupt 持久化与恢复。生产部署使用 PostgreSQL 作为持久化事实来源,可配合 Redis 信号加速与 S3 兼容对象存储;Agent Server 的 HTTP 接口仍标为 Beta。
应用从 Session.from_user_message(...) 创建会话,并可用 session.to("local", spec="./") 绑定工具执行位置。flow.Agent 将提示词、Provider、FlowToolCall 工具和可选 Memory 应用于 Session,模型可调用带 JSON Schema 的工具,工具在当前 Sandbox 中运行并把结果写回会话。工作流可调用 Agent、flow.Compressor、子工作流或 flow.Selector,然后返回新的 Session;会话还可 fork()、detach()、merge(...),并导出 JSONL。Memory 支持 remember_memory(...)、recall_memory(...) 和 commit_memory(...);本地后端存储在 .openrath/memory/,stdio MCP 工具也可适配为 FlowToolCall。在生产模式中,@step 与 @router 边界形成执行计划,Run、Event、Checkpoint、效果记录和人工 Interrupt 支持重试、取消、截止时间与恢复。
- 需要让多个专业角色围绕同一任务分支协作的 Python 团队,可用 Session 谱系追踪每个分支、工具调用与工作区产出的来源。
- 需要在一次工作中分叉候选方案、再合并兼容上下文的应用开发者,可在 Workflow 中使用
fork()、merge(...)和flow.Compressor管理上下文。 - 希望模型在受控工作目录中运行文件、Shell 或代码工具的自动化工程师,可将 Session 放置到
local或可选的opensandbox后端。 - 需要跨运行保存用户偏好或知识的应用,可为
flow.Agent绑定memory="local",在运行前召回并在运行后提交记忆。 - 需要可恢复、可审计的长期工作流的生产团队,可部署 Agent Server,并使用 PostgreSQL、Effect Ledger、Lease 和 Interrupt 管理运行状态。
这个 Agent 有哪些优点和局限?
- 以 Session 作为统一流动状态,原生记录消息块、沙箱位置、谱系和用量,适合需要分支与来源追踪的工作流。
- Agent 与 Workflow 都围绕
Session -> Session组合,支持嵌套工作流、普通 Python 的if/while控制流和 LLM 路由。 - 工具声明与 Python 运行行为由
FlowToolCall放在同一抽象中,同时支持内置工具、自定义工具和 stdio MCP 工具。 - v2.0.0 具备明确的持久化运行设计,包括不可变计划、Checkpoint、Lease、围栏、Effect Ledger 和人工 Interrupt。
- 本地 Memory 无额外依赖,提供 BM25 召回;Provider 可变化而无需改写 Session 和 Workflow 代码。
- 多数模型示例依赖 OpenAI 兼容环境变量或用户配置的 Provider,文档未给出无需模型服务的完整 Agent 执行路径。
- 生产部署需要 PostgreSQL;Redis 与 S3 兼容存储承担额外运行职责,增加基础设施和运维范围。
- Agent Server HTTP 接口仍为 Beta,且 v1 JSONL 导入仅是历史记录,不能恢复为活动 Run。
- 需要可强制执行截止时间时,同步步骤不能声明抢占式超时,必须改用异步步骤或隔离执行器。
- 本地 Sandbox 会针对绑定的主机工作区运行文件、命令和代码工具,采用它需要评估该执行边界。
如何安装或部署这个 Agent?
基础安装:
pip install openrath可选集成:
pip install "openrath[opensandbox]"
pip install "openrath[openviking]"多数模型示例需要 OpenAI 兼容凭据:
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://your-gateway/v1
export OPENAI_DEFAULT_MODEL=your-model-name也可在 ~/.openrath/config.json 配置 Provider,环境变量优先。生产配置可安装 pip install "openrath[server,postgres]",再运行 openrath-migrate。
如何使用这个 Agent?
配置凭据后,可先运行最小示例:
python example/01_hello_agent.py其基本调用方式是创建 flow.Agent,构造 Session.from_user_message(...),再执行 agent(session)。若需要工作流组合,定义 flow.Workflow 子类并实现 def forward(self, session: Session) -> Session:。生产模式示例使用:
runtime = LocalRuntime(store, effect_ledger=ledger, production_mode=True)
server = AgentServer(store, runtime, auth=auth, audit_sink=audit)这个 Agent 与同类方案有什么区别?
OpenRath 用 PyTorch 的概念进行设计映射:Session 对应 Tensor、Sandbox/Backend 对应 Device、Memory 对应 Parameter、Tool 对应 Function、Agent 对应 nn.Linear、Workflow 对应 nn.Module。它也将本地 Sandbox 与可选 OpenSandbox、本地 Memory 与可选 OpenViking 作为可替换后端。
常见问题
OpenRath 是否只能使用 OpenAI?
Provider 更换模型供应商,同时保持 Session 和 Workflow 代码稳定。能否不接模型服务就先试用?
生产运行如何避免重复执行副作用?
NEEDS_REVIEW,而非被盲目重放。