从1到1000个Agent:OpenRath Workflow模块化组合指南

发布时间:2026/10/23 2:06:28
从1到1000个Agent:OpenRath Workflow模块化组合指南
【免费下载链接】OpenRathAn open-source, PyTorch-like runtime for dynamic multi-agent and multi-session workflows.项目地址https://gitcode.com/gh_mirrors/op/OpenRath点击查看免费下载OpenRath 是一个开源的多 Agent、多会话multi-session智能体框架灵感来自 PyTorch它把 Agent 拆成可复用的小层用Workflow像搭积木一样组合起来让 Session 成为贯穿所有 Agent 的流动数据。无论你是刚接触 LLM Agent 的新手还是想管理上百个协作 Agent 的工程师这份指南都能帮你快速理解Workflow 模块化组合的完整路径 为什么单个 Agent 撑不起大系统当你从一个聊天助手走向一个 Agent 团队常见的痛点是每个 Agent 各自维护消息历史上下文无法复用token 消耗爆炸分支、重试、并行探索之后没人说得清这句话到底是谁、在哪个分支产生的提示词像意大利面一样缠绕增删一个 Agent 就得改一堆代码。OpenRath 的思路是把Session会话状态而不是消息历史当作一等公民Agent 只是作用在 Session 上的一层变换Workflow 负责把这些层组装成系统。这样从 1 个到 1000 个 Agent管理问题就退化成了组合问题而不是提示词泥潭。四种典型范式放在一起对比OpenRath 瞄准的是右上角多 Agent 多会话——许多 Agent 共享许多会话协作、分支、演进都发生在 Session 之上。先建立心智模型OpenRath 就是 Agent 界的 PyTorch如果你用过 PyTorchOpenRath 的概念映射几乎是一览无余的PyTorch 概念OpenRath 概念含义TensorSession流动的运行态数据有序消息块、执行位置、血缘、用量DeviceSandbox工具真正执行的环境本地进程或 OpenSandboxParameterMemory跨运行持久化的状态运行前召回、运行后提交FunctionTool模型可见的可调用操作带 schemann.LinearAgent把输入 Session 映射到输出 Session 的可复用层nn.ModuleWorkflow可嵌套、可组合的容器控制流Selector由 LLM 在运行时决定下一步跑哪个 Workflow核心差异在于大多数 Agent 框架从Agent 循环出发而 OpenRath 从Session出发。当你的应用同时需要多 Agent、多分支、持久记忆、沙箱执行和可追溯血缘时这个差异就是价值所在。认识 Session贯穿一切的数据流Session是 OpenRath 的中心运行值它不只是聊天记录而是结构化状态——一个有序的消息块表system / user / assistant / tool_result外加沙箱绑定信息和血缘元数据父会话 ID、操作类型。它支持一组对大系统至关重要的操作全部是一行代码session.fork()— 派生一个可追溯的分支session.detach()— 切断父链开一个全新起点session.merge(...)— 合并两个兼容分支并记录合并血缘session.to(local, spec./)— 把会话搬到指定沙箱后端执行类比tensor.to(device)。这意味着Workflow 之间传递的不再是复制粘贴的字符串而是可以直接复用、分叉、压缩、合并的状态对象——这正是从 1 个 Agent 扩展到 1000 个 Agent 时上下文成本不失控的关键。Workflow把 Agent 装进nn.Moduleflow.Workflow是 OpenRath 的组合面。子类只需实现一个方法def forward(self, session: Session) - Session: ...输入输出都是 Session所以 Workflow 可以无限嵌套而不需要发明新的状态格式。它的设计刻意模仿torch.nn.Module你把Agent或子Workflow作为属性赋值给它就会被自动登记进模块树可以随时枚举named_agents()、named_children()、modules()。它还提供两个非常实用的组合能力workflow.to(...)一键换模型把 Provider 或模型名批量重绑到内部所有 Agent一行切换模型厂商Workflow 代码保持稳定workflow.compile()静态编译运行前遍历模块树生成资源清单manifest可做离线校验validate()和确定性的资源生命周期管理——相当于torch.compile的先体检再上场。核心实现在 src/rath/flow/workflow.py模块树注册和 src/rath/flow/workflow.pycompile。从 1 个 Agent 到一支团队四步组合法第 1 步把 Agent 写成小层flow.Agent是最小的可复用单元一个 system prompt 一个 Provider 可选的工具和记忆一次调用把输入 Session 变成输出 Sessionfrom rath import flow from rath.session import Session planner flow.Agent( Plan the research task, stay brief., flow.Provider(modelgpt-5.5), tools[...], # 可选FlowToolCall 工具 memorylocal, # 可选绑定持久记忆 descriptionBreak tasks into sub-tasks, )注意description参数——它不只是注释第 3 步的Selector会用它做动态路由。第 2 步用 Workflow 串联与分叉组合的本质是让 Session 自己流动class ResearchTeam(flow.Workflow): def __init__(self) - None: super().__init__(descriptionresearch team) self.triage flow.Agent(Triage the request., provider, descriptionRoute requests) self.research flow.Agent(Answer in depth., provider, descriptionDeep analysis) self.writer flow.Agent(Write the final answer., provider, descriptionDraft output) def forward(self, session): session self.triage(session) branch_a session.fork() # 可追溯的分支 a self.research(branch_a) b self.writer(session) return a.merge(b) # 合并并记录血缘上下文过长时再插一个flow.Compressor把长会话压缩成精简版本token 成本立降。第 3 步用 Selector 获得 if / while 级动态路由固定编排解决不了下一个该谁上的问题。flow.Selector是一个 LLM 驱动的路由器给它当前 Session 和一组带description的自描述 Workflow它返回下一步该执行的那个任务完成则返回空操作flow.EmptyWorkflow。控制流依然是普通 Python 代码selector flow.Selector(provider) while not isinstance( nxt : selector.forward(session, tech, billing, wrapup), flow.EmptyWorkflow ): session nxt(session)if 分支就是一次forwardwhile 循环就是反复路由直到拿到EmptyWorkflow。Selector 的实现见 src/rath/flow/selector.py。第 4 步compile() 先体检再上线规模化之后这个 Workflow 到底绑了哪些模型、哪些记忆后端必须可审计。compile()不跑任何模型、不创建会话只做静态遍历compiled team.compile() print(compiled.manifest.provider_models()) # 可达的模型清单 print(compiled.validate()) # 离线预检问题 with team.compile() as live: # 确定性资源生命周期 ...Agent Server / v2 生产运行时还会进一步把step/router边界编译成不可变执行计划配合检查点、租约与 Effect Ledger 实现可恢复的持久化运行相关说明见 deploy/docs/operations-v2.md。扩展到 1000 个 Agent 的 3 个关键状态与编排解耦所有 Agent 共享 Session 数据流而非各自的消息副本分支/合并/压缩都发生在状态层上下文复用率大幅提升自描述 动态路由每个 Workflow 带上descriptionSelector 让几百个候选模块的调度由模型在运行时决定而不是硬编码 if/else血缘可追溯Session Graph 记录了每个分支、合并、工具调用来自哪个角色和节点——大集群出问题时你能回答这个答案是谁在哪个分支产生的。动手路径从示例阶梯快速上手安装只需一行pip install openrath仓库里的 example/ 目录是一级一级递进的示例阶梯每个脚本只讲一个概念按编号顺序跑一遍即可完成本篇所有概念的最小实践#示例学到的组合能力0101_hello_agent.py最小程序AgentSession 流式输出0202_session_lineage.pyfork/detach与 Session Graph无需 API key0808_compress.pyCompressor压缩长上下文1111_dynamic_selector.pySelector的 if 分支与 while 循环1212_compile.pycompile()静态清单与离线校验无需 API key完整清单含沙箱、工具、MCP、记忆等 12 级见 example/README.md总览说明在 README.md。小结模块化是唯一的规模解回到标题的问题如何从 1 个 Agent 走到 1000 个 AgentOpenRath 给出的答案是不要堆提示词要堆模块。用Agent写小层对应nn.Linear用Workflow做可嵌套容器靠fork/merge/Compressor编排 Session 数据流对应nn.Module用Selector把运行时控制流交给 LLM 路由对应控制流用compile()在上线前完成静态体检。源码入口一览组合核心 src/rath/flow/workflow.py、Agent 层 src/rath/flow/agent.py、路由 src/rath/flow/selector.py、flow 包公开 API src/rath/flow/init.py。打开示例阶梯你的第一个多 Agent 团队离你只差一次pip install赞分享【免费下载链接】OpenRathAn open-source, PyTorch-like runtime for dynamic multi-agent and multi-session workflows.项目地址https://gitcode.com/gh_mirrors/op/OpenRath点击查看免费下载相关推荐如何用esquisse快速探索数据新手必学的5个技巧如何用esquisse快速探索数据新手必学的5个技巧 esquisse 是一款强大的RStudio插件专为数据可视化而设计让您能够通过交互式界面快速创建专专业Windows优化指南AtlasOS系统性能提升与隐私保护完整方案专业Windows优化指南AtlasOS系统性能提升与隐私保护完整方案 AtlasOS是一款开源Windows优化工具专注于系统性能提升、隐私保护和用户体验操作系统应用安全如何从模型到 GCodeBambu Studio 切片软件上手指南如何从模型到 GCodeBambu Studio 切片软件上手指南 Bambu Studio 是 Bambu Lab 基于 Slic3r / PrusaSli桌面应用3D渲染图形学智能硬件上一篇代码风格规范every-chatgpt-gui统一代码格式和质量标准下一篇Kronos-mini NPU 离线部署指南local_files_only 权重快照与SHA-256校验完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考