跳转到正文
莫尔索随笔
返回

第六篇:Agent 框架应该怎么选

预计 20 分钟
Agent 工程化 编辑此页

Agent 框架决定 Agent 如何从用户目标走到最终结果。它负责组织推理、工具调用、记忆读取、状态更新、错误恢复和最终输出。选框架不是选最流行的库,而是选择一种适合任务复杂度、可靠性要求和团队能力的控制方式。

从工程角度看,多数 Agent 执行框架都可以拆成三部分:上下文组织、状态机控制和工具执行。差异在于它把多少决策权交给模型,多少控制权留给代码。

Agent 框架要解决什么问题

一个 Agent 在执行任务时会不断面对以下问题:

  • 当前目标是什么
  • 已经知道哪些信息
  • 下一步应该调用哪个工具或生成什么内容
  • 工具失败后如何处理
  • 什么时候应该停止
  • 如何把中间结果合成为最终交付物

框架把这些问题组织成可运行流程。没有框架,Agent 很容易变成一次性 Prompt 拼接,框架过重,又会限制灵活性并增加工程成本。

三种常见架构模式

框架不是越全越好。团队应先明确任务类型、失败成本、评估方式和上线边界,再决定是否需要复杂框架,框架可以进一步归纳为三种工程范式:最小可用范式、工作流式和动态规划式。

1. 最小可用(Pi)

编码 Agent、沙箱、浏览器、文件操作,OpenHands 最小可用范式只保留必要的 Prompt、上下文和少量工具调用。它适合轻交互、低风险、单轮或短流程任务。

优点缺点
成本低、延迟低、实现快缺少多步规划和复杂状态管理

适合:FAQ、简单信息抽取、单次内容生成、轻量分类。

2. 工作流式(LangGraph)

自研工作流、强业务流程和强合规、维护成本和模型能力接入、LangGraph支持状态机、图式编排、可恢复执行 状态建模和节点边界设计

工作流式由开发者预先定义流程,模型只在关键节点负责理解、生成或判断。它适合流程稳定、合规要求高、结果需要可控的业务。

常见模式包括链式、路由、并行、评审和状态机。

优点缺点
稳定、可审计、易测试对开放任务适应性不足

适合:审批、客服工单、数据处理、标准报告、企业流程自动化。

3. 动态规划式(类Manus)

Claude Agent SDK,Deep Agents,快速构建工具型 Agent(长任务、Sub Agent、文件系统协作),子任务拆分和结果整合,沙箱、浏览器、文件操作,安全边界和执行 Trace

动态规划式让模型在运行时自主拆解任务、选择工具、根据反馈调整路径。它适合开放、探索、路径不明确的任务。

优点缺点
灵活,能处理未知情况成本、延迟和结果方差更高

适合:深度研究、复杂排错、代码任务、网页操作、多源信息整合。

框架选型指南

选择框架时,可以按任务特征判断。

任务特征推荐范式
单轮、低风险、低成本优先最小可用范式
流程明确、合规要求高工作流式
路径不明确、需要探索动态规划式
长任务、多步骤、需审计Plan-and-Execute + Trace
依赖实时反馈ReAct
需要经验沉淀Reflexion + Memory
多人或多角色协作主从 Agent 或 Multi-Agent

进一步决策可以看三项约束:

  1. 可控性优先时,选择工作流或混合架构。
  2. 灵活性优先时,选择动态规划式,但必须加预算和护栏。
  3. 成本优先时,先做最小可用范式,不要提前引入复杂编排。

工程挑战

框架上线后,常见挑战包括:

挑战点现象描述应对方法
循环失控Agent 重复调用工具、反复尝试同一失败操作,或生成偏离原始目标的子任务设置最大步数、整体超时、目标锚定和重复操作检测
成本不可预测工具调用和模型调用次数过多设置 token 预算、模型分层、并行上限和提前停止条件
状态漂移长任务中目标、约束和用户偏好被遗忘使用状态表、Todo list、上下文压缩和关键约束重注入
工具混淆工具过多导致选择错误、参数错误或幻觉调用使用工具分层、按需加载和权限隔离
错误恢复不足一次工具失败导致整条任务中断对错误分类处理,区分重试、降级、人工介入和终止
可观测性不足多次模型调用、工具交互和状态转换后,失败原因难以追溯建立全链路 Trace,记录模型 I/O、工具调用参数、结果、耗时和关键状态变更
决策依据不可追踪无法判断 Agent 为什么选择某个工具、放弃某条路径或得出某个结论记录关键决策日志,保留约束、证据、备选方案和风险判断

常见失败模式

失败模式表现处理方法
分工过细协调成本超过执行收益合并子任务,减少 Agent 数量
Main Agent 失控任务分派不清,结果无法整合使用结构化子任务和返回格式
上下文丢失Sub Agent 忽略关键约束在输入中显式列出硬约束和完成标准
结果冲突多个 Agent 给出矛盾结论引入证据排序和冲突解决规则
成本膨胀并行调用过多模型和工具设置预算、超时和最大 Agent 数
权限混乱Sub Agent 执行越权动作按角色隔离工具权限

选型建议

框架选型可以遵循以下顺序:

  1. 先用最小可用范式验证任务价值和基础质量。
  2. 如果流程稳定,把关键路径固化为工作流。
  3. 如果任务路径不确定,在局部引入 ReAct 或动态规划。
  4. 如果任务周期长,引入 Plan-and-Execute、状态持久化和上下文压缩。
  5. 如果需要持续优化,引入 Reflexion 和经验记忆。
  6. 如果需要并行或专业分工,再引入 Multi-Agent。
  7. 无论选择哪种框架,都必须建设 Trace、评估集和安全护栏。

引入 Multi-Agent 前,还需要额外回答几个问题:

  1. 任务是否真的可以拆分,而不是人为拆分。
  2. 拆分后是否能并行,或是否能带来专业质量提升。
  3. 子任务的输入、输出和完成标准是否清晰。
  4. Main Agent 是否有足够能力整合冲突结果。
  5. 工具权限、Trace 和评估体系是否已经准备好。
  6. Multi-Agent 带来的收益是否超过成本和延迟增加。

落地顺序可以是:

  1. 先用单 Agent 建立可用基线。
  2. 找出单 Agent 的瓶颈:上下文、工具、并行、复核还是专业性。
  3. 只为瓶颈引入一个 Sub Agent 或 Reviewer。
  4. 固化子任务输入输出格式。
  5. 用评估数据验证质量、成本和耗时是否改善。
  6. 再逐步扩展更多 Agent。

框架的目标不是展示 Agent 有多自主,而是让系统在真实约束下稳定完成任务。

Agent 技术形态

工作流与 Agent 并存

很多生产系统不是纯工作流,也不是纯自主 Agent,而是混合架构。

工作流外壳:控制入口、权限、步骤、审计和交付格式
智能内核:在关键节点完成理解、检索、生成、决策和修正
工具网关:统一执行外部操作
评估系统:持续监控质量和成本

混合架构的优势是把确定性流程交给代码,把不确定判断交给模型。这样既能保留 Agent 的灵活性,又能满足生产系统对稳定性和审计的要求。

Agent 技术形态正在收敛

在 2025 年 10 月之前,Agent 的技术发展仍处于快速演进阶段。两个信号能说明这一点:Manus 从 3 月发布到 10 月经历了 5 次大规模架构重构;LangChain 直到 2025 年 10 月才正式发布 1.0,并同步推出 Deep Agents。

从 2025 年 10 月起,Agent 技术形态开始收敛。主流框架逐渐靠近 Claude Agent SDK 和 Deep Agents 所代表的执行范式:主 Agent 负责任务拆解和协调,Sub Agent 或任务节点负责局部执行,文件系统或外部存储承担上下文卸载和共享工作区,工具调用采用分层设计,并通过上下文压缩、Trace、评估和人工介入支撑长任务。

这些能力说明 Agent 工程的重点已经从单次 Prompt 转向上下文管理、状态控制和执行可靠性。

1. 主从 Agent 架构

主从架构采用层级化任务调度模式,Main Agent 负责任务拆解、子任务分派和结果整合,Sub Agent 专注执行具体子任务。

能力作用
上下文隔离子任务执行过程不会污染 Main Agent 的上下文
并行执行多个子任务可以同时进行,降低总耗时
专业化分工不同 Sub Agent 可以配置专属工具、权限和 System Prompt
token 效率Sub Agent 完成任务后只返回结论、证据、风险和需要决策的问题

主从架构不是为了增加 Agent 数量,而是为了在复杂任务中建立清晰的责任边界、更低的上下文污染和更可靠的结果复核。

2. 自主规划能力

规划能力让 Agent 能够把复杂任务拆解为可执行步骤,并根据工具反馈动态调整执行策略。Plan-and-Execute、ReAct、动态规划和 Todo list 都可以看作不同粒度的规划机制。

即使是一个不执行外部动作的 Todo list 工具,也能作为上下文工程手段,帮助 Agent 保持目标、步骤和完成状态。规划能力是长时间跨度任务能够持续推进的关键。

3. 文件系统作为外部工作区

很多长任务需要把中间结果保存到文件,而不是全部留在上下文中。文件系统可以承担四类职责:

  • 上下文卸载:保存长文档、日志、数据和中间结果,防止上下文窗口溢出
  • 共享工作区:Main Agent 与 Sub Agent 之间交换成果
  • 长期记忆:保存项目笔记、偏好、失败经验和业务规则
  • 技能载体:保存可复用脚本、模板和流程说明

文件系统能力越强,越需要权限边界、目录隔离和变更审计。

4. 上下文自动压缩

长任务会持续消耗上下文窗口。当 token 使用量接近上限,例如达到 200k 上下文的 80% 时,成熟框架通常会触发总结模型,对前文进行摘要压缩,释放上下文空间。

压缩不是简单截断历史,而是保留目标、硬约束、关键决策、未完成任务、工具结果和风险点。否则压缩会造成状态漂移。

分层工具体系

成熟框架通常不会把所有工具直接放入模型上下文,而是分层提供。

层级内容设计目标
原子工具层文件读写、Shell、浏览器、搜索、任务分派保持基础能力稳定
沙箱工具层通过命令行使用系统已有程序减少工具定义数量
代码与包层脚本、库、领域函数复用复杂逻辑
业务接口层CRM、订单、审批、数据库、内部 API连接真实业务系统

分层工具体系的本质是渐进式披露。模型只在需要时获得具体能力,降低上下文混淆和误调用风险。

第 1 层:原子工具层

原子工具层通常只保留 20 个左右核心、高频、正交的工具,例如 read_fileedit_filebrowser_navigatebashlstask。这层工具的目标不是覆盖所有业务能力,而是确保模型最基础的交互能力稳定可靠。

第 2 层:沙箱工具层

沙箱工具层的核心是去工具化。不再为每个程序封装独立 Function Calling 定义,而是让 LLM 通过 bash 调用沙箱中预装的程序。

以视频处理为例,传统方式可能会预定义 convert_videoresize_videoextract_audio 等大量专用工具及繁杂参数,工具列表会快速膨胀。沙箱方式只提供 bash,并允许模型探测环境,在发现 ffmpeg 后直接执行命令完成任务。

这种方式把工具定义排除在上下文之外,节省 token,也降低工具列表过长导致的混淆。

第 3 层:代码与包层

代码与包层适合复杂串行逻辑。与其让 Agent 进行多次 LLM 往返交互,不如提供 Python 库、业务 SDK 或领域函数,让 Agent 编写脚本一次性执行所有步骤。

例如查询多个国家的手机价格并换算成美元,传统工具调用可能需要上百次请求;代码方式只需要读取数据、循环汇率换算、排序输出。它把重复动作交给程序,把判断和编排留给 Agent。

垂直业务如何适配通用 Agent 架构

将现有 Workflow 升级为 Agent

当通用型 Agent 架构逐渐成熟,真正的难点会转向业务适配。企业不应该把所有业务知识一次性放入上下文,而应把知识、接口和行为边界做成可治理的工程资产。

很多企业已有稳定 Workflow,不需要全部重建。更现实的路径是借鉴 Claude Deep Research 的 Prompt 架构,把复杂业务流程和决策逻辑沉淀到 Main Agent 的认知体系中。

一个可落地的升级结构通常包含三个核心 Prompt:

  1. Main Agent:负责任务拆解、子任务分派、风险判断和结果整合。
  2. Sub Agent:专注执行具体子任务,并返回结论、证据、不确定项和失败路径。
  3. 后处理 Agent:负责引用校验、格式清理、结构化输出或合规审查。

如果使用 Claude 4.5、Gemini 3、GPT-5.2 等能力足够强的模型,可以尝试完整的主从 Agent 方案。如果模型能力次一级,应降低任务复杂度,从相对稳定的业务场景开始。

Agent 模式相较传统 SFT 的优势是迭代更快。SFT 往往需要数据清洗、人工标注和反复训练,周期可能以周计算;Agent 路径通过消耗更多 token 换取更快实验,把很多迭代压缩到按天计算。

业务知识 Skill 化

将业务文档、SOP、案例库和操作规范抽象为 Skills,存储在 Agent 的文件系统中。模型根据任务需求按需加载,而不是一次性全部放入上下文。

这类 Skills 应包含适用场景、输入要求、操作步骤、禁止事项、示例和验证方式。它们本质上是可维护的业务能力包。

业务接口 MCP 化

将企业业务 API 封装为 MCP 服务,Agent 可以按需连接和调用这些 Server。MCP 的价值不只是统一接口,更重要的是把认证、权限、审计和工具描述标准化。

提示词精细化

Main Agent 和 Sub Agent 应分别拥有明确的 System Prompt。Main Agent 的 Prompt 负责目标拆解、权限判断、风险控制和结果整合;Sub Agent 的 Prompt 负责局部任务执行、证据保留和格式化返回。

业务规则越复杂,System Prompt 越不能只写角色设定,而要沉淀具体边界、反例、决策规则和输出协议。

什么时候用单 Agent

以下情况应优先使用单 Agent 或工作流:

  • 任务能在一次或少数几次工具调用内完成
  • 子任务之间强依赖,无法并行
  • 输出格式简单,没有复核价值
  • 延迟和成本非常敏感
  • 团队还没有 Trace、评估和权限治理能力
  • 多 Agent 只是为了模拟人类组织结构,而不是解决工程问题

如果单 Agent 的失败原因是 Prompt 不清、工具定义差、上下文混乱或评估缺失,直接增加 Agent 数量通常会放大问题。

单 Agent 的边界

单 Agent 适合目标明确、上下文集中、工具数量有限、执行链路不长的任务。它的优势是简单、低成本、易调试。

但当任务出现以下特征时,单 Agent 会变得吃力:

  • 上下文过长,模型需要同时记住太多资料
  • 工具过多,模型容易混淆能力和参数
  • 子任务可以并行,但单 Agent 只能串行执行
  • 任务需要互相独立的专业视角
  • 结果需要交叉审查或对抗性评估
  • 长任务中需要隔离试验分支,避免污染主上下文

多 Agent 的核心价值就是处理这些边界。

什么时候用多 Agent

多 Agent 系统不是把一个任务拆给多个模型同时回答,而是把复杂任务中的角色、上下文、工具权限和责任边界拆开管理。它的价值来自分工、隔离、并行和复核,而不是 Agent 数量本身。

如果任务本来可以由一个 Agent 稳定完成,引入多 Agent 只会增加协调成本、上下文传递损耗和错误来源。多 Agent 只有在复杂度、并行性或治理要求足够高时才值得使用。

1. 任务天然可并行

竞品分析、资料收集、代码仓库扫描和多市场调研都适合并行。不同 Agent 可以分别处理不同来源、模块或地区,最后由 Main Agent 汇总。

Main Agent:定义研究问题和输出结构
  -> Sub Agent A:收集官网与产品信息
  -> Sub Agent B:收集价格与渠道信息
  -> Sub Agent C:收集用户评价与媒体报道
  -> 汇总 Agent:去重、比对、形成结论

并行能降低总耗时,但前提是子任务之间依赖少,输出格式统一。

2. 需要专业分工

复杂任务往往包含不同专业能力。例如构建一个数据报告可能需要数据分析、行业研究、可视化和编辑审稿。让一个 Agent 同时承担所有角色,会让 Prompt 复杂、上下文拥挤、标准不清。

角色职责
Planner拆解任务、分配子任务、跟踪进度
Researcher搜索资料、保留来源、提取事实
Analyst做比较、归因和数据分析
Writer按结构生成报告
Reviewer检查事实、逻辑、格式和风险

3. 需要上下文隔离

长任务中,子任务会产生大量中间资料。如果全部放入 Main Agent,上下文会迅速膨胀。Sub Agent 可以在独立上下文中处理细节,只把结论、证据和风险返回给 Main Agent。

这种方式能减少主上下文污染,也能降低 token 成本。

4. 需要独立复核

对于代码修改、法律合规、财务分析、医疗辅助等高风险场景,可以让一个 Agent 执行,另一个 Agent 审核。审核 Agent 不应共享执行 Agent 的全部思路,而应基于输出、证据和规则独立判断。

5. 需要探索多个路径

开放问题往往有多种可行路径。多个 Agent 可以分别探索不同方案,再由评估器比较成本、风险和收益。适合策略制定、架构选型、产品方案和复杂排错。

多 Agent 常见协作模式

1. 主从模式

Main Agent 负责任务拆解、子任务分派和结果整合。Sub Agent 只处理局部任务。

Main Agent
  -> Sub Agent 1
  -> Sub Agent 2
  -> Sub Agent 3
  -> Synthesis

这是最常用、最容易治理的模式。关键是子任务要有清晰输入、输出格式和完成标准。

2. 并行研究模式

多个 Agent 同时从不同来源收集信息,汇总 Agent 负责去重、排序和引用校验。适合 Deep Research、竞品分析和舆情监测。

3. 评审模式

一个 Agent 生成方案,另一个 Agent 按规则审查。审查结果可以返回给生成 Agent 修订,也可以交给人工确认。

Generator -> Reviewer -> Revision -> Final

Reviewer 的 Prompt 要包含明确标准,例如事实准确性、约束满足、引用完整性、安全风险和输出格式。

4. 辩论模式

多个 Agent 分别提出不同观点,再由裁判 Agent 评估。它适合高价值决策,但成本高,也容易变成形式化争论。工程上要限制轮次和评价标准。

5. 黑板模式

所有 Agent 读写同一个共享工作区。它适合复杂协作,但需要严格管理文件命名、状态锁、版本和冲突处理。

多 Agent 设计

上下文设计

多 Agent 系统最容易失败的地方是上下文传递。Main Agent 给 Sub Agent 的输入过少,Sub Agent 会偏题;输入过多,又会削弱隔离效果。

子任务上下文应包含:

  • 任务目标
  • 输入资料或可访问资源
  • 可用工具和权限
  • 输出格式
  • 完成标准
  • 禁止事项
  • 返回时需要报告的风险

Sub Agent 返回结果时,不应只返回最终答案,还应返回证据、假设、失败项和需要 Main Agent 决策的问题。

子任务返回格式:
- 结论
- 关键证据
- 来源链接或文件
- 不确定项
- 已尝试但失败的路径
- 建议下一步

工具、权限与记忆隔离

多 Agent 不应该默认共享全部工具。不同角色应获得不同工具权限。

Agent 类型建议权限
Researcher搜索、读取网页、读取文档
Coder读取文件、编辑文件、运行测试
Reviewer读取文件、查看 Trace、运行检查,默认不写入
Operator调用业务 API,但高风险动作需要确认
Planner分派任务、读取摘要,通常不直接执行高风险工具

多 Agent 系统也需要共享记忆,但不能无差别共享上下文。推荐使用三类存储:

  • 主任务状态:由 Main Agent 维护,记录目标、约束、进度和决策
  • 子任务工作区:Sub Agent 独立使用,保存中间资料和临时产物
  • 长期经验记忆:保存可复用策略、失败教训和业务规则

共享记忆要记录版本和来源。多个 Agent 写入同一事实时,系统需要记录谁写入、基于什么证据、何时写入、是否被后续覆盖。

评估方法

多 Agent 系统不能只评估最终答案,还要评估协作过程。

指标关注点
子任务正确率每个 Agent 是否完成了分配任务
汇总质量Main Agent 是否正确整合结果
上下文传递损耗Sub Agent 是否遗漏主任务约束
并行收益多 Agent 是否实际降低总耗时
成本效率增加 Agent 是否带来可接受收益
冲突处理不同 Agent 结论矛盾时是否能解决
安全性权限是否越界,写操作是否可审计

评估数据应包含 Trace:任务分派、Sub Agent 输入、工具调用、子任务输出、Main Agent 汇总和最终回复。没有这些数据,就无法判断多 Agent 是否真的有效。

参考资料

正在检查阅读权限…


编辑此页