Building Effective AI Agents — Anthropic

What

WorkflowAgent的差异还是很大的

Antropic将其都归纳为一个Agentic Systems

  • Workflow:由代码决定每一步应该做什么,LLM只是其中的一环
  • Agent:LLM自主决定每一步应该做什么

When and When Not

Timing

Antropic并不建议什么情况下都去做一个复杂的Agentic System

应该先尝试最简单的方案,再逐渐增加复杂度

  • 质量上升的同时,成本、延迟也会逐渐上升

决策顺序

  • 第一层:单次LLM调用
    • 多数应用 retrieval and in-context examples就足够了
  • 第二层:Workflow
    • 任务步骤多、且明确、可预期
  • 第三层:Agents
    • 任务需要灵活决策
    • 任务没有固定路径,需要动态决定每一步
    • 成本上升、难以预测、响应慢

帮我调研某个市场,找出潜在客户,比较竞品,并输出进入策略。

复杂度是需要有收益的

Frameworks

当简单的方案足够解决问题时,复杂的框架可能会带来不必要的复杂性

能够通过LLM API直接实现,就尽量不要做太多事情

使用框架应该确保能够理解底层代码

Building Blocks, Workflows, and Agents

从简单的组合工作流到自主智能体

Block

定义为一个能够调用外部能力的最小单元

augmented LLM = LLM + 增强能力

  • 检索能力
  • 工具调用
  • 记忆读写

或者说是一个增强的LLM,The Augmented LLM

不管是workflow还是agent,都需要其作为最小单元进行组成

Block:The augmented LLM

Block并不等于Agent。取决于外层组织方式

  • 总结这篇文章:系统让LLM检索文章内容并且总结(Block)
  • 完成调研:LLM需要先决定要查询资料、整理资料、总结分析,在这个基础上开始决定查什么资料、调用什么、多轮分析给出完整报告(Agent)

总结一下:

  • 裸 LLM:只根据 prompt 输出文本
  • 增强型 LLM:可以检索、调用工具、使用记忆
  • Workflow:把多个增强型 LLM 调用按固定结构组织起来
  • Agent:让增强型 LLM 在循环中自主规划、调用工具、根据反馈调整
  • 增强LLM:针对当前任务,自己决定需要检索什么、调用什么……完成单次任务
  • Agent:具备任务流程基本的控制权,能够决定整个任务如何继续推进


构建这样的LLM需要:

  • 明确LLM工具集,应该接近任务本身,不要给无关的工具
  • LLM工具接口简要、清晰、文档明确

例如:MCP



后文提到的所有workflow和agent,每次LLM调用都默认是带有检索、工具、记忆能力的augmented LLM

Workflow

workflow并不是简单地多次调用模型

每次模型调用都应该有清晰的输入、职责、可用能力

提供五种workflow设计模式

Workflow1: Prompt Chaining

最简单的workflow,数据沿着链条通过每一个LLM的prompt

Prompt Chain

任务能够被切分为顺序的一系列步骤

每个LLM处理前一个LLM的输出

可以在任意步骤之间添加一个Gate,保证任务正常流动

具备以下特点的任务常使用此workflow

  • 任务可以轻松且清晰地分解为固定子任务
  • 能够通过让LLM每次处理更简单的子任务,以延迟换取更高的准确性

任务示例

  • 生成营销文案,然后将其翻译成另一种语言。
  • 撰写文档大纲,检查大纲是否符合特定标准,然后基于大纲撰写文档。

Workflow2: Routing

在纯Chain的基础上增加了一些分支结构

显然有时候单份提示词并不能充分完成一个任务

或许我们可以对任务进行分类,不同类型任务使用不同提示词完成

Routing

  • 按任务类型进行分类:使用不同提示词
  • 按任务难度进行分类:使用不同模型节约成本

Workflow3: Parallelization

  • 如果能将任务拆分成独立的子任务
  • 希望获取同一任务的多样化输出结果(投票)

那么我们可以并行化

Parallelization

  • 独立子任务
    • 一个LLM处理查询
    • 一个LLM处理安全审核与防护
  • Voting
    • 使用多个不同提示进行code review
    • 多个提示词不同方面or不同阈值做评估

Workflow4: Orchestrator-workers

似乎就是Planner

当子任务无法预先定义的时候,我们可以考虑设置一个Orchestrator做分工

Orchestrator:管弦乐演奏家;管弦乐编曲家

可以理解为编排器、指挥、协调器

Orchestrator-workers

与并行化最大的区别:子任务由协调器根据具体输入动态确定

  • 对多个文件进行复杂修改
    • 需要分工出不同线路对不同文件单独做不同修改
  • 从多个来源做信息搜集

这里会觉得像Agent?

但是仍然是定死了先编排,再分工

Agent可以自己决定使用哪一套workflow与任务安排


Workflow5: Evaluator-optimizer

似乎就是Reflection

一个 LLM 调用生成响应,而另一个则在循环中提供评估和反馈

Evaluator-optimizer

  • 拥有明确的评估标准,迭代可以带来价值优化
    • 人类能为LLM输出提供反馈
    • LLM能通过人类反馈进行打磨提升

满足这两个条件,就可以考虑让模型做评估优化

  • 文学翻译:LLM不断发现细微之处进行改进
  • 多轮搜索:LLM决定是否继续搜索

Agent

  • Step1:根据人类指令或互动讨论开始工作
  • Step2:自主规划,开始运作(必要时返回给人类)
  • Step3:执行过程中,必须从每个步骤处获取真实情况(工具调用结果or代码执行结果),评估进展
    • 在检查点or障碍处进行暂停,询问人类
  • 任务完后终止,或设置停止条件(例如最大迭代次数)

Agent

何时使用:

  • 难以预测步骤数量
  • 无法硬编码固定路径
  • 开放问题

同时:Agent高度自主,因此最好在沙盒中,设置防护措施

防止错误累积

核心:基于环境反馈循环使用工具

因此工具集和文档的设计至关重要


Summary

Combining and Customizing

其实不需要过度在意所谓的规范,应该根据实际场景使用具体范式

关键:衡量性能与实现

只有能切实改善结果时,才会增加系统复杂性

Principles

从简单的提示词开始,通过全面评估进行优化

遵守三项原则

  • 简洁性
  • 透明度:展示智能体的规划步骤
  • 把工具设计成模型容易理解、容易正确使用、容易从错误中恢复的形式
    • 一定要方便调试

Appendix

Customer support

与客户交互天然适合使用Agent,非常推荐从chatbot升级到agent

  • 客服:天然是聊天界面
  • agent 比普通 chatbot 多了工具能力

同时agent通过与客户交互过程中了解用户需求,明确动作

  • 对于客户数据、订单历史记录和知识库文章
    • 可以通过工具调用进行获取,获取信息后作为上下文
    • 但这里的操作比较松弛
  • 对于退款、更新工单等写操作
    • 非常危险,需要由业务代码进行校验
    • 应当设计一个代码接口(内部需要进行非常严格的参数校验,必须由程序化代码来保证权限、规则、确定性和审计)
    • 最后暴露给模型的一般是一个函数接口

并且该类任务容易获取是否成功:通过客户反馈

Coding Agent

  • 代码方案可以设计测试代码检验
  • 通过测试结果反馈迭代
  • 问题定义明确
  • 输出指令可以客观衡量

Tool

对于工具集文档的书写非常重要,甚至比任务提示词更重要

这里可以称为:Agent-Computer Interface

  • 降低认知负荷
    • 让模型在输出格式化结果前,有足够的token进行思考
    • 避免复杂格式限制
      • json里写代码需要对换行、双引号进行痛苦转义
  • ACI接口要让人类都能看得懂
    • 清晰的边界、对待初级程序员
  • 防呆设计(例如CPU的防呆卡槽会让你无法装反CPU)
    • 工具的底层逻辑和参数设计上,让模型“根本没有犯错的机会”
    • 例如:模型不擅长相对路径,那就要求模型全部输出绝对路径