Building Effective Agents (构建高效智能体)#

基本信息#

  • 英文标题: Building Effective Agents
  • 中文标题: 构建高效智能体
  • 发布日期: 2024年12月20日
  • 翻译发布: 2025年7月26日
  • 作者: Erik Schluntz 和 Barry Zhang (Anthropic)

原始链接#


英文原文摘录#

Over the past year, we’ve worked with dozens of teams building large language model (LLM) agents across industries. Consistently, the most successful implementations weren’t using complex frameworks or specialized libraries. Instead, they were building with simple, composable patterns.

Agents still face challenges working across many context windows.

We looked to human engineers for inspiration in creating a more effective harness for long-running agents.

Published Nov 26, 2025


中文翻译#

引言#

在过去的一年里,我们(Anthropic)与多个行业的团队合作构建大语言模型(LLM)的智能体。最成功的实现并不是使用了复杂的框架或专门的库。相反,他们使用简单的、可组合的模式进行构建。

在这篇文章中,我们将分享我们在与客户合作以及构建我们自己的智能体的过程中所学到的经验,并为开发者提供构建有效智能体的实用建议。

什么是智能体?#

“智能体"可以从多种方式定义。有些客户将智能体定义为完全自动的系统,能够在很长一段时间内独立运行、使用各种工具来完成任务。有些客户则用这个词描述那些遵循预定义工作流的更具规范性的实现。在Anthropic,我们把这些变体都归类为智能体系统,但是在架构上对工作流和智能体进行了重要区分:

  • 工作流:是通过预定义代码路径来编排LLM和工具的系统
  • 智能体:是LLM动态指导他们自己的流程、工具的使用、并能够控制怎样完成任务的系统

下面,我们将详细探讨这两种类型的智能体系统。

什么时候使用/不使用智能体#

在构建基于LLM的应用程序时,我们推荐尽可能地寻找最简单的解决方案,仅在必要时增加其复杂度。这意味着可能根本不需要构建智能体系统。智能体系统通常以延迟和成本为代价,来实现更好的任务效果,你应该考虑权衡是否有意义。

当需要更多的复杂性时:

  • 工作流为定义明确的任务提供了可预测、一致性
  • 智能体则是面对复杂的、模型驱动、决策定制场景下更好的选择

然而,对许多应用来说,使用搜索、上下文示例去优化单个LLM的调用通常就足够了。

什么时候使用框架#

有许多框架可以让智能体的实现更为简单,如:

  • LangGraph from LangChain
  • Amazon Bedrock的AI Agent framework
  • Rivet,拖拽式界面工作流构建器
  • Vellum,另一个构建和测试复杂工作流的界面工具

这些框架使得非常容易上手,通过简化标准的底层任务,如调用LLM、定义和解析工具、链式调用。然而,他们往往创建额外的抽象层,这会遮盖底层的提示词和响应内容,使得调试更难。

我们建议开发者从直接使用LLM的API开始,许多模式可以通过少量的代码实现。如果你确实想用框架,确保你理解框架底层的代码。


核心概念与解读#

1. 智能体系统的架构层次#

Anthropic将智能体系统分为三个层次:

层次1:构建块 - 增强型LLM#

  • 定义:最基本的构建块是LLM增强型,拥有检索、工具、记忆这些增强功能
  • 能力:生成自己的搜索查询、选择合适的工具、决定获取哪些信息
  • 推荐:重点关注两个关键方面:
    • 根据特定用例定制这些功能
    • 确保给LLM提供简单的、文档齐全的接口
  • 技术方案:Model Context Protocol (MCP) - 简单的客户端实现

层次2:工作流模式#

工作流是预定义的、确定性的模式,适合有明确步骤的任务。

工作流1:提示词链 (Prompt Chaining)

  • 原理:将任务分解为序列步骤,每个LLM调用处理前一个的输出
  • 适用场景:可以轻松、清晰地拆解为固定子任务
  • 优势:通过让每个LLM调用更简单来权衡延迟和准确性
  • 示例
    • 生成营销文案,然后翻译成不同语言
    • 编写文档大纲、检查大纲是否符合标准、根据大纲编写文档

工作流2:路由 (Routing)

  • 原理:对输入进行分类,引导到后续的专门任务
  • 适用场景:具有不同类型、更适合单独处理的复杂任务
  • 优势:分离关注点,构建更专业的提示词
  • 示例
    • 将客户服务查询分类到不同下游处理程序
    • 简单问题用小模型,困难问题用大模型

工作流3:并行化 (Parallelization)

  • 原理:LLM可以同时处理任务,输出汇总
  • 变体
    • 任务拆解:将任务分解为独立子任务并行执行
    • 投票:多次运行同一任务获得不同输出
  • 适用场景
    • 子任务可并行优化提高速度
    • 需要从多个视角获得更高可靠性
  • 示例
    • 安全防护:一个模型处理查询,另一个模型筛查不当内容
    • 代码审查:多个提示词审查代码漏洞
    • 内容评定:多个提示词评估不同方面

工作流4:编排者-工人 (Orchestrator-workers)

  • 原理:中心LLM动态分解任务,委托给工人LLM处理,综合结果
  • 适用场景:无法预测所需子任务的复杂任务
  • 优势:比并行工作流更灵活,子任务不是预定义的
  • 示例
    • 编码产品:每次更改多个文件
    • 搜索任务:从多个来源收集和分析信息

工作流5:评估器-优化器 (Evaluator-Optimizer)

  • 原理:一个LLM调用生成响应,另一个LLM调用提供评估和反馈,循环
  • 适用场景:有明确评估标准,迭代细化能提供价值
  • 特征
    • 人类反馈时LLM响应可明显改善
    • LLM能够提供有效反馈
  • 示例
    • 文学翻译:评估LLM提供改善建议
    • 复杂搜索:多轮搜索分析,评估LLM决定是否进一步搜索

层次3:自主智能体 (Agents)#

  • 定义:LLM成熟后的自然演进
  • 能力要求
    • 理解复杂输入
    • 进行推理和规划
    • 可靠使用工具
    • 从错误中恢复
  • 工作流程
    1. 从人类指令或交互讨论开始
    2. 独立规划和操作
    3. 每步从环境获取"真实情况"评估进度
    4. 在检查点或遇到阻碍时暂停获取人类反馈
    5. 完成后终止(可设置停止条件)
  • 适用场景:开放性问题,难以预测步骤数,无法硬编码固定路径
  • 优势:自主性适合在可信环境中扩展任务
  • 挑战:更高成本,错误叠加可能性
  • 示例
    • 编码智能体:解决SWE-bench任务
    • 计算机使用:Claude使用计算机完成任务

2. 实现原则#

Anthropic提出了三个核心原则:

  1. 保持简洁 (Maintain Simplicity)

    • 在智能体设计中保持简洁
    • 从简单提示开始,优化后添加复杂性
  2. 优先透明度 (Prioritize Transparency)

    • 明确展示智能体的规划步骤
    • 让用户清楚了解智能体的思考过程
  3. 精心打造接口 (Carefully Craft Interface)

    • 通过详尽的工具文档和测试
    • 设计清晰的代理-计算机接口(ACI)

3. 实际应用案例#

客户支持 (Customer Support)#

  • 特点:聊天机器人界面 + 工具集成
  • 为什么适合智能体
    • 自然对话流程 + 外部信息访问
    • 可集成工具提取客户数据、订单历史、知识库
    • 退款、更新门票等操作可编程处理
    • 成功用用户自定义分辨率衡量
  • 成功案例:基于使用量的定价模型(仅对成功解决问题收费)

编程智能体 (Coding Agents)#

  • 特点:从代码补发展到自主解决问题
  • 为什么适合智能体
    • 代码解决方案可通过自动化测试验证
    • 可根据测试结果迭代解决方案
    • 问题空间定义明确且结构清晰
    • 输出质量可客观衡量
  • 实现:仅根据PR描述解决真实的GitHub问题(SWE-bench Verified基准)

4. 工具开发的最佳实践#

工具格式选择#

  1. 给模型足够的思考时间
  2. 保持格式与互联网文本自然格式相近
  3. 避免格式化"额外负担”

工具设计建议#

  1. 设身处地:工具描述是否显而易见?
  2. 清晰命名:像为初级开发者编写docstring
  3. 充分测试:运行多个示例输入观察错误
  4. 防错设计:调整参数使出错更难发生

实际经验#

  • 在为SWE-bench构建代理时,优化工具花费的时间比整体提示还要多
  • 例如:使用绝对文件路径代替相对路径,模型使用更完美

我的解读#

核心洞察#

  1. 简单优于复杂

    • 最成功的实现使用简单的、可组合的模式
    • 避免过早使用复杂框架
    • 优先考虑简单解决方案
  2. 架构分层

    • 从基础构建块开始(增强型LLM)
    • 根据需求逐步增加复杂性
    • 工作流 → 智能体,不要跳过中间步骤
  3. 透明度是关键

    • 用户需要理解智能体的决策过程
    • 明确展示规划步骤建立信任
    • 可解释性比复杂度更重要
  4. 工具设计是重点

    • 工具接口设计比提示工程更重要
    • 防错设计减少错误发生
    • 充分测试和迭代

适用场景判断#

使用工作流的情况

  • 任务步骤明确可预测
  • 需要一致性和可重复性
  • 成本和延迟敏感

使用智能体的情况

  • 任务步骤不明确、不可预测
  • 需要灵活性和自主决策
  • 任务可以受益于迭代优化

不需要智能体的情况

  • 简单任务用单个LLM调用足够
  • 延迟和成本是首要考虑
  • 任务可以完全自动化

实践建议#

  1. 从简单开始:先尝试单个LLM调用 + 检索
  2. 渐进式复杂化:按需添加工作流模式
  3. 充分测试:在沙盒环境中测试智能体
  4. 设计清晰接口:工具文档和参数设计是关键
  5. 保持透明:展示智能体的规划和决策过程

相关概念扩展#

LLM能力的成熟阶段#

Anthropic认为智能体的发展与LLM能力成熟相关:

  1. 基础能力

    • 理解输入
    • 生成输出
  2. 推理和规划

    • 复杂推理
    • 任务规划
  3. 工具使用

    • 可靠调用工具
    • 理解工具输出
  4. 错误恢复

    • 从错误中学习
    • 自我纠正

工作流 vs 智能体的选择#

工作流的优势

  • 可预测性
  • 一致性
  • 更低延迟
  • 更低成本
  • 更容易调试

智能体的优势

  • 灵活性
  • 自主决策
  • 适应性强
  • 适合复杂任务

总结#

在LLM领域取得成功,并非在于构建最复杂的系统,而在于构建一个符合你需求的正确系统。

三个核心原则

  1. 保持简洁
  2. 优先透明度
  3. 精心打造接口

成功关键

  • 从简单开始
  • 逐步增加复杂性
  • 充分测试
  • 保持可解释性

智能体不是银弹,而是特定场景下的强大工具。在合适的时候,用正确的方式使用正确的工具。


参考资料#


文档创建时间: 2026-02-24 文档版本: 1.0