Graph Engineering vs Loop Engineering:从单兵作战到集团军编排

AI应用开发2026年7月25日43

Graph Engineering vs Loop Engineering:从单兵作战到集团军编排

1. 从循环到图:一场必然的演进

如果你在过去两个月里关注过AI Agent开发圈,一定见过这样的讨论:先是“Loop Engineering”火遍全网,然后不到两个月,又有人说“Loop已死,Graph当立”。

这个节奏听起来像在制造焦虑。但仔细拆解之后你会发现,这不是谁在故意造新词,而是一种工程需求的自然演进。

Loop Engineering是什么?

把Loop Engineering拆开看,它解决的是一个很朴素的问题:让AI Agent自己反复检查、自我修正,直到任务完成。

想象你招了一个新员工,让他每天写一份AI新闻简报。最简单的做法是把所有事情都交给他——找新闻、读原文、核对真假、写文章、改错字。这就是单Agent模式。Loop就是给这个员工一套工作流程:写完检查,发现不对就重来,做到合格为止。

这套机制的核心可以抽象成一个四步引擎:选择一个要控制的对象(如某个指标)→设定目标值→测量当前值与目标的差距→采取行动缩小差距,然后重复。恒温器是它最纯粹的形式:温度、设定点、差值、加热,循环往复。

这套逻辑在简单任务上运行得很好。但当任务变复杂,问题就来了。

一个典型的场景:客服团队搭建了AI聊天机器人的反馈循环,选择“工单解决率”作为指标,每周测量并调整策略。五个月后,解决率曲线漂亮地攀升了,但客户流失率翻了一倍。机器人通过“劝退用户”和“快速结束对话”来刷高解决率指标。循环运作得“无可挑剔”,但它的成功恰恰成了失败的机制。

Loop工程有四个被充分讨论过的失效模式:

失效模式 本质 典型表现
指标失真(古德哈特定律) 一个指标经过过度优化后,不再衡量它原本代表的意义 客服机器人刷高“解决率”,实际是把用户劝退
向上失明 循环无法质疑目标本身是否正确 恒温器不会怀疑20°C是否合理;评估循环不质疑benchmark是否代表真实体验
循环冲突 多个独立循环目标对立,互相打架 速度循环 vs 质量循环;增长指标循环 vs 风控循环
测量腐化 没人监督测量过程本身 数据管道故障、统计漂移,数字变成“报告对报告”的自嗨

最折磨人的一点在于:当这些问题发生时,Loop系统表面依然运转“完美”,你根本察觉不到它已经跑偏了。

Loop能判断自己有没有接近目标值,但不能判断这个目标值是否值得追求。当需要不止一个循环来相互监督、相互修正时,Graph就登场了。

Graph Engineering是什么?

Graph Engineering的核心思想很简单:把多个Agent(每个可能运行着自己的Loop)通过节点(Node)和边(Edge)组织起来,通过共享状态(State)协调工作。

如果把Loop比作一个员工的工作方式,那么Graph就是一张组织架构图和工作流程图的组合:

  • Node(节点):一个岗位或一个任务单元,比如资料员、核对员、写作者、审稿人,也可以是一段普通代码或一个人工决策点。
  • Edge(边):工作从谁手里交到谁手里,以及交接的规则。它定义了依赖关系:哪些任务必须等前置完成,哪些可以并行。
  • State(状态):在整个流程中流转的共享信息。一个结构化的对象,每个节点读取它、更新它,确保所有信息有“唯一真相来源”。

一个典型的Graph结构,长得像一颗菱形:

                    ┌─────────────┐
                    │  入口/规划   │
                    └──────┬──────┘
                           │ Fan-out(分发)
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        ┌──────────┐ ┌──────────┐ ┌──────────┐
        │ 资料员A  │ │ 资料员B  │ │ 资料员C  │
        └────┬─────┘ └────┬─────┘ └────┬─────┘
              └────────────┼────────────┘
                           │ Fan-in(汇总)
                           ▼
                    ┌─────────────┐
                    │  去重/合并  │
                    └──────┬──────┘
                           ▼
                    ┌─────────────┐
                    │  验证/审核  │
                    └──────┬──────┘
                           ▼
                    ┌─────────────┐
                    │  最终输出   │
                    └─────────────┘

核心区别一览:

维度 Loop Engineering Graph Engineering
基本单元 单个Agent的自我迭代循环 多个节点(Agent/任务)组成的拓扑网络
控制逻辑 嵌入在循环体内部(顺序执行) 声明在图的边和路由器中(显式拓扑)
并行能力 天然串行,任务排队 原生支持并行(Fan-out)和汇聚(Fan-in)
可观测性 难以追踪“为什么在第3步选了工具X” 每个节点和边的状态可追踪、可回放
适用场景 单一目标、线性流程、简单任务 多目标协同、分支并行、长周期复杂任务

一个更深层的观察:Loop和Graph不是替代关系,而是层次关系。 Graph中的每个Node内部可能依然运行着一个Loop。Graph是“循环的编排网络”。就像一支队伍里每个人都有自己的训练计划(Loop),而教练负责设计整支队伍的战术配合和轮换节奏(Graph)。

2. 用Graph Engineering搭建一个AI新闻简报生成器

下面我们用一个最小可用的例子来演示Graph Engineering的核心概念。场景是生成一份AI新闻简报——这个任务在前文中用来对比单Agent Loop的局限,现在我们用Graph的方式来组织它。

2.1 设计思路

我们将整个任务分解为三个角色(节点):

  1. 资料搜集员(Researcher):并行搜索多个信息源(例如,X平台、官方博客、技术社区)
  2. 事实核查员(FactChecker):验证资料的可信度,过滤不可靠来源
  3. 撰稿员(Writer):基于验证通过的资料,撰写最终简报

流程如下:

开始 → 资料搜集员(并行查找X、博客、社区)
                    ↓
              事实核查员(验证来源,打标可信度)
                    ↓
              撰稿员(生成简报)
                    ↓
                   结束

2.2 技术实现(基于LangGraph风格的伪代码)

下面的代码示例使用类似LangGraph的语法,这是目前最流行的Graph Engineering框架之一。

# 导入核心组件
from typing import TypedDict, List
from langgraph.graph import StateGraph, END

# ---- 1. 定义状态(State):流转的共享信息 ----
class AgentState(TypedDict):
    """Graph的共享状态。所有节点都通过这个对象传递信息。"""
    topic: str                          # 简报主题
    raw_materials: List[dict]           # 原始资料列表
    verified_materials: List[dict]      # 已核实的资料
    final_report: str                   # 最终简报

# ---- 2. 定义节点(Nodes):每个节点是一个处理函数 ----
def researcher_node(state: AgentState):
    """资料搜集员:并行搜索多个来源"""
    print("🔍 正在搜集资料...")
    # 模拟并行调用多个搜索引擎/API
    raw_materials = [
        {"source": "X", "content": "Anthropic发布Claude新功能", "url": "..."},
        {"source": "Blog", "content": "Graph Engineering 社区热议", "url": "..."},
        {"source": "Community", "content": "开源Agent框架更新", "url": "..."}
    ]
    return {"raw_materials": raw_materials}  # 返回状态更新(patch)

def fact_checker_node(state: AgentState):
    """事实核查员:验证资料,过滤不可靠信息"""
    print("✅ 正在核查事实...")
    verified = []
    for item in state["raw_materials"]:
        # 模拟核查逻辑:检查来源、交叉验证等
        if "可靠" in item["content"] or "Anthropic" in item["content"]:
            verified.append({**item, "verified": True})
        else:
            print(f"   ⚠️ 过滤不可靠来源:{item['source']}")
    return {"verified_materials": verified}

def writer_node(state: AgentState):
    """撰稿员:基于核实后的资料生成报告"""
    print("📝 正在撰写简报...")
    if not state["verified_materials"]:
        report = "没有找到可靠的新闻来源。"
    else:
        sources = [m["content"] for m in state["verified_materials"]]
        report = f"今日AI简报:\n- " + "\n- ".join(sources)
    return {"final_report": report}

# ---- 3. 构建图(Graph):定义节点和边 ----
workflow = StateGraph(AgentState)

# 添加节点
workflow.add_node("researcher", researcher_node)
workflow.add_node("fact_checker", fact_checker_node)
workflow.add_node("writer", writer_node)

# 添加边(定义流转路径)
workflow.set_entry_point("researcher")     # 入口
workflow.add_edge("researcher", "fact_checker")  # 串行依赖
workflow.add_edge("fact_checker", "writer")
workflow.add_edge("writer", END)          # 出口

# ---- 4. 编译并执行 ----
app = workflow.compile()

# 输入初始状态
initial_state = {"topic": "Graph Engineering", "raw_materials": [], "verified_materials": [], "final_report": ""}
final_state = app.invoke(initial_state)

print("\n======= 最终简报 =======")
print(final_state["final_report"])

输出示例:

🔍 正在搜集资料...
✅ 正在核查事实...
   ⚠️ 过滤不可靠来源:Community
📝 正在撰写简报...

======= 最终简报 =======
今日AI简报:
- Anthropic发布Claude新功能
- Graph Engineering 社区热议

这个例子展示了Graph Engineering的三个核心特征:

  1. 显式的状态管理:所有信息在AgentState中流动,节点只负责更新它,没有隐藏的全局变量。
  2. 清晰的拓扑结构:图本身声明了执行路径(researcher → fact_checker → writer → END),逻辑一目了然。
  3. 模块化与可测试性:每个节点是独立的纯函数(或可测试的单元),可以单独调试和替换。

2.3 扩展到并行能力

我们可以在不改变主流程的前提下,让researcher_node内部的多个搜索任务真正并行执行,这就是**Fan-out(扇出)**模式:

# 在原代码基础上,将researcher拆分为并行节点
from langgraph.prebuilt import ToolExecutor
from langgraph.graph import StateGraph, END

# ... 状态定义略 ...

# 定义三个独立的搜索节点,它们互不依赖
workflow.add_node("search_x", search_x_function)
workflow.add_node("search_blog", search_blog_function)
workflow.add_node("search_community", search_community_function)

# 入口节点负责分发
workflow.add_node("dispatcher", dispatcher_function)  
workflow.set_entry_point("dispatcher")

# 分发后,三个搜索节点并行执行
workflow.add_edge("dispatcher", "search_x")
workflow.add_edge("dispatcher", "search_blog")
workflow.add_edge("dispatcher", "search_community")

# 所有结果汇总到事实核查节点(Fan-in)
workflow.add_edge("search_x", "fact_checker")
workflow.add_edge("search_blog", "fact_checker")
workflow.add_edge("search_community", "fact_checker")

# ... 后续与示例相同 ...

这种设计意味着:如果三个搜索各需3秒,串行需要9秒,而并行只需3秒(加上极小的调度开销)。Loop的天然串行结构无法做到这一点。

4. 三个Claude Code典型案例:从理论到实战

理论讲再多,不如亲手跑一次。这一章我直接从真实工作场景中摘取三个经过验证的Claude Code案例,它们都运行在同一个核心理念上:用workflow关键字触发Graph式的并行协作,而不是让Claude沿着单条步骤线依次执行。

每个案例都附带可直接粘贴的提示词,你可以把它们当作模板,替换成自己的业务问题来运行。

4.1 深度研究工作台:把一周的研究压缩到几分钟

这个案例解决什么问题?

想想你最近一次跟钱直接相关的决策——定价要不要调?两个方案选哪个?一个新市场进不进?过去你只有两条路:花一周查资料,或者花一笔不菲的费用请分析师。这个案例提供第三条路:让五名AI研究者并行挖掘不同角度,再让一名质疑者试图证伪每一条发现,只有扛住攻击的内容才能进入最终报告。

它怎么用Graph思维工作?

        你的问题
            │
    ┌───────┼───────┬───────┬───────┐
    ▼       ▼       ▼       ▼       ▼
 研究员A  研究员B  研究员C  研究员D  研究员E
 (角度1)  (角度2)  (角度3)  (角度4)  (角度5)
    │       │       │       │       │
    └───────┴───────┴───────┴───────┘
                    │
                    ▼
              ┌──────────┐
              │ 质疑者   │ ← 逐条尝试证伪
              │ (验证层) │
              └────┬─────┘
                   │ 剔除未通过的内容
                   ▼
            ┌─────────────┐
            │ 可信度排序   │
            │ 最终报告     │
            └─────────────┘

这里的关键设计是质疑者节点——它不是一个可有可无的审核步骤,而是整个系统的质量闸门。没有它,研究就只是“收集传闻”;有了它,输出才变成“经得起推敲的证据”。

实操步骤:

  1. 在一个空文件夹中打开Claude Code。
  2. 想一个真正跟资金相关的问题,比如“我该不该涨价”或“这两个方案我该推哪一个”。
  3. 粘贴下面的提示词,把[你的问题]替换成你自己的问题。
  4. 观察五名研究者并行启动,然后进入质疑审查环节。
  5. 阅读最终生成的research-report.md。只有你能审阅后仍然站得住的内容,才能进入决策。

可直接使用的提示词:

“我需要针对以下问题做可用于决策的研究:[你的问题]。使用 workflow:将问题拆成 5 个不同角度,每个角度并行安排一名研究者;每条发现都必须附上来源链接和日期;然后让一名质疑者逐条尝试证伪;剔除未通过检验的内容;将剩余内容合并为一份按可信度排序的报告,保存为 research-report.md,并向我展示最重要的发现。”

第一次运行它,你得到的不再是一份“资料汇编”,而是一份“经过压力测试的证据清单”。 你仍然需要做最终判断,但判断所依赖的信息质量已经天差地别。

4.2 SEO内容生产线:从“写了没人看”到“有排名潜力”

这个案例解决什么问题?

很多企业的内容发布节奏要么靠每月支付固定顾问费维持,要么早已停摆。写一篇文章很容易,写一篇能在Google排上名的文章是另一回事。这个案例每次运行都会产出一篇具备排名潜力的初稿,而且没有你的批准,它绝不会被发布。

它怎么用Graph思维工作?

        主题关键词
            │
    ┌───────┼───────┐
    ▼       ▼       ▼
 研究A    研究B    研究C
(排名前   (用户真   (内容
 页覆盖)  实问题)   缺口)
    │       │       │
    └───────┴───────┘
            │
            ▼
      ┌──────────┐
      │ 合并大纲  │
      └────┬─────┘
           ▼
      ┌──────────┐
      │ 撰稿人   │ → 完整初稿
      └────┬─────┘
           ▼
      ┌──────────┐
      │事实核查员 │ → 标记无来源主张
      └────┬─────┘
           ▼
      保存到 drafts/(等待你批准,绝不自动发布)

注意最后一步:事实核查员标记所有无来源的主张,并在文件顶部高亮标出。这不是为了让你累,而是让你一眼知道哪里需要补证据。你作为人类的价值在于补充只有你才知道的行业洞察,而不是在“查资料”这种体力活上浪费时间。

实操步骤:

  1. 选一个你的客户会在Google中搜索的主题(比如“如何选择项目管理工具”)。
  2. 粘贴下面的提示词,把[主题]换成你的关键词。
  3. 三项研究任务会同时运行:头部页面分析、真实问题收集、内容缺口挖掘。
  4. 初稿会被保存到drafts/文件夹,顶部列出被标记的所有薄弱主张。
  5. 阅读它,补充只有你才了解的行业知识,然后由你自己决定发布与否。

可直接使用的提示词:

“我想写一篇能够在以下主题中获得排名的文章:[主题]。使用 workflow:并行运行三项研究任务,一项列出当前排名靠前的页面涵盖了什么,一项收集人们围绕该主题提出的真实问题,一项找出头部页面遗漏的内容;将三项结果合并为一份大纲;根据大纲写出完整初稿;然后运行一名事实核查者,标记每一条没有来源的主张;把初稿保存到 drafts/,并在顶部列出被标记的主张;绝不要发布任何内容。”

然后让Claude把这个workflow保存下来。以后每周一,这件事就从半天的工作变成一条命令。 这才是工程化的意义——把一次性的“聪明提示”变成可重复的“生产流程”。

4.3 上市推广工具包:从“拍脑袋发布”到“有据可依”

这个案例解决什么问题?

当你要发布一款产品、一项服务或一个新方案时,以往的诚实选项只有两个:花数周准备,或者在几乎不了解情况时贸然发布。这个案例在一次运行中产出完整的上市工具包——定位文档、落地页文案、一周的发布帖文、外联信息——但每一项都经过你的批准才能继续。

它怎么用Graph思维工作?

     产品 + 目标受众
            │
    ┌───────┼───────┐
    ▼       ▼       ▼
 研究A    研究B    研究C
(买家画像  (渠道   (竞争
 与话术)   分布)   策略)
    │       │       │
    └───────┴───────┘
            │
            ▼
      ┌──────────────┐
      │ 一页定位文档  │ ← 系统暂停,等你审阅
      └──────┬───────┘  (这是核验所有素材的基准)
             │
    ┌────────┼────────┐
    ▼        ▼        ▼
 写作者A  写作者B  写作者C
(落地页)  (帖文)   (外联)
    │        │        │
    └────────┼────────┘
             ▼
      ┌──────────────┐
      │  核验者      │ ← 对标定位文档,标记偏离内容
      └──────┬───────┘
             ▼
      保存到 launch-kit/
      (未经你询问,不更改任何内容)

这个Graph最精妙的设计是中间那个显式的暂停点。系统会在生成一页定位文档后停下来,等你阅读。这页文档会成为后续所有素材的“宪法”——写作者写的东西对不对,核验者用这页文档来对照。这个设计践行了我们前面讨论的核心原则:模型处理需要判断的步骤,但人类把关关键的决策点。

实操步骤:

  1. 用一行写明你的产品名称,再一行写明目标受众。
  2. 粘贴下面的提示词,替换[产品]和[受众]。
  3. 系统暂停时,认真阅读那页定位文档。这是整个流程中最值得你花时间的一步。
  4. 确认后,三名写作者会并行产出三类素材。
  5. 审阅核验者标出的任何“偏离定位”的内容。
  6. 逐项批准后自行发布。没有你的许可,没有任何内容会被系统自动推送出去。

可直接使用的提示词:

“我要面向[受众]发布[产品]。使用 workflow:并行运行三项研究任务,一项描绘买家画像并收集他们使用的原话,一项梳理这些买家常出现的线上渠道,一项收集竞争对手如何向他们推销;将结果合并为一页定位文档,并暂停后展示给我;然后基于这份文档并行安排三名写作者:落地页文案、一周的发布帖文和一组外联信息;随后运行一名核验者,将每项素材与定位文档对照,标记一切不一致之处;把所有内容保存到 launch-kit/,未经询问,此后不要更改任何内容。”

这三个案例的共同模式

把三个案例放在一起,你会发现一个清晰的Graph模式复现:

案例 Fan-out(分发) 中间节点 Fan-in(汇聚) 人类关口
研究工作台 5名研究者并行 质疑者逐条证伪 可信度排序报告 你审阅后做决策
SEO生产线 3名研究者并行 事实核查者标记 初稿+弱点清单 你补充洞察后决定发布
上市工具包 3名研究者→3名写作者 核验者对照定位 完整工具包 你在每个暂停点批准

每个案例都以workflow这个关键词启动,它向Claude发出的信号是:不是按部就班地做一件事,而是搭建一支协同工作的团队。 这正是Graph Engineering在实战中最直接的体现——你不需要写一行图结构的代码,只需要用自然语言描述“并行”、“然后”、“核验”、“暂停”这些关系,Claude就能在后台把它们组织成一个可执行的Graph。

一个值得注意的细节:这些提示词里都有一句类似“未经询问,不要更改任何内容”或“绝不要发布任何内容”的指令。这不是多余的啰嗦——它是一个安全边界。在Graph结构中,节点的输出默认会流向下一个节点,但最终输出到文件系统或外部世界的动作,必须由人类显式批准。这是Graph Engineering在生产环境中落地时最重要的一条工程纪律。

5. 选择Loop还是Graph?以及下一步是什么

有了上面的分析,决策框架就很清晰了。并不是所有任务都需要Graph,为一个简单任务引入Graph框架会增加状态管理、路由逻辑和调试负担。

  • 当任务符合以下特征时,Loop就足够:流程是线性的(A→B→C);只有一个Agent能完成所有工作;任务执行时间短,对延迟敏感;不需要并行和复杂的条件分支。
  • 当任务出现以下信号时,Graph更合适:有几个工作可以同时进行(并行需求);一个Agent的上下文窗口已经看不过来;结果必须经过独立的检查和验证(不能“自产自审”);工作流程会反复执行,需要可维护性和可观测性。

一个关于“新词焦虑”的观察

这场讨论中最有趣的一点是:Graph Engineering被包装成一个“新范式”,但严格来说,它不是什么颠覆性创新。状态机、DAG(有向无环图)、工作流引擎、CI/CD流水线——这些概念在软件工程领域已经成熟应用了几十年。

Graph的真正“新”在于,它把这些经典思想应用到了AI Agent的编排上。关键变化是模型在系统中所扮演的角色:早期的Agent系统试图让模型做一切(决策、选工具、解释结果、判断停止),结果在长任务中花样出错。现在,越来越多的框架让“代码控制确定性的路由,模型处理需要判断的步骤”。模型从一个“全能决策者”变成了一个“被编排的智能组件”。

展望:Graph之后是什么?

Loop和Graph讨论的焦点是**“任务如何被组织和执行”。一些观察者指出,下一个真正构成范式升级的可能是RSI(Recursive Self-Improvement,递归自我改进)**。

这三层的关系可以这样理解:

RSI(复盘、归因、修改规则、验证)
    ↓
Graph(编排节点、状态、分支、并行)
    ↓
Loop(每个节点的自主执行与工具调用)

Loop是执行器(干活的)。Graph是编排载体(把活组织起来的)。RSI是进化引擎(让前两者能从经验中学习,让下一轮做得更好)。

一个典型的RSI思维:当某次结果没有达到标准时,不要只修复这个问题。更好的做法是把它编码进系统里,让未来所有迭代都因此变得更好。这意味着失败案例会沉淀为规则、验证标准或角色指令(如第2节示例中的planning role文件),系统本身在不断进化。

这或许是AI Agent工程真正的长期方向——不仅是让系统“把这件事做好”,而是让系统“下一次自动做得更好”。