在当前的 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
end2. 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 智能体:
- 启动一个
while循环; - 给大模型声明了
query_tracking、query_refund、search_faq等 5 个工具; - 让模型自由执行
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 系统应有的底色。