ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

1700行代码浓缩了LangGraph和ADK的设计精华

1700行代码浓缩了LangGraph和ADK的设计精华 prodagent 是一个教学型、同时保留必要生产能力的 Agent 框架。它用尽量少、尽量正交的抽象把“一台 Agent 执行引擎由哪几块构成、为什么非它们不可”讲清楚你可以读完内核并照着自己手写一遍再用上层配方拼出 ReAct、先规划后执行、多 Agent 协作等。三层结构examples/ 业务示例ReAct、审批、压缩、多 Agent、MCP ───────────────────────────────────────────────────────────── src/runtime/ 策略/配方层可整层替换 react / plan_first / multiagent 怎么编排 tools / mcp 工具从哪来 context / memory / skills 横切策略注入即可 src/backends/ 存储实现文件级断点续跑 ───────────────────────────────────────────────────────────── src/kernel/ 机制层零三方依赖不懂“模式” Plan / Run / Scheduler / Node / Edge / Channel Outcome / Command / Interrupt / Bus / EventLog ▲ 模型 / 工具 / 子 Agent / 存储都从端口注入kernel 不 import 它们机制在内策略在外。内核里没有 ReAct、没有“运行模式枚举”ReAct、先规划后执行、多 Agent 全都是用同一套内核原语在上层拼出来的换一种编排不需要改内核一行。一张内核总图应用层策略 ReAct 配方 · plan-first · 多 Agent · 你的业务 … │ 全部用下面的内核原语拼出来 ▼ 内核机制 Plan静态蓝图Node / Edge / Channel Run一次动态执行状态 / 实例 / 生命周期 │ ▼ Scheduler引擎算就绪 → 波次并发 → 屏障折叠 → 落检查点 Outcome / body · CommandGoto/Send Interrupt挂起· Bus三协议背压· EventLog事实源读到这里如果觉得有用欢迎去GitHub 点个 Star ⭐——你的支持会让更多在生产里排雷的 Agent 工程师看到它。内核七部件各自一个文件部件文件一句话职责Plan / Node / Edge / Channelkernel/graph.py静态蓝图以及“这一波谁就绪”的纯计算Runkernel/run.py一次运行的动态状态、生命周期状态机、快照Channel / reducerkernel/channels.py并发写入如何确定地合并append/last/add/mergeOutcome / bodykernel/body.py唯一可组合接口 函数/工具/模型/子图四种 bodyCommandkernel/command.pyGoto / Send只改“下一波就绪集合”Goto 可带 payload 作为转场输入EventLog / Storekernel/eventlog.py事件是事实源状态是折叠投影Buskernel/bus.py旁观 fire / 裁决 check / 收集 collect 有界订阅背压Schedulerkernel/scheduler.pyBSP 波次主循环把所有部件装成一台机器portskernel/ports.pyLLM / 工具 / 子 Agent 的依赖倒置端口三条贯穿原则状态是事件流折叠出的投影。节点不直接碰共享状态只产出state_delta引擎在波次屏障处按 reducer 折叠并把“波增量”写进事件日志。重放即重建审计、时间旅行、崩溃恢复因此是同一件事。波次是一致性边界。同波节点并发、互不可见半成品一波结束统一提交结果与调度顺序无关每个波次边界天然是一个检查点。复杂能力是原语递归组合长出来的。多 Agent 不是新引擎call委派是某个节点的 body 递归又跑起一张子 Run、干完把结果交回transfer接力更省——同一张图里 go 到对方的节点、不画回边控制权就一去不返。汇合方式不同用的都是同一条 Goto。两种使用姿势门面或直接用内核大多数时候用门面就够了——Agent是会自己想、能调工具、能派活给同伴的自主体Workflow是一张看得清的流程图节点既能是函数也能直接是 AgentfromsrcimportAgent,Workflow,go# 1) 一个自主 Agent模型 工具run 一下agentAgent(nameresearcher,modelllm,instruction...,tools[search])resultawaitagent.run(帮我查 X)# result.output 是最终答复# 2) 主管派活teammates 是“派出去、结果交回来”的子 AgentcallbossAgent(nameboss,modelllm,teammates[researcher,writer])# 3) 确定性编排 / 多 Agent 接力Workflowasyncdefdecide(root,ctx):returngo(repair,root)# 转场到修复 Agent无回边即交接transfer不回头wfWorkflow()wf.add(diagnose,diagnose_fn)# 函数节点wf.add(decide,decide)# 决定转场去哪的普通节点wf.add(repair,repair_agent,terminalTrue)# 节点也可以直接是一个 Agentwf.edge(diagnose,decide)wf.entry(diagnose)resultawaitwf.run(故障)节点里的控制流用三个好记的函数go转场回边、循环、交接都靠它value 会作为目标这一次的输入、send动态扇出return [send(worker, x) for x in items]几份运行时才知道也没关系引擎会放进同一波里并发跑、wait_human停下等人随后wf.resume。想看清门面底下怎么用 Plan/Node/Scheduler 拼出来再回到内核与graph_demo.py、react_demo.py。上层配方与横切策略都可替换能力位置说明Agent / Workflow 门面runtime/agent.py、runtime/workflow.py好用的高层 API自主体、声明式图、go/send/wait_humanReActruntime/react.pythink⇄tools 环 final环上前进由 Goto 驱动可无限多轮工具先规划后执行runtime/plan_first.pyLLM 计划只是 state 里的步骤清单send 动态扇出、汇合点等齐前驱才汇总多 Agentruntime/multiagent.pypipeline / supervisor子 Agent 即工具/ 黑板专家并行写板、主持人 joinall 裁决、可多轮趋同transfer同图 go 不回头工具runtime/tools.py函数即工具、自动推断 schema、读写分级、审批门、失败即反馈MCPruntime/mcp.pyMCP 工具在边界拉平成普通工具内部只走一条管线上下文runtime/context.py五级压缩不动→机械缩工具结果→逐级摘要→紧急只留最近装配策略可换长期记忆runtime/memory.py一条统一记录 正交标签检索策略可换教学版关键词生产换向量技能runtime/skills.py工具 操作指引打包成专长支持从目录的 SKILL.md 加载、按需选用步骤弹性kernel/graph.py、kernel/scheduler.pyNode 挂 timeout RetryPolicy超时算一次失败、按指数退避重试流式背压kernel/bus.py节点ctx.emit边算边吐有界订阅 block 反压 / drop 丢帧记账文件持久化backends/file_store.py原子写检查点 JSONL 事件跨进程断点续跑示例由浅入深cdsrcPYTHONPATH. python examples/graph_demo.py# 波次怎么推进纯内核PYTHONPATH. python examples/react_demo.py# 手工拼出 ReAct纯内核PYTHONPATH. python examples/01_greeter.py# 最小 Agent一个工具的 ReActPYTHONPATH. python examples/02_trader.py# 多轮砍价 写操作审批门 记忆PYTHONPATH. python examples/03_deep_research.py# 连查多轮 五级上下文压缩PYTHONPATH. python examples/04_compliance_audit.py# 并行核查 挂起审批被拒不推倒PYTHONPATH. python examples/05_code_detective.py# MCP 工具 从磁盘加载技能 失败再改PYTHONPATH. python examples/06_trip_planner.py# 主 Agent 扇出三个并行子 AgentPYTHONPATH. python examples/07_aiops.py# 诊断 call 要返回 修复 transfer 接力go 不回头PYTHONPATH. python examples/09_persistence.py# 检查点落盘换新实例也能从断点恢复PYTHONPATH. python examples/10_retry_timeout.py# 节点超时 指数退避重试PYTHONPATH. python examples/11_backpressure.py# 节点流式吐事件有界订阅 block/drop 背压所有示例都用ScriptedLlm按脚本扮演模型离线即可运行不依赖任何真实 API。Playground一个命令在网页里跑全部示例makeplay# 等价PYTHONPATH. python3 -m src.playground# 打开 http://127.0.0.1:8000左侧在 9 个场景里任选含多 Agent 撰稿-审阅-修订、并行委派接力、跨会话记忆召回右侧能看到节点开始/完成、状态增量、运行完成等事件流时间线订阅的是同一个 Bus遇到wait_human的人工节点会真正挂起页面弹出“批准/拒绝”点完从断点继续多 Agent 的并行、委派call、接力transfer都能在时间线上看出来。Playground 只用标准库http.server 后台事件循环不引入任何 web 框架。示例默认用离线脚本模型零配置即可点。接真实模型可选runtime/openai_lite.py用标准库直连任意 OpenAI 兼容服务不引 SDK。设好环境变量OPENAI_API_KEY可选OPENAI_BASE_URL自建网关/国内兼容服务、OPENAI_MODEL把脚本模型换成它即可其余代码一行不改fromsrc.runtime.openai_liteimportOpenAICompatibleLlm agentAgent(namedemo,modelOpenAICompatibleLlm(),tools[...])跑测试pipinstallpytest pytest-asyncio python-mpytest tests/-q建议的阅读顺序kernel/types.py → command.py → channels.py值对象与合并规则kernel/graph.py静态蓝图与ready()全内核最值得细读的纯函数kernel/run.py → body.py一次运行携带什么、唯一可组合接口长什么样kernel/eventlog.py → bus.py → ports.py事实源、对外接缝、依赖倒置最后读kernel/scheduler.py主循环短到几乎是“复习”再看runtime/看同一套原语怎么拼出 ReAct 和多 Agent对照examples/与tests/就能自己动手改了。
返回列表