返回归档
🧭LLM 与 Agent

Agent 架构:循环、拓扑与骨架

裸 ReAct 跑完交不出产物,往往不是缺某种新循环,而是循环、拓扑、骨架三层缠在一起。分开定,再选论文名。

文章目录

一句话主线:循环、拓扑、骨架回答的问题不同——节点里怎么转、谁跟谁交接、边何时合法;混成一层谈 ReAct / Swarm,失败模式也对不上。

把一句糊需求丢进裸 ReAct。它调工具、写中间结果、再润色同一段,直到 max_steps 用完。该交的产物没有。回放是一串 Thought / Action / Observation,对不上「现在盘里有什么、哪一步合法」。

这通常不是「论文技巧不够新」。三件事缠在一起了:模型在节点里怎么想下一步、多个角色怎么交接产物、整张图有没有合法终点与状态字段。工具协议与沙箱见 Agent 协议分层。本文只把这三层拆开。

三层各自管什么

拆开,是因为失败落点不同。循环选错,钱烧在空转上;拓扑选错,产物在交接处丢或被多人同时改;骨架缺席,回放对不上状态,也说不清「什么叫做完」。

循环活在节点里;拓扑是谁跟谁说话;骨架是合法边

  • 循环(ReAct、Plan、Critic…)
    • 管:这一步里,观察要不要改下一步、要不要打回、何时停。
    • 探索(下一步依赖上一眼)和定稿生成(步骤已钉死)若共用同一套循环,步数会耗在「再润色一句」上。
  • 拓扑(Router、Pipeline、Orchestrator…)
    • 管:产物和权限怎么交——谁只转发、谁只执行、缺字段能不能退回。
    • 循环只描述一个节点内部;多角色时,失败常出在交接(站间传闲聊、中心去调业务工具、死线不能回退)。循环选对,拓扑错了,仍会整条重跑。
  • 骨架(阶段、合法转移、状态字段)
    • 管:节点叫什么、边何时合法、状态里留哪些字段。循环嵌进节点,拓扑嵌进边。
    • 没有终点边和字段约定,循环不知道「交得出什么算完」,拓扑也不知道「这一站产出交给谁」。开篇那种对不上盘的回放,就是骨架缺席。

设计顺序跟依赖一致:先定骨架(阶段与合法边),再给边选拓扑,再给节点选循环。先堆论文名,容易把整张系统当成一个大 ReAct。没有骨架的循环,不是「少画了一张图」,而是停条件和产物契约无处安放——观察越积越长,账单在涨,却说不清现在交得出什么。

循环:节点内部怎么转

选循环时,先问一件事:这一步的下一步,是否真依赖上一眼观察?

ReAct

宿主只认 Thought → 调工具 → 写回 Observation → 再想。

Thought → Action → Observation;Final 或 Stopped

停条件写在宿主:max_steps、连续两轮无新工具、同一 (tool, args)repeated_call、预算到顶交部分结果。Observation 要截断。工具 5xx 也写成观察,别让异常直接撕掉图。

下一步真依赖上一眼时,ReAct 合适。步骤已经钉死还继续 ReAct,步数几乎必然耗在空转上——开篇那种失败,多半落在这里。

Plan-and-Execute

先产出带 done_when 的步骤表,执行器按表走。

Task → Planner → Executor → Done;重规划有上限

观察默认不改计划;步失败或前提被打脸才重规划,次数封顶。执行器不跳步。步骤还在变就硬上,会写出假计划——规划成本付了,执行仍像在猜。

ReWOO

旁路,不是「更好的 ReAct」。规划器先写带占位符的工具计划;互不依赖的调用可一批发出;Solver 只凭证据合成。规划阶段不跟每条 Observation 交织。

Xu et al., 2023 在 HotpotQA 上报告约 5× token 效率、准确率约 +4%(相对文中 ReAct 基线;只在该论文设定下成立)。依赖已知、工具相对稳时,它省轮次;一条工具结果会推翻整份计划时,假计划的代价更大。

Critic-Actor

Actor 只生成;Critic 只按表打回,不改稿。

Spec → Actor → Critic;轮次到顶走人

能自动判的(schema、字数、禁词、键)宿主先跑。主观维落到具体路径,带可再跑的 verify。轮数封顶,到顶整份交给人。同一段 prompt 里「先写再自己骂」,容易自我开脱,直接 pass=true

其它循环(按需)

  • Reflection:终态之后才写教训,下一轮才注入。条目要有 tried / result / next;改这一份走 Critic,改下一次策略才走它。成功默认不写。
    本轮终态后才 Reflect;有 next 进 Memory
  • ToT / LATS:扩、估、剪、回溯。估价要可比较;k=3、深 3 已经贵。估价不可比较时,树搜索烧 token,人最后仍要并列候选里投一票——这时 ToT 不是主路径。
    Expand → Score → Prune
  • Imagination / 结构化入口:指令不可执行时,先收成目标、约束、交付物、可自动判的 success。宿主校验不过就打回;后面的循环只认这个对象,不认用户原话。
    Fuzzy ask → Imagination → 结构化对象;Controller 只看见对象

拓扑:谁跟谁说话

选拓扑时,先问:产物是广播、串行交接,还是中心裁断? 权限能不能越级?

Router

入口只输出枚举 (target, payload),自己不干活。payload 带已有产物指针。

Request → Router → 各专家;Router 不调业务工具

Router 一旦调业务工具,拓扑和循环就糊成一团——入口既在选路,又在执行,排障时分不清是路由错了还是循环空转。

Pipeline

站间只传产物。缺字段退回,带 missing[]

站间只传产物,不传闲聊

人还没锁方向就进下一站,后面每站都在补洞。死线没有合法回边:方向在第二站才清楚时,只能整条重跑。骨架上若不允许回退,Pipeline 的刚性会变成整图刚性。

Orchestrator-Worker

中心拆任务、收摘要、裁断、取消;Worker 只和中心说话。中心不调业务工具。一层够用就停。

Goal → Orchestrator → Workers → Merge

中心去调业务工具,等于把循环塞进拓扑层:裁断者和执行者身份重合,取消与重试的边界也糊掉。

其它拓扑(按需)

  • Hierarchical:多一层只为摘要和授权。没有另一时间尺度或权限边界,拆掉。
    Strategy → Mid → Exec
  • Blackboard / Swarm:黑板要有类型、写权限、冲突规则、收敛条件。Swarm 对等发消息,结束靠投票、超时、或无人再发言。当整张骨架时,多人容易同时改同一字段;短时并行可放进某个节点的时间盒,不宜替代骨架。
    多个 Writer 写黑板;投票或超时结束
  • Debate:双方持立场;没参赛的裁决者只看带引用的表。命题要可证伪;口味题硬辩,表上落不下证据。
    Claim → Pro / Con → Evidence table