用 Goal 取代 Graph:多智能体框架的真正方向

Give agents a playground, not a blank canvas

2023 年 3 月,一个名叫 Toran Bruce Richards 的开发者发布了 AutoGPT,两周内 GitHub Star 突破 10 万。他在 README 里写道:「给 AI 一个目标,它自己规划、自己执行、自己反思。」不需要你画流程图,不需要定义任务依赖——完全自治。

三个月后,Richards 的 GitHub Issues 页面变成了大型翻车现场。一个被反复引用的案例:用户让 AutoGPT「研究人工智能的历史」,Agent 搜索了 10 篇文章,保存,然后又搜索了 8 篇,再保存,然后检查自己保存的文件,然后重新搜索……无限循环,API 费用烧了几十美元,一事无成。AutoGPT 的 GitHub 仓库里记录了超过 200 个类似的 infinite loop issue。

AutoGPT 的失败让行业得出了一个看似正确的结论: Agent 需要预定义的执行图。于是 LangGraph 成了 2026 年最受欢迎的 Agent 框架——62% 的开发者选择了它,正是因为它提供了精细的状态机控制和可预测的执行路径。

但我跟很多在用 LangGraph 的团队聊过,他们私下都在抱怨同一件事: 画图太痛苦了。 每增加一个能力,就要重新设计图的拓扑结构;每遇到一个边界情况,就要加一条边和一个条件分支。开发者的时间,一半花在写 Agent 逻辑,另一半花在维护那张 DAG。

这就引出了一个真正的问题:DAG 是答案吗?还是我们在 AutoGPT 的阴影下过度矫正了?

从 DAG 到 Goal:多智能体框架的演进

DAG 的真正问题

先说清楚,我不是要全盘否定 DAG。在确定性工作流中——比如数据处理管道、CI/CD 流水线、审批流程——DAG 是正确的设计。步骤已知、依赖关系固定、异常路径可枚举。这些场景里,DAG 提供了可预测性和可审计性,这是生产环境的硬需求。

但多智能体系统的本质是什么?是 让 AI 做决策。当你预定义了一张执行图,你其实是在说:「我已经提前知道这个任务应该怎么分解、步骤之间有什么依赖、遇到异常该怎么处理。」

问题是,你不可能提前知道这些。

一个真实的场景:你让 Agent 系统「分析竞品最近一个月的动态,生成一份报告」。用 DAG 的话,你可能会画出这样的图:

[搜索竞品新闻] → [提取关键事件] → [分类整理] → [生成报告]
       ↓ (异常)
[重试搜索] → [降级到缓存数据]

这看起来合理。但实际执行时会发生什么?Agent 在搜索阶段发现竞品刚发了一个重大公告,这时候它应该停下来深挖这个公告的细节,而不是按 DAG 继续走「提取关键事件」。或者它发现竞品的新闻太少,应该转向分析竞品的 GitHub 提交记录和招聘信息来推断战略方向。

这些决策是 DAG 画不出来的。 因为 DAG 的本质是「开发者在写代码时做的决策」,而 Agent 的价值是「在执行时根据实时信息做决策」。两者存在根本性的张力。

纯 Goal-driven 为什么也失败了

那回到 AutoGPT 的思路——只给目标,让 Agent 自己生成 DAG 再执行。这个方向是对的吗?

方向对,但执行方式错了。AutoGPT 的致命问题不在于「让 Agent 规划」,而在于它 没有任何约束。一张白纸交给一个能力不稳定的规划者(LLM),结果自然是混沌的。

具体来说,纯 Goal-driven 有三个工程层面的硬伤:

1. 任务分解质量不稳定。 给 LLM 一个中等复杂度的目标,它可能分解出 3 个子任务,也可能分解出 15 个。有的子任务太大(「完成整个后端」),有的太小(「创建一个空文件」)。依赖关系判断也经常出错——把有因果关系的步骤并行了,把可以并行的步骤串行了。

2. 失败时不会调整计划。 LLM 在规划阶段生成了一个 DAG,然后忠实执行。当某个节点失败时,它不会重新规划——因为 DAG 是「一次性产物」,Agent 没有「修改计划」的能力,只有「按计划执行」的能力。结果就是:错误的计划 + 忠实的执行 = 灾难。

3. 成本不可控。 每一步规划、执行、反思都是 LLM 调用。没有结构约束,Agent 可能反复规划-执行-反思-重新规划。AutoGPT 用户报告过单次运行消耗数百美元 API 费用的案例。

第三条路:有界自治

DAG 太死板,纯 Goal-driven 太混沌。真正的答案在中间——有界自治(Bounded Autonomy)

核心思想只有一句话: 给 Agent 一个 playground,而不是一张白纸。

Playground 有围栏——这些是硬编码的安全边界、成本控制、合规检查。围栏之内,Agent 完全自治——自己决定怎么分解任务、用什么工具、如何处理异常。

┌──────────────────────────────────────────────────┐
│                   Playground                     │
│                                                  │
│  ┌─────────┐   ┌─────────┐   ┌─────────┐       │
│  │ 子任务A  │──→│ 子任务B  │──→│ 子任务C  │       │
│  │(Agent自决)│   │(Agent自决)│   │(Agent自决)│       │
│  └─────────┘   └─────────┘   └─────────┘       │
│                                                  │
│  ────── 围栏 ──────                               │
│  · 预算上限:$5                                   │
│  · 最大步数:20                                   │
│  · 禁止操作:删除生产数据、发送邮件               │
│  · 必须操作:每步记录审计日志                     │
└──────────────────────────────────────────────────┘

这不是理论。2026 年 5 月,Anthropic 在 Claude Code 2.1 中发布了 /goal 命令,这正是有界自治的一个教科书级实现。

Claude Code /goal:教科书级的实现

Claude Code 的 /goal 命令让开发者可以设定一个完成条件,然后 Agent 自主工作直到条件满足。它的工作方式是这样的:

  1. 开发者输入 /goal 所有测试通过且代码覆盖率 > 80%
  2. Agent 进入自主循环:分析代码 → 修改 → 运行测试 → 检查结果 → 决定下一步
  3. 每一轮结束后,一个独立的「检查模型」判断完成条件是否满足
  4. 条件满足时,目标自动清除,控制权返回开发者

关键不在于 Agent 能自主执行——AutoGPT 也能。关键在于 围栏的设计

来自 VILA-Lab 对 Claude Code 源码的逆向分析(约 512K 行 TypeScript 代码),一个惊人的发现是: 只有 1.6% 的代码是 AI 决策逻辑,其余 98.4% 都是确定性基础设施——权限门控、上下文管理、工具路由、错误恢复。

这意味着什么?Agent 的「智能」只占系统的极小部分,绝大部分工程量在于构建那个 playground 的围栏:

from dataclasses import dataclass, field
from typing import Optional
from enum import Enum

class GuardType(Enum):
    COST = "cost"
    STEP = "step"
    PERMISSION = "permission"
    TIME = "time"

@dataclass
class PlaygroundConstraint:
    """围栏定义——Agent 自治的边界。"""
    guard_type: GuardType
    limit: float | int
    on_violation: str = "stop"  # stop | fallback | escalate
    metadata: dict = field(default_factory=dict)

@dataclass
class GoalSpec:
    """目标定义——不是 DAG,而是完成条件 + 围栏。"""
    completion_condition: str       # 自然语言描述的完成条件
    constraints: list[PlaygroundConstraint]
    available_tools: list[str]      # 可用工具白名单
    context: Optional[str] = None   # 初始上下文

# 示例:一个有界自治的任务定义
goal = GoalSpec(
    completion_condition="所有单元测试通过,无 lint 错误",
    constraints=[
        PlaygroundConstraint(GuardType.COST, limit=5.0),
        PlaygroundConstraint(GuardType.STEP, limit=30),
        PlaygroundConstraint(GuardType.PERMISSION, limit=0,
                             metadata={"forbidden": ["rm -rf", "git push --force"]}),
        PlaygroundConstraint(GuardType.TIME, limit=600),  # 10 分钟
    ],
    available_tools=["terminal", "read_file", "write_file", "run_tests"],
)
# generated by hugo AI

Agent 在这个 playground 内完全自治——它自己决定改哪个文件、先改哪个后改哪个、怎么验证。但围栏是不可突破的:超过 30 步就停,超过 $5 就停,试图执行危险命令就停。

这就是 Goal 和 Graph 的正确关系:Goal 定义「做什么」和「不能做什么」,Agent 在执行时自己生成「怎么做」的隐式 DAG。

框架对比:三个范式的本质差异

把今天主流的多智能体框架放在这个视角下看,它们的本质差异就清晰了:

维度LangGraph(DAG-first)AutoGPT(Goal-only)Claude Code /goal(有界自治)
谁做任务分解开发者(编码时)Agent(运行时)Agent(运行时),但有围栏
执行路径预定义状态机完全自主自主 + 确定性基础设施约束
失败恢复预定义 fallback 边经常陷入无限循环检查模型每轮评估,超限自动停止
可预测性高(可审计每一步)低(每次运行路径不同)中(路径不可预测,但边界可预测)
开发成本高(维护 DAG 拓扑)低(只需写目标)中(定义围栏 + 目标)
适用场景确定性流程、合规要求高原型验证、探索性任务复杂但可约束的任务

注意,这不是「一个比一个好」的关系。每种范式都有它的最佳适用场景:

  • 你的任务是数据处理管道,每一步都是确定的 → 用 LangGraph 画 DAG,这是正确的工具
  • 你在做研究性探索,没有明确的步骤,也不需要生产级可靠性 → AutoGPT 式的纯 Goal-driven 可以接受
  • 你的任务复杂且有不确定性,但有明确的安全边界和成本要求 → 有界自治是正确的选择

真正的问题是:大多数团队在用 DAG 做本应使用有界自治的事情。 他们花大量时间维护复杂的 DAG 拓扑,本质上是在编码时预测运行时的所有可能性——而这恰恰是 Agent 应该做的事。

有人可能会反驳:「预定义 DAG 保证确定性和可审计性,企业合规必须如此——你不能让 Agent 自主决定怎么处理用户数据。」这个担忧完全合理。但有界自治的回应是: 约束放在任务边界层面,而非执行路径层面。这就像公司的财务制度——审批流程是固定的(这是约束),但每个部门怎么花预算是自治的(这是执行)。合规检查可以作为围栏的硬编码部分(「不得访问 PII 数据」「每步记录审计日志」),而 Agent 在这些约束之内的决策自由度,恰恰是它比 DAG 更擅长处理不确定性场景的原因。

从 DAG 到 Goal 的迁移路径

如果你的系统目前完全基于预定义 DAG,想要逐步引入 Goal-driven 的能力,我建议分三步走:

第一步:识别 DAG 中的「伪确定性」节点。

你的 DAG 里一定有这种节点:开发者写了一个 if-else 分支来处理某种不确定性,但分支条件写得极其粗糙,覆盖不了真实场景。这些节点就是应该交给 Agent 自主决策的地方。

第二步:把这些节点替换为 Goal + 围栏。

不是把整个 DAG 扔掉,而是把「伪确定性」节点替换成一个有界自治的子 Agent。DAG 的整体结构保留(提供可预测性),但关键节点内部让 Agent 自主决策(提供灵活性)。

[DAG 节点A] → [子 Agent:Goal + 围栏] → [DAG 节点C]
                     ↓ (超时/超限)
              [DAG fallback 节点]

第三步:逐步放宽 DAG 约束,扩大 Agent 自治范围。

随着你对 Agent 决策质量的信心增加,逐步把更多的 DAG 节点替换为 Goal-driven 的子 Agent。最终,DAG 退化为只保留安全围栏和关键检查点——这就是成熟的有界自治系统。

OpenAI 的框架演进路径恰好印证了这一点:从 Swarm(教育性质的轻量级 handoff 框架)到 Agents SDK(生产级的 Agent 协作框架),核心转变就是从「预定义交互模式」走向「Agent 自主 handoff」。

一个反直觉的结论

回到文章开头的问题:用 Goal 取代 Graph,可行吗?

答案是: 不是取代,而是分层。

底层是 Goal——定义做什么、不做什么、完成的标志是什么。这一层是 Agent 的自治领域。

外层是 Graph——但不是执行路径的 Graph,而是约束和检查点的 Graph。预算上限、权限边界、审计日志、超时熔断。这一层是确定性的、可审计的、不依赖 AI 的。

DAG 不应该告诉 Agent「怎么走」,而应该告诉 Agent「哪里不能去」。

这个思维转换的意义可能比技术选型更大。它本质上是在说:我们对 AI 的信任模型应该从「白名单」(只允许做预定义的事)转向「黑名单」(禁止做明确不允许的事,其余自由发挥)。

前者适合 AI 能力不够强的时代。后者,在 2026 年的今天,可能是正确的赌注。

你的多智能体系统,还在画 DAG 吗?欢迎留言讨论。


See also