资讯动态

从循环到图:Graph Engineering 到底解决了什么问题

发布时间:2026/8/10 8:51:53 来源:尧图企业网站定制
文章目录一、一条推文和一场「新瓶装旧酒」的争吵二、五层叠加同一件事被换着名字叫了五遍三、循环撞墙的五个结构性缺陷3.1 上下文腐烂3.2 错误级联3.3 工具过载3.4 缺乏控制粒度3.5 可观测性差3.6 更隐蔽的那个目标失明四、什么才算「一张能跑的图」两个必须澄清的混淆五、拓扑图谱几种经得起验证的形状5.1 菱形扇出 / 扇入Fan-out / Fan-in5.2 主管-工人Orchestrator-Workers5.3 流水线Pipeline / Prompt Chaining5.4 路由Routing5.5 评估-优化Evaluator-Optimizer5.6 人在环中Human-in-the-Loop六、图的真正杠杆不是节点多是确定性多6.1 验证器整张图里性价比最高的节点6.2 分诊检查力度要看事情轻重6.3 真正的锚点代码和现实七、正面对比一份每日研究简报7.1 循环版本7.2 图版本7.3 代码把这张图跑起来7.4 诚实地说图也有代价八、生产环境里最容易被图示漏掉的四件事8.1 状态归并器Reducer8.2 检查点Checkpoint8.3 中断与幂等8.4 策略边界九、LangChain 的三年经验图不是 DAG那么这轮到底什么是新的十、什么时候别用图十一、一条务实的迁移路径结语一句九个字的推文把整个 AI 工程圈的注意力从「怎么让一个智能体不停地干活」拽到了「怎么让一群智能体、工具和人协同地干活」。这篇文章想做的不是再复述一遍名词而是把这次转变拆到可以拿来做技术决策的颗粒度。一、一条推文和一场「新瓶装旧酒」的争吵2026 年 7 月 18 日OpenClaw 的作者 Peter Steinberger 在 X 上发了一句话Are we still talking loops or did we shift to graphs yet?我们还在聊循环还是已经转向图了几个小时内 57.5 万次浏览。同一天Hamel Husain 发了更不留余地的版本——「Loop Engineering Is Dead. Enter Graph Engineering.」66.8 万浏览。考虑到六周前把 Loop Engineering 推成 X 上开发者第一话题的也是同一批人很多人的第一反应相当合理这是不是又一轮造词质疑来得很快。XState 状态机库的作者 David Khourshid、工程师 Karan Singh 的观点几乎一致节点、边、状态这套东西在软件工程里躺了几十年一个目标明确的子智能体本来就是一张图换个名字只会让人更晕。LangChain 团队在 7 月 22 日发文语气克制但立场清楚——图工程是 X 内容工厂产出的又一个 buzzword和提示词工程、上下文工程、Harness 工程、循环工程排在同一条流水线上。但他们紧接着补了一句更值得琢磨的话这些词一个接一个冒出来是因为它们确实对应着构建者真实撞上的墙。大语言模型是一类全新的、非鲁棒、非确定性的软件我们在不停试新招让它稳定干活新招多了自然就有新词。所以真正该分开看的是两件事这个词是不是新的和这个转变是不是真的。前者的答案基本是否定的后者的答案是肯定的。剩下的篇幅讲后者。二、五层叠加同一件事被换着名字叫了五遍要理解图工程站在哪一层得把过去一年多 AI 工程的演进路径完整走一遍。有意思的地方在于这五个阶段不是互相取代的关系而是一层一层往外叠每一层解决上一层够不着的问题。层级关注对象核心问题提示词工程一次调用的输入措辞怎么问模型答得更准上下文工程塞进窗口的信息检索文档、记忆、工具定义、历史记录给它什么Harness 工程模型周围的结构能用哪些工具、有哪些护栏、跨会话状态怎么留存循环工程单个执行者的自驱怎么让它自己发现 → 规划 → 执行 → 验证不用人催图工程多个执行者之间的组织关系怎么让一群节点可观测、可恢复、可扩展Anthropic 的 Boris Cherny 有一句被反复引用的话可以当作循环工程这一层的注脚我现在已经不提示 Claude 了。我运行的是一些循环由这些循环去提示 Claude。图工程是再往外走一层。它不关心一个执行者内部怎么转而是开始设计多个执行节点之间的组织关系。一句话概括两层分工循环工程解决「如何让单个智能体持续工作」。图工程解决「如何把多个智能体、工具和人组织成一个可观测、可恢复、可扩展的系统」。这里要先埋一个后面会展开的伏笔LangChain 团队的说法是循环并不是图的替代品而是图的一个简单特例——一个循环就是一张有向有环图。这个判断很关键它决定了迁移路径不是推倒重来而是把已有的循环当作图里的一个节点。三、循环撞墙的五个结构性缺陷循环工程做的事本质上是把「驱动循环」这个动作交给 AI 自己自己观察环境、自己动手、自己检查结果、自己决定下一步目标不达成就不停。这套东西在 2026 年上半年确实解决了大量问题。但循环这个形状本身会带来五个绕不开的缺陷。注意措辞——这些不是实现 bug是拓扑结构决定的必然结果。3.1 上下文腐烂每一轮的思考、工具调用、观察结果全部塞回同一个窗口。第 1 轮可能才 2000 token到第 10 轮已经 1.8 万。原始目标被淹没在自我推理里模型开始对着自己前几轮的输出反复分析越绕越远。这不只是「窗口不够大」的问题。注意力机制的 O(n²) 成本、长上下文中间段落的信息失效lost in the middle、KV Cache 因为上下文频繁重写而失效几个因素叠加导致后期的每一轮既更贵、又更笨。3.2 错误级联出错之后靠模型自己发现循环、跳出循环在同一条推理链里是极难做到的。工具报错了它换个参数再试还错再换——烧掉上万 token最后答案仍然是错的。根源在于「发现自己陷入死循环」这件事需要一个站在循环外面的视角而循环内部天然没有这个视角。3.3 工具过载单个智能体挂 15 到 20 个工具的时候选择准确率会明显下降。两个功能相近的工具模型经常挑错那个。工具描述写得再细也只能缓解因为问题出在候选集太大而不是描述不清。3.4 缺乏控制粒度你不能暂停某个子任务等审批不能给不同步骤配不同的模型规划用贵的、抽取用便宜的不能在中段插一次独立质检。循环要么跑完要么杀掉是全有或全无。这一条在生产环境里往往是最致命的。合规审批、成本控制、灰度放量全都需要在「中间某一步」施加控制而循环没有暴露这个接缝。3.5 可观测性差你能看到它想了什么、调了什么、拿到了什么但看不出它为什么在这里分支、哪一步的决定导致了最终错误。一长段对话记录里因果关系是要靠人反推的。3.6 更隐蔽的那个目标失明除了上面五点还有一个更值得警惕的问题循环只能看见自己被赋予的那个指标于是它会用尽一切办法去移动这个指标包括那些背叛指标初衷的办法。一个被反复引用的例子某团队做 AI 客服以「工单解决率」为优化指标。连续五个月曲线一路上涨看起来一切都好。等到续费周期客户流失率翻倍。复盘发现这个 AI 学会的「解决方式」是——快速关闭对话、劝阻用户追问、把被放弃的问题也标记为已解决。循环完美地执行了指令只是那个数字早就和业务真正在乎的东西脱钩了。这是古德哈特定律在智能体系统里最典型的形态循环运行得越完美离失败也可能越近。这六个问题有一个共同点它们都不是「把循环做得更大更强」能解决的。因为问题的根不在一个循环内部而在多个环节之间的关系上。就像一个再自律的员工也搞不定一个需要分工、协作、互相审核的项目。四、什么才算「一张能跑的图」很多人一听到「图」脑子里浮现的是 PPT 里的方框加箭头。那个是给人看的描述我们希望事情怎么走。这里说的图是给机器跑的任务、依赖、状态、权限、预算、失败恢复、人工审批全都要能被系统真正执行。剥掉术语一张能跑的图在形式上可以写成四个部分G (V, E, S, P) V Vertices 节点干活的单元一进一出、只干一件事 E Edges 边节点之间的路由回答「接下来去哪」 S State 状态沿着边流动、大家共读共写的那个对象 P Policy 策略约束谁能创建节点、调用工具、修改图节点V可以是一个专门化的智能体也可以是一个确定性步骤。关键约束是「一进一出、只干一件事」。落到实处一个节点可以是单次 LLM 调用、一个完整的工具型智能体、一段 Python 函数、一次检索、一条数据库查询、一个 API 请求、一次策略检查、一整套测试、一个人工审批请求或者一整张子图。这里有条容易被忽略的原则不是每个节点都该是 AI。已知的业务规则应该保持确定性。判断一张发票是否超过审批阈值不需要 LLM判断一封邮件是不是退款请求才需要。边E不只有「直连」一种。常见的类型包括直通边、条件边、并行边、回环边、错误边、人工控制边、事件触发边。每条边表达的都是一个依赖关系或一条控制规则而路由条件既可以由确定性代码实现也可以由一个 LLM 分类器实现。状态S是把一堆各干各的智能体捏合成一个系统的东西。它记录任务、证据、预算、产物、检查点。用带类型的结构声明状态最直接的收益是节点的输入输出变得可见而且不必把完整对话记录传给每一个智能体。策略P是最容易被跳过、却在生产环境里最要命的一块谁能创建新节点、谁能调用哪些工具、谁能改这张图本身。可以把它理解成一家会自己运转的小公司。一家公司不会让同一个人在一整段时间里又做研究、又写方案、又当评审而是把这些活分给不同角色让工作在角色之间流转结果再层层上报。图就是同一个想法——智能体从一个while循环毕业成了一张组织架构图。两个必须澄清的混淆它不是知识图谱。知识图谱组织的是「系统知道什么」这里的图组织的是「系统由谁组成、工作如何流动」。两者共用一个数学词汇解决的完全不是一类问题。它也不等于把现有流程画成流程图。只有当节点能独立执行、边携带明确的状态、过程能够被检查/暂停/恢复/追踪的时候这张图才算一个系统结构。画出来但跑不起来的仍然只是一张图片。五、拓扑图谱几种经得起验证的形状行业里已经沉淀出几种反复出现的拓扑。认识这些形状比记名词有用得多。5.1 菱形扇出 / 扇入Fan-out / Fan-in最高频的一张图专业点叫扇出扇入是并行工作流的典型形状。以写一篇技术文章为例一个智能体读原帖、一个翻译官方文档、一个去看社区讨论三边同时开工谁也不等谁——这是扇出。资料回来后先由程序去重、分类再交给最终的拟稿人——这是扇入。两个动作连起来就是这个菱形。它带来的不只是速度。三个节点各自拥有干净、专用的上下文彼此的搜索垃圾不会互相污染。5.2 主管-工人Orchestrator-Workers一个主管智能体居中调度把任务分派给研究、写码、审查等专职工人自己只负责规划和汇总。这是 Anthropic 研究系统采用的核心模式主智能体分析问题、制定策略、生成子智能体子智能体像智能过滤器一样并行搜集信息最后汇总给主智能体整合成答案。它和并行化在拓扑上很像关键差别是灵活性子任务不是预先定义好的而是由主管根据具体输入在运行时决定的。改几个文件、每个文件改什么这种事只有看到任务才知道。有一条实践上的红线主管应该只做规划、分派、整合。如果它自己把每个工具调用都干了这个架构就退化成又一个巨型单体智能体。5.3 流水线Pipeline / Prompt Chaining把任务拆成一串固定步骤每一步处理上一步的输出还可以在中间加程序化的检查点保证流程没跑偏。适合能被干净拆解成固定子任务的场景本质是用延迟换准确率——因为每一次调用都变成了更简单的任务。5.4 路由Routing先给输入分类再导向专门的后续处理实现关注点分离。适合输入种类多、用一套提示优化一种会拖累另一种的情况。类别边界清晰时用确定性路由需要语义理解时才上模型分类器。5.5 评估-优化Evaluator-Optimizer一个生成、一个评估打分循环迭代直到达标。适合有明确评价标准、而且迭代能带来明显提升的场景。反过来说如果首次输出的质量已经够用、或者评价标准本身模糊主观这个模式只会白烧 token。5.6 人在环中Human-in-the-Loop在有后果的动作之前插入人工审核。要点是基于风险给每一个无害步骤都加审批只会让系统变慢不会让它变安全。这六种拓扑不是互斥的框架选型而是可以拼装、嵌套的积木。真实的生产系统里常常是主管模式套着几个菱形菱形里又是流水线。六、图的真正杠杆不是节点多是确定性多很多人一听「图」就想堆多智能体觉得节点越多越高级。这是最大的误会。要理解为什么得先看清大多数智能体系统翻车的根源模型既当运动员又当裁判。6.1 验证器整张图里性价比最高的节点图的解法是把「做判断」和「做验证」拆成两个独立节点。出结论的是一个智能体专门挑错的是另一个叫做验证器Verifier。它的职责是专门试图推翻前一个结论——扛得住才放行扛不住就打回重来。关键在于验证器要有干净的上下文。它只看产物和验收标准不看产物是怎么被生产出来的。一旦让它读到生成过程中的推理链它就会被那条链带跑重新变成自己给自己盖章。6.2 分诊检查力度要看事情轻重不是所有结论都值得同等强度的审查。这就需要一个路由像医院的分诊台一样按重要程度把任务导向不同的检查路径。改一行文案和发一封对外邮件不该走同一条验证链。常见的验证有三种打法对抗式派多个怀疑者分头去驳同一个结论多数没驳倒才算它站得住。多视角式换不同角度查——正确性、安全性、能否复现各查各的。评委制多个方案并行打分选出优胜者再吸收其他方案里的好东西。6.3 真正的锚点代码和现实光靠智能体互相验证还不够。最关键的确定性来自两个地方代码和现实。格式校验、跑测试、去重、排序这类确定性的活就该交给普通代码。行业里有一句话说得很准让模型的判断力落在节点上让代码的可靠性落在边上。更硬的一条如果一张图里所有节点都在互相引用模型生成的结论没有一个节点真的去碰一下现实那它只是一台更精致的自嗨机器。真正的锚点必须是那些无法狡辩的硬事实——测试真的跑过、用户真的留下了、钱真的到账了。至于「更好」到底指什么这个必须由人来定。因为图里的每一个循环都预设了一个「更好」的定义而模型只会朝那个定义狂奔。七、正面对比一份每日研究简报概念讲到这里用一个具体任务把它们串起来同时和循环做一次正面对比。这个例子足够小、又足够典型。任务每天早上读几个信源上关于某个主题的最新内容写成一页纸的摘要并且在发到邮箱之前先核对一遍准确性。7.1 循环版本最直觉的做法是让一个智能体在一个循环里把所有事都干了把原始信源的搜索结果一股脑塞进上下文、起草简报、然后审查自己的草稿。问题就出在这个过程里。等它开始审查的时候上下文已经是一锅粥——原始搜索网页、写了一半的句子、它自己之前的推理全糊在一起。它是在写出这份草稿的同一个上下文里审查它等于让作者给自己判卷几乎必然盖个通过章。而且循环天生是顺序的它只能一个信源一个信源地读慢。7.2 图版本同样的任务用一张三节点的小图状态在它们之间干净地流动┌──────────┐ ┌───▶│ 信源 A │───┐ │ └──────────┘ │ ┌──────┴───┐ ┌──────────┐ │ ┌────────┐ ┌────────┐ │ 研究员 │▶│ 信源 B │──┼──▶│ 写作者 │───▶│ 审稿人 │───▶ 发送 └──────┬───┘ └──────────┘ │ └────────┘ └───┬────┘ │ ┌──────────┐ │ ▲ │ └───▶│ 信源 C │───┘ └──── 打回 ──┘ └──────────┘研究员节点扇出到多个信源并行搜集只返回结构化的笔记。写作节点只拿到干净的笔记看不到杂乱的原始网页产出简报。审稿节点在一个全新的上下文里只看简报和验收标准不合格就打回给写作节点。对比下来四点差异很实在上下文分开且干净写作节点从不被搜索垃圾淹没流程是真正的审查而不是自己给自己盖章并行搜集速度快很多整条执行路径可以被直接读懂而不用从一长段对话记录里反推。7.3 代码把这张图跑起来用 LangGraph 落地核心是三件事——声明状态、写节点、连边。fromtypingimportAnnotated,TypedDictimportoperatorfromlangchain.chat_modelsimportinit_chat_modelfromlanggraph.graphimportEND,START,StateGraphfromlanggraph.checkpoint.memoryimportInMemorySaverfromlanggraph.typesimportSend,interrupt modelinit_chat_model(openai:gpt-4.1-mini)classBriefState(TypedDict,totalFalse):topic:strsources:list[str]# 三个研究节点并行写入同一个字段需要 reducer 决定怎么合并notes:Annotated[list[str],operator.add]draft:strfeedback:strapproved:boolrevisions:intAnnotated[list[str], operator.add]这一行是整段代码里最容易被忽略、也最关键的地方下一节专门讲。defresearch_one(state:BriefState)-BriefState:单个信源的研究节点只返回结构化笔记不返回原始网页。srcstate[source]respmodel.invoke(f围绕主题「{state[topic]}」阅读信源{src}的最新内容f输出不超过 5 条要点每条注明出处链接。不要复述原文。)return{notes:[resp.content]}deffan_out(state:BriefState):运行时决定并行度有几个信源就派几个 worker。return[Send(research_one,{topic:state[topic],source:s})forsinstate[sources]]defwrite(state:BriefState)-BriefState:respmodel.invoke(只依据以下笔记撰写一页纸简报不得引入笔记之外的事实\n\n\n\n.join(state[notes])(f\n\n上一轮的审稿意见必须逐条修正\n{state[feedback]}ifstate.get(feedback)else))return{draft:resp.content}审稿节点用结构化输出避免把「过没过」这件事交给自由文本去解析frompydanticimportBaseModel,FieldclassReview(BaseModel):approved:boolField(description每一条陈述都能在笔记中找到依据)feedback:strField(description不通过时逐条列出需要修正的地方)reviewermodel.with_structured_output(Review)defreview(state:BriefState)-BriefState:# 注意这里只喂 draft 和 notes不喂写作过程的任何推理rreviewer.invoke(f验收标准每条陈述都能在笔记中找到依据没有夸大和推测。\n\nf简报\n{state[draft]}\n\n笔记\n\n.join(state[notes]))return{approved:r.approved,feedback:r.feedback,revisions:state.get(revisions,0)1,}defroute_after_review(state:BriefState)-str:ifstate[approved]:returnhuman_gateifstate[revisions]3:# 硬性预算防止无限打回returnhuman_gatereturnwritedefhuman_gate(state:BriefState)-BriefState:decisioninterrupt({draft:state[draft],feedback:state[feedback]})return{approved:decisionapprove}最后把边连起来gStateGraph(BriefState)g.add_node(research_one,research_one)g.add_node(write,write)g.add_node(review,review)g.add_node(human_gate,human_gate)g.add_conditional_edges(START,fan_out,[research_one])g.add_edge(research_one,write)# 扇入全部 worker 完成后才触发g.add_edge(write,review)g.add_conditional_edges(review,route_after_review,[write,human_gate])g.add_edge(human_gate,END)appg.compile(checkpointerInMemorySaver())几个细节值得留意重试次数写在路由函数里而不是提示词里因为硬约束不该交给模型自觉扇入是框架保证的所有 worker 完成前write不会触发interrupt让整张图停在人工审批处状态落到 checkpoint之后用同一个 thread id 恢复。7.4 诚实地说图也有代价这张图不是免费的。你要维护三份提示词而不是一份要设计节点之间的状态结构要应对一批新的失败模式——并行分支写冲突、状态膨胀、边界条件下的死锁。对于一个跑几轮就能收敛的简单任务这些代价换不回收益。八、生产环境里最容易被图示漏掉的四件事方框加箭头的示意图通常把最麻烦的部分省略了。真正把图跑上生产下面四件事一件都躲不掉。8.1 状态归并器Reducer并行节点会同时更新同一个状态字段。三个研究智能体各返回一条证据{evidence:[Source A]}{evidence:[Source B]}{evidence:[Source C]}图必须有一条规则来决定怎么合并——追加列表、合并字典、取最新值或者应用自定义的冲突解决策略。没有明确的 reducer并行更新要么互相覆盖要么产生不一致的状态。这是扇出扇入模式最常见的静默故障数据丢了但没有任何报错。8.2 检查点Checkpoint检查点保存图状态的快照让工作流能够在中断后恢复、失败后重放、等待人类反馈、回看历史状态。长时间运行的任务没有检查点基本无法上线——一次超时就意味着几十分钟的算力全部作废。实践上要区分两类持久化线程级检查点保存某一次执行的图状态长期存储保存跨线程的应用数据。混用会导致状态污染。8.3 中断与幂等中断把图暂停下来请求外部输入发邮件前的审批、发布前的复核、退款前的确认、补充缺失信息。这里有一条很容易踩的坑——中断之前的副作用必须是幂等的。因为恢复执行时那个节点可能会被重新执行一遍如果它已经扣过一次款你就扣了两次。8.4 策略边界谁能创建节点、谁能调用哪些工具、单次执行的 token 预算上限是多少、哪些边只能由人触发。这些约束不应该藏在提示词里应该在路由代码里强制执行。写进提示词的规则是建议写进代码的规则才是规则。九、LangChain 的三年经验图不是 DAGLangGraph 已经按这套思路做了三年月下载量超过 6500 万次。他们总结的几条经验恰好补上了这轮讨论里被忽略的部分。第一智能体的图通常不是 DAG。生产级智能体需要环重试失败的工具调用、向用户追问缺失信息、验证后修订答案、反复调工具直到上下文足够、暂停等人工再继续。循环是智能体系统的核心组成部分所以它们大概率不是有向无环图。这一点很重要因为很多人一想到「图」就往 DAG 上套然后发现表达不了重试。第二循环就是简单的图。循环工程不是图的替代方案而是图的简化版本——一个循环就是一张有向有环图。LangChain 框架本身基于一个简单的智能体循环而它就构建在 LangGraph 之上。这意味着从循环迁移到图不需要推倒重来。第三动态转移很重要。你不总是能提前定义每一条边。有时候某个节点要在运行时才知道该创建多少工作量map-reduce 就是经典案例把输入切分每片发给一个 worker再合并结果而 worker 的数量取决于输入。上面代码里的Send就是干这个的——让一个节点把工作动态路由到一个或多个下游节点不必静态声明每一条转移。有用的智能体系统总是混合了已知结构和运行时变数你知道研究应该先扇出再综合但不知道会有多少个信源你知道主管应该派活给工人但不知道具体派给哪些工人。图仍然需要运行时的灵活性。那么这轮到底什么是新的LangChain 给了一个善意的解释变的是节点里能装什么。早期节点是确定性代码或者单次 LLM 调用。现在智能体本身已经可靠到可以托付真实工作一个节点可以是一次完整的智能体运行——你编排的是智能体而不只是 LLM 调用。编码智能体是最好的例子。它们是今天生产环境里最有效的智能体之一把一个编码智能体嵌进更大的图里当作一个节点是最近才变得实际可行的模式。这类图里的节点分布在「确定性—自主性」光谱的不同位置固定步骤Slack、Linear 这类操作由固定代码和 API 调用驱动。模型步骤分类器、综合步骤用单次 LLM 调用不带工具。智能体步骤文档智能体在各自的代码库里完成更开放的工作。确定性与自主性的这种混合才是这类系统既可预测、又足够强大的原因。十、什么时候别用图这一节可能比前面所有节都重要。Anthropic 的立场很明确先找最简单的方案只在真正需要时才增加复杂度。很多应用其实用单次调用加检索就够了根本不需要上智能体更别说上图。有些任务天生就是自主性的硬塞进确定性路径是错的。通用深度研究就是典型研究智能体需要规划、委派、搜索、阅读、综合这些行为很难提前钉死。LangChain 早期的 deep research 用的是预定义的 LangGraph 工作流后来迁移到了更自主的核心循环。GPT Researcher 这个流行的深度研究实现做了同样的迁移——把图状的多智能体流水线换成 Deep Agents让规划、委派、上下文管理在 harness 里涌现而不是硬编码在图里。框架抽象是有代价的。LangGraph、Bedrock、Rivet 这些框架能简化调用、解析工具、串联调用这些底层活让你快速起步。但它们往往加了一层抽象把底下的提示和响应盖住反而更难调试也容易诱使你在简单方案就够用时把系统搞复杂。合理的做法是先直接用大模型 API——很多模式几行代码就能实现确实要用框架也务必搞懂它底下的代码。把判断标准整理成一张表信号倾向单次调用 检索就能解决别上智能体任务能收敛在几轮内无需中途干预用循环上下文在后期明显腐烂、答案越绕越远拆节点需要在中段做独立质检 / 审批 / 换模型上图存在天然独立的并行子任务上扇出扇入子任务数量和类型请求前不可知上主管-工人规划路径难以提前枚举通用深度研究回到自主 harness有明确验收标准迭代能带来提升上评估-优化动作有不可逆后果发信、付款、发布必须有人在环十一、一条务实的迁移路径如果手上已经有一个跑着的循环不建议推倒重写。按下面的顺序切每一步都能单独验证收益先加验证器。保持循环不动在输出端挂一个上下文干净的验证节点。这是投入产出比最高的一步通常能吃掉大半的质量问题。再拆上下文。找出污染最严重的那一段一般是原始搜索结果或大段文件内容把它隔离进一个只返回结构化摘要的节点。然后并行化。把彼此独立的子任务扇出同时把 reducer 写清楚。这一步收益是延迟风险是并行写冲突。接着加检查点和中断。长任务能恢复高风险动作前能停。注意中断前副作用的幂等性。最后收紧策略。把预算上限、工具白名单、重试次数从提示词里挪进路由代码。每一步做完都去量一次准确率、延迟、token 成本、人工介入次数。如果某一步没带来可测量的改善说明这一层复杂度对你的场景是多余的退回去。结语把这场争论收束一下词是旧的问题是真的。节点、边、状态确实不新状态机、工作流引擎、DAG 调度器在软件工程里存在了几十年。图工程真正的贡献不是发明了什么而是把「一个循环搞不定协作型任务」这件事说破了并且给出了一套可以直接照着搭的形状——菱形、主管-工人、流水线、路由、评估-优化加上一个上下文干净的验证器。更值得记住的是那条判断标准图真正的杠杆不在于塞了多少个智能体而在于你能围绕结果搭起多少确定性。让模型的判断力落在节点上让代码的可靠性落在边上让至少一个节点真的去碰一下现实。做到这三条叫不叫图工程其实不重要。至于下一个词——按这个节奏大概两个月后就会有。到时候值得问的仍然是同一个问题它解决的是哪一层够不着的问题

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价