当前位置: 首页 > news >正文

《Building effective agents》学习总结

https://www.anthropic.com/engineering/building-effective-agents

1. 智能体的定义与分类
• 定义多样性:不同团队对“智能体”的理解存在差异,Anthropic将其统一归类为Agentic Systems(自主系统),并区分两种核心架构:

• 工作流(Workflows):基于预定义代码路径协调LLM与工具,流程固定(如按步骤调用工具)。

• 智能体(Agents):动态自主控制系统,LLM自行规划任务路径和工具使用,灵活性更高。

2. 何时使用智能体
• 简单优先原则:多数场景下,优化单次LLM调用(如结合检索或上下文示例)已足够,仅在以下情况考虑复杂系统:

• 工作流适用场景:任务结构明确、需一致性输出(如固定流程的客服工单处理)。

• 智能体适用场景:任务开放性强、需动态决策(如多文件代码修改、复杂信息搜集)。

• 权衡因素:智能体以更高延迟和成本换取性能,需评估必要性。

3. 框架使用建议
• 慎用框架:LangChain、Amazon Bedrock等框架可简化开发,但可能引入抽象层,导致调试困难。

• 最佳实践:

• 优先直接调用LLM API实现基础模式(如提示链)。

• 若用框架,需透彻理解底层逻辑,避免“黑箱”操作。

4. 核心构建块与工作流模式
• 基础构建块:增强型LLM

集成检索、工具、记忆等能力,通过Model Context Protocol标准化工具接口,提升LLM与环境的交互效率。

• 五大工作流模式:

  1. 提示链(Prompt Chaining)
    ◦ 机制:分解任务为多步骤,前序输出作为后续输入,可插入程序化检查(如大纲审核后再生成文档)。

    ◦ 适用场景:可清晰拆解的任务(如营销文案生成→翻译)。

  2. 路由(Routing)
    ◦ 机制:分类输入后导向专用流程(如客服问题分类至退款/技术支持流程)。

    ◦ 适用场景:任务类别差异大且分类准确率高(如模型分级路由:简单问题用Haiku,复杂问题用Sonnet)。

  3. 并行化(Parallelization)
    ◦ 变体:

    分段(Sectioning):独立子任务并行(如内容生成与合规审查并行)。

    投票(Voting):多模型生成结果聚合(如漏洞检测需多轮投票)。

    ◦ 适用场景:需加速或高置信度结果(如自动化评估多维度指标)。

  4. 协调者-工作者(Orchestrator-Workers)
    ◦ 机制:中央协调器动态分配子任务(如编码代理拆分多文件修改)。

    ◦ 适用场景:子任务不可预测(如复杂代码库修改需动态规划)。

  5. 评估优化器(Evaluator-Optimizer)
    ◦ 机制:生成器与评估器循环迭代(如文学翻译的多次润色)。

    ◦ 适用场景:需明确评估标准且迭代优化有效(如多轮搜索分析)。

5. 智能体的核心特征与应用
• 自主性体现:

• 动态规划任务路径,通过工具调用与环境交互(如读取代码执行结果)。

• 支持人机协同:任务中可暂停等待人工输入或遇阻时求助。

• 适用场景:

• 开放性问题(如GitHub Issue修复需多文件修改)。

• 需长期运行且信任模型决策(如Anthropic的“计算机使用”代理)。

• 风险控制:沙盒测试、迭代次数限制等防护机制必不可少。

6. 实际应用案例(附录1)
• 客户支持:

• 结合对话流与工具调用(调取订单数据、执行退款),按成功解决问题计费。

• 编码代理:

• 通过自动化测试验证代码,解决SWE-bench任务,需人工审核确保系统兼容性。

7. 工具设计的提示工程(附录2)
• 设计原则:

• 清晰性:工具描述需含示例、边界说明(如绝对路径vs相对路径)。

• 易用性:避免复杂格式(如JSON转义),贴近自然文本格式(如Markdown代码块)。

• 防错设计:参数命名和结构减少误用(如强制绝对路径避免目录切换错误)。

• 测试迭代:通过大量用例观察工具使用错误,持续优化接口设计。

8. 核心原则总结
• 三原则:

  1. 简约设计:仅在必要时增加复杂性。
  2. 透明化过程:展示代理的决策步骤(如显示规划日志)。
  3. 优化代理-计算机接口(ACI):工具文档与测试并重。
    • 成功关键:以需求为导向,平衡性能与复杂度,通过评估迭代持续优化。
http://www.xdnf.cn/news/539335.html

相关文章:

  • C++中聚合类(Aggregate Class)知识详解和注意事项
  • 深入理解动态规划:从斐波那契数列到最优子结构
  • YoloV9改进策略:卷积篇|风车卷积|即插即用
  • 【Python-Day 15】深入探索 Python 字典 (下):常用方法、遍历、推导式与嵌套实战
  • C++容器适配器
  • DAPO:用于指令微调的直接偏好优化解读
  • 【idea 报错:java: 非法字符: ‘\ufeff‘】
  • 第二十一次博客打卡
  • 【C语言内存函数】--memcpy和memmove的使用和模拟实现,memset函数的使用,memcmp函数的使用
  • 1 asyncio模块
  • Ubuntu——配置静态IP
  • 基于Transformers与深度学习的微博评论情感分析及AI自动回复系统
  • 【C++】模版(1)
  • 基于不完美维修的定期检测与备件策略联合优化算法matlab仿真
  • megatron——EP并行
  • 商标名称起好后,尽快申请注册确权!
  • 【cursor疑惑】cursor续杯后使用agent对话时,提示“需要pro或商业订阅的用户才能使用“
  • 电路研究9.3.6——合宙Air780EP中的AT开发指南:FTP 应用指南
  • np.r_的用法
  • 代码随想录 算法训练 Day6:哈希表part1
  • Mybatis的标签:if标签、where标签、choose,when标签、set标签
  • 【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布
  • React学习———Immer 和 use-immer
  • 编译zstd
  • 《垒球百科全书》垒球是什么·棒球1号位
  • `asyncio.gather()` 是什么
  • 深度强化学习框架DI-engine
  • Java大师成长计划之第27天:RESTful API设计与实现
  • 算法竞赛 Java 高精度 大数 小数 模版
  • MySQL故障排查域生产环境优化