Agent开发 1.2 - Agent 多维解构与架构选型全景:正交维度与技术雷达

2026-10-19 | 42分钟 | yrobot | Agent开发, 架构选型, 正交维度, 技术雷达, 控制流

在当前的 AI 工程实践中,开发者面临的最大困扰往往不是“缺少开源工具”,而是陷入了一场由海量专有名词引发的认知混乱。

在技术选型讨论中,经常能看到类似的问题:

“我们这个业务到底该选 ReAct 还是 LangGraph,或者要不要直接上 MemGPT?”

这种横向对比从分类学上就混淆了层次。这就好比在设计一栋房屋时,把“剪刀”、“二楼厨房”、“红砖”和“物业管家”放在同一张表格里打分对比。它们根本不处于同一个工程切面。

要建立清晰的架构选型能力,首先必须将 Agent 系统拆解为彼此正交的独立维度,把满天飞的技术名词放回各自的抽屉,进而在面对具体业务时,运用奥卡姆剃刀原则选出最简组合。

概念归位:解构 Agent 系统的 6 大正交维度

一个工业级 Agent 系统的完整 Harness(运行时支架),可以解构为 6 个彼此独立、互不干扰的正交工程维度:

flowchart TD
    subgraph Harness["Agent 运行时 6 大正交支架"]
        D1["1. 执行控制流
(Control Flow)"] D2["2. 协作拓扑
(Collaboration)"] D3["3. 上下文与状态
(Context & State)"] D4["4. 工具工程与协议
(Tooling & Protocols)"] D5["5. 记忆体系
(Memory & Persistence)"] D6["6. 评测与门禁
(Eval & Guardrails)"] end LLM["大语言模型内核 (LLM Core)"] <--> Harness

初读下表时,如果看到大量陌生名词或缩写,请完全不必有心理负担。这张表并不是一份需要当场背诵的清单,而是一张全局的“行李架索引图”。表中的每一套方案(如 ReAct、LangGraph、MCP、MemGPT 等),后续第 2 到第 7 章都会带大家用代码逐一彻底拆解。当前这一步,读者只需要建立一个最朴素的直觉:有哪些维度,分别处理什么内容。

正交维度 这个维度真正要解决的工程问题 常见技术方案归位
1. 执行控制流 (Control Flow) 程序是怎么跑起来的?每一步的执行权由谁决定? Pipeline、DAG、ReAct 循环、LangGraph(状态图)、有限状态机 (FSM)
2. 协作拓扑 (Collaboration) 是单智能体独立作业,还是多个智能体协同?角色如何切分? 单智能体、Master-Worker、多智能体对等协作 (CrewAI / AutoGen)、红蓝对抗辩论 (Debate)
3. 上下文与状态 (Context & State) 推演过程中的状态放在哪?窗口满载时如何处理?人类如何介入? 消息流追加、动态折叠 (Compaction)、共享黑板 (Blackboard)、人机协同 (HITL) 断点挂起
4. 工具工程与协议 (Tooling) Agent 怎么触达外部物理世界?工具怎么通信、怎么防造假? 本地函数调用、强类型 Server Actions、Anthropic MCP 协议、Gate 触发门禁
5. 记忆体系 (Memory) 会话结束后,跨会话的经验怎么沉淀与跨时区唤醒? 无状态、工作记忆 (Working Memory)、向量数据库检索 (RAG)、MemGPT 分层记忆
6. 评测与门禁 (Eval & Guardrails) 怎么量化验证系统的可靠性?出现异常如何硬性阻断? 静态单元测试、LLM 裁判打分 (LLM-as-a-Judge)、生产级 Fail-Fast 熔断门禁

其实 ReAct、LangGraph 与 MemGPT 完全可以并存:系统可以使用 LangGraph 编排宏观状态流,在某个具体的子节点内运行 ReAct 探索循环,同时挂载 MemGPT 负责读写长期记忆,并通过 MCP 协议与本地数据库通信。

典型技术方案的本质剖析

为了彻底理清方案差异,需要看透主流方案在各自维度中的底层机制。

1. ReAct vs LangGraph:微观循环与宏观图编排

两者都属于【执行控制流】维度,但可以处理不同的控制层级:

  • ReAct(Reasoning + Acting):一种微观交互套路。它让大模型在调用工具前先陈述思考(Thought),再执行工具(Action),观察结果(Observation)后再决定下一步。 它的底层本质是一个由大模型完全主导的开放式 while 循环。其优点是自由度极高,适合未知的探索性任务;缺点是不可控,面对复杂多步骤流程时容易逻辑漂移或陷入循环。

  • LangGraph:一个宏观状态图编排框架。它将应用建模为一张包含节点(Node)、有向边(Edge)与状态(State)的图(Graph)。 开发者通过代码明确画出流程跑道,并用条件边(Conditional Edge)设定红绿灯与岔路口。它专门用来解决 ReAct 循环过于自由、无法保障确定性业务规则的痛点。

flowchart LR
    subgraph Macro["LangGraph 宏观状态图"]
        N1["节点 A: 解析输入"] --> C{"条件判断: 是否需要探索?"}
        C -- "简单需求" --> N2["节点 B: 快速查表"]
        C -- "复杂异常" --> N3["节点 C: 深度排查"]
        N2 --> EndNode["输出结果"]
        N3 --> EndNode
    end
    subgraph Micro["节点 C 内部: ReAct 微观循环"]
        direction TB
        T["Thought (思考)"] --> A["Action (调工具)"]
        A --> O["Observation (环境观察)"]
        O --> T
    end

2. MemGPT:类操作系统分级存储的记忆架构

MemGPT(现更名为 Letta)归属于【记忆体系】维度,核心解决大模型上下文窗口有限且关闭窗口即遗忘的痛点。

它借鉴了计算机操作系统的虚拟内存管理思想:

  • 内存(RAM / 工作上下文):大模型当前能直接看见的上下文窗口,仅存放系统指令(Core Memory)和最近的对话片段。
  • 外存(Disk / 持久化存储):通过后台数据库保存海量历史消息(Recall Memory)与知识文档(Archival Memory)。
  • 读写机制:系统为大模型配备专门读写自身记忆的内置工具(如 core_memory_append、archival_memory_search)。大模型根据对话进展,自主决定何时将事实归档到“硬盘”,何时翻查历史档案。

3. 多角色博弈(Debate):物理隔离上下文消除认知偏误

在【协作拓扑】维度中,除了常见的“主从分发(Master-Worker)”,针对高风险分析任务(如投资风控、医疗方案评估、代码安全审计),通常会引入“多角色博弈(Multi-Agent Debate)”。

为什么不让一个聪明的单 Agent 独立完成分析?根本原因在于大语言模型的自回归生成与上下文自我强化(Context Conditioning):

  • 当一个 Agent 在生成前序段落时写下了某种倾向(例如“该技术前景广阔”),后续预测的 Token 概率分布就会严重被前文带偏;
  • 即便在提示词中要求其“批判性思考”,单上下文内的模型往往倾向于自我合理化(自圆其说),很难真正做到彻底推翻自己的论点。

多角色博弈的工程本质,是通过物理隔离上下文来切断这种自欺欺人:

flowchart TD
    subgraph IsolatedContexts["物理隔离的上下文环境"]
        AgentA["多头分析师 Agent
(专注寻找增长点与技术优势)"] AgentB["空头质询官 Agent
(专注寻找财务漏洞与政策死穴)"] end DB[("外部事实库 / 财报底稿")] <--> AgentA DB <--> AgentB AgentA -- "提交看多证据" --> Judge["终审委员会 Agent
(不搜集资料,仅对比双方凭证与逻辑漏洞)"] AgentB -- "提交看空证据" --> Judge Judge --> FinalReport["输出客观平衡的决策报告"]

通过将“寻找优势”与“寻找漏洞”拆分给两个拥有独立上下文的 Agent,双方必须拿出可验证的外部事实底稿互相质询,最终由不参与信息搜集的裁判 Agent 裁决,从而以隔离计算为代价换取极致的事实严谨度。

架构师的第一美德:奥卡姆剃刀与防过度设计

了解了丰富的武器库后,最容易犯的工程错误就是“手里拿着锤子,看什么都是钉子”。

翻车案例:在确定性业务中滥用 ReAct

某跨境电商系统中存在一个高频核心接口:根据物流单号查询当前包裹位置并回复用户。 业务逻辑非常清晰:校验单号格式 -> 请求物流服务商 API -> 获取 JSON 数据 -> 转换为易读的回复。全链路在传统工程中仅需 200ms。

一位开发者为了使用新技术,设计了一套纯自主 ReAct 智能体:

  1. 启动一个 while 循环;
  2. 给大模型声明了 query_tracking、query_refund、search_faq 等 5 个工具;
  3. 让模型自由执行 Thought -> Action -> Observation 循环。

上线后的系统表现:

  • 时延翻倍:原本 200ms 的操作,大模型必须先生成思考 Token,再输出 Tool Call,本地执行完后再生成总结,单次耗时拉长至 3 到 5 秒;
  • 成本激增:每一次简单的查询都携带了所有工具描述与多轮往返消息,Token 账单暴涨 10 倍以上;
  • 偶发故障:在极少数情况下,大模型在思考时出现语义漂移,误调用了 query_refund,或者因网络短暂波动返回报错时陷入了死循环。

根因与重构原则

这个案例违背了软件工程的基本常识:把确定性极高的逻辑交给了具备不确定性的大模型去调度。

代码是 0 Token 成本、毫秒级响应、100% 稳定 的;大模型真正的长处在于理解非结构化自然语言与归纳润色。 在确定性极高、规则穷举的场景下,控制流的执行权必须牢牢掌握在代码手中:

flowchart LR
    Input["用户输入单号"] --> CodeCheck["代码: 正则校验"]
    CodeCheck --> CodeAPI["代码: 抓取物流 API"]
    CodeAPI --> LLM["LLM: 语言润色与国际化"]
    LLM --> Output["返回自然语言结果"]

在这个重构后的最简架构中:

  • 控制流退化为最纯粹的固定代码 Pipeline;
  • LLM 仅作为管线末端的无状态转换器;
  • 无需多 Agent、无需外部长期记忆、无需向 LLM 注册 Tool Call 声明。

奥卡姆剃刀(如无必要,勿增实体)是 Agent 架构设计的第一准则。满足需求的最简架构,永远是最健壮的架构。

架构选型技术雷达:3 类典型业务实战

面对差异化的业务场景,如何在这 6 个维度上做出科学取舍?

目前无需纠结于某一个具体技术(如动态折叠、共享黑板、断点挂起)该如何落地编码,后文每一章都有专门的动手实验。阅读下表时,只需体会一个核心趋势:当业务从“极度确定”走向“极度开放”时,每个维度的开关是如何被按需打开或关闭的。

正交维度 场景 1:轻量退换货客服 场景 2:代码自动重构智能体 场景 3:金融行业深度研报分析
业务核心特征 规则高度确定,容错率要求极高,存在阶段性等待 探索性极强,依赖长程试错与本地环境执行 依赖海量外部事实,极易产生主观偏见与幻觉
1. 控制流 单步 / 规则主导 Pipeline
(大模型仅做意图识别与输出润色)
ReAct 试错微循环
(根据测试报错反复调整修改策略)
DAG 流水线 + 状态图
(宏观受控的分阶段采集与合流)
2. 协作拓扑 单点(无需多 Agent 协作) 单 Agent 深入执行
(或规划者 + 编码者双角色)
多 Agent 红蓝对抗
(看多/看空独立质询 + 终审委员会)
3. 上下文与状态 会话级追加 + 表单断点挂起
(等待用户提交凭证)
动态折叠压缩 (Compaction)
(丢弃过期编译日志,防窗口爆炸)
结构化共享黑板 (Blackboard)
(各角色将提取的事实与凭据统一上板)
4. 工具与安全 受限 API / Server Actions
(查询订单、提交申请,严格鉴权)
本地文件读写 + 沙箱 Bash
(高危命令过滤、隔离执行环境)
全网检索 + 权威机构 API
(严格核验原文出处 Grounding)
5. 记忆体系 无状态 / 轻量用户画像
(仅读取会员等级与过往退款率)
单任务工作区记忆
(任务结束即清空释放)
长期研报向量知识库
(跨研报长期知识沉淀)
6. 评测与门禁 业务规则硬断言 + Schema 校验 静态语法检查 + 自动化测试套件 (TDD) 事实凭证溯源率 + 事实一致性裁判

总结与决策导图

在着手编写第一行 Agent 代码之前,可以通过以下决策链路进行逐层收敛:

flowchart TD
    Start["评估业务需求"] --> Q1{"业务步骤能否被规则或代码确定性穷举?"}
    Q1 -- "能" --> A1["使用确定性代码 Pipeline
(LLM 仅充当局部提取或润色节点)"] Q1 -- "不能" --> Q2{"执行路径是单线试错,还是复杂阶段流转?"} Q2 -- "单线探索与试错" --> A2["单 Agent ReAct 循环
(重点做好最大步数熔断与上下文折叠)"] Q2 -- "多阶段/多分支/需人工审批" --> A3["LangGraph / 状态机拓扑
(宏观状态图控制走向,局部节点挂载工具)"] A2 & A3 --> Q3{"任务是否存在严重的单向确认偏误风险?"} Q3 -- "是" --> B1["引入物理隔离上下文的多角色对抗辩论"] Q3 -- "否" --> B2["保持单智能体或主从分工"]

摆脱技术名词的杂音,牢牢锚定这 6 大正交维度:

  • 当系统出现延迟高、成本高时,首先审视控制流是否让渡过度;
  • 当模型陷入自欺欺人时,审视协作拓扑是否需要隔离;
  • 当上下文窗口溢出时,审视状态与压缩治理。
  • 按需配置,克制演进,才是一个稳健 AI 系统应有的底色。