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

构建高效智能体系统:从简单到复杂,找到最适合你的解决方案

在实际业务场景中构建智能体,最成功的实现往往不是使用复杂的框架或专用库,而是通过简单、可组合的模式来实现的。本文总结了我们在客户合作和自身开发过程中获得的经验,并为开发者提供实用的建议,帮助他们构建有效的智能体系统。

什么是智能体系统?

“智能体”这个词在不同语境下有不同的含义。一些客户将其定义为完全自主的系统,能够独立运行并完成复杂任务;另一些则将其视为遵循预定义流程的系统。在Anthropic,我们倾向于将这些系统统称为 agentic系统,并根据其架构特点将其分为两类:
  • 工作流(Workflows) :系统通过预定义的代码路径来协调LLM和工具。
  • 智能体(Agents) :系统中LLM能够动态地控制其自身流程和工具使用,自主决定如何完成任务。

何时使用智能体?何时不使用?

在构建LLM应用时,我们建议从最简单的解决方案开始,只有在需要时才增加复杂性。这并不意味着完全放弃智能体系统,而是要权衡其带来的优势和代价。
  • 智能体系统:通常以更高的灵活性和任务性能为代价,换取更高的延迟和成本。它们适合需要灵活性和模型驱动决策的场景。
  • 工作流系统:则更适合任务明确、流程固定的情况,提供更可预测和一致的执行结果。
对于大多数应用来说,优化单个LLM调用,结合检索和上下文示例,通常已经足够。

何时使用框架?何时不使用?

虽然许多框架(如LangGraph、Rivet、Vellum等)可以简化智能体系统的开发,但它们也带来了额外的抽象层,可能掩盖了底层的提示和响应,增加调试难度。我们建议:
  • 先尝试直接使用LLM API:许多模式可以通过几行代码实现。
  • 如果使用框架,务必理解其底层逻辑,避免因误解而引入错误。

构建块、工作流与智能体

我们总结了在生产环境中常见的智能体系统构建模式,并逐步从简单到复杂进行讲解。

1. 基础构建块:增强的LLM

智能体系统的基石是增强的LLM,它具备检索、工具调用和记忆等功能。当前模型可以主动使用这些能力,生成自己的搜索查询,选择合适的工具,并决定保留哪些信息。
我们推荐关注两个关键方面, 将这些功能量身定制到您的特定用例中,并确保它们为LLM提供简单,有据可查的界面:
  • 定制化:根据具体用例调整增强功能。
  • 接口清晰:确保LLM有一个易于使用、文档完善的接口。
一种实现方式是通过 Model Context Protocol,它允许开发者与第三方工具集成,只需简单的客户端实现。

2. 工作流:提示链(Prompt Chaining)

提示链将任务分解为一系列步骤,每个LLM调用处理前一步的输出。你可以添加程序化检查(如“门”机制)来确保流程继续。
适用场景:任务可以轻松分解为固定子任务。通过增加LLM调用的准确性,换取一定的延迟。
示例
  • 生成营销文案,然后翻译成其他语言。
  • 写出文档大纲,检查是否符合要求,再根据大纲撰写正文。

3. 工作流:路由(Routing)

路由根据输入内容分类,并将其导向不同的后续任务。这种工作流有助于实现“分工协作”,并构建更专业的提示。
适用场景:任务涉及多个类别,分类准确是关键。例如,可以将不同类型的客服请求导向不同的处理流程。
示例
  • 将普通问题、退款请求和技术支持请求分别处理。
  • 根据问题复杂度,将简单问题交给轻量级模型(如Claude 3.5 Haiku),复杂问题交给更强大的模型(如Claude 3.5 Sonnet)。

4. 工作流:并行化(Parallelization)

并行化允许LLM同时处理任务,并在最后聚合结果。有两种主要形式:
  • 分块:将任务拆分为独立的子任务并行执行。
  • 投票:对同一任务运行多次,获取多样化的输出。
适用场景:任务需要多个视角或多次尝试以提高结果的可信度。例如,代码审查可以由多个模型分别检查,或内容审核可以由多个模型从不同角度评估。
示例
  • 一个模型处理用户查询,另一个模型进行内容过滤。
  • 多个模型对同一段代码进行漏洞检测。
  • 多个模型对同一内容进行审核,以平衡误报和漏报。

5. 工作流:协调者-工作者(Orchestrator-Workers)

协调者-工作者工作流中,一个中心LLM负责分解任务,将任务分配给多个工作者LLM,并综合结果。
适用场景:任务复杂且无法预知子任务,例如代码修改或信息检索。
示例
  • 代码生成任务,每次修改多个文件。
  • 信息检索任务,从多个来源收集信息。

6. 工作流:评估者-优化器(Evaluator-Optimizer)

评估者-优化器工作流中,一个LLM生成响应,另一个LLM提供反馈并优化结果。
适用场景:任务需要明确的评估标准,并且迭代优化能带来显著提升。例如,文学翻译或复杂搜索任务。
示例
  • 机器翻译中,评估者LLM提供反馈,优化翻译质量。
  • 信息检索中,评估者决定是否需要进一步搜索。

智能体系统

随着LLM能力的提升,智能体系统逐渐在生产环境中发挥作用。它们通常从用户交互开始,自主规划任务,并在必要时返回用户获取进一步反馈。关键在于智能体系统在每一步都能获取“真实反馈”(如工具调用结果),以评估进展。
适用场景:任务开放、步骤难以预测,且需要自主决策。例如,代码生成、搜索任务等。
示例
  • 代码智能体:解决SWE-bench任务,根据任务描述生成多文件修改。
  • 计算机智能体:Claude通过计算机完成任务。

结合与定制

这些构建块并非固定模式,而是可以灵活组合的常见模式。关键在于通过测试和迭代不断优化系统。记住: 只有在简单方案无法满足需求时,才考虑增加复杂性

总结

在LLM领域,成功并不在于构建最复杂的系统,而在于构建 最适合你需求的系统。从简单提示开始,通过全面评估优化,只有在必要时才引入多步骤智能体系统。
构建智能体时,我们遵循三个核心原则:
  1. 保持简单:设计尽可能简洁的智能体结构。
  2. 透明度:明确展示智能体的规划步骤。
  3. 工具文档与测试:精心设计工具和接口,确保可维护性和可靠性。

附录:智能体在实际中的应用

A. 客户支持

客户支持系统结合了聊天机器人界面和工具集成,非常适合开放性任务。例如:
  • 通过工具获取客户数据、订单历史和知识库文章。
  • 自动执行退款、更新工单等操作。
  • 通过用户定义的解决标准衡量成功。

B. 代码智能体

代码智能体在软件开发中展现出巨大潜力。例如:
  • 通过测试结果迭代优化代码。
  • 智能体可以独立解决GitHub上的问题,基于拉取请求描述生成解决方案。

附录:提示工程你的工具

无论你构建哪种智能体系统,工具都是关键。工具定义应像提示一样细致,确保模型能够正确使用。
  • 格式选择:尽量使用自然、简洁的格式,避免复杂的转义。
  • 示例与边界:提供示例用法、边界条件和参数说明。
  • 测试与优化:通过大量测试输入验证模型行为,并不断优化。

结语

构建智能体系统的核心在于 找到正确的解决方案,而不是追求最复杂的技术。通过合理选择工作流、智能体和工具,你可以创建出高效、可靠且可扩展的系统。

参考资料:

  • Building Effective AI Agents \ Anthropic
  • https://github.com/anthropics/anthropic-cookbook/tree/main/patterns/agents
  • Claude SWE-Bench Performance \ Anthropic
  • https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo
  • Introducing the Model Context Protocol \ Anthropic
  • For Client Developers - Model Context Protocol
  • https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo
http://www.xdnf.cn/news/1062577.html

相关文章:

  • 3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
  • Gartner《AI-Driven Methods for Cost-Efficiency》学习心得
  • 类图:软件世界的“建筑蓝图”
  • 【Python】List
  • 结构体的嵌套问题
  • FPGA基础 -- Verilog 的属性(Attributes)
  • python+uniapp基于微信小程序的高校二手商品交易系统
  • Maven并行构建
  • 饼图:数据可视化的“切蛋糕”艺术
  • 大数据治理域——计算管理
  • windows清理系统备份文件夹WinSxS文件夹清理
  • 大数据Hadoop集群搭建
  • mysql server层做了什么
  • nginx的下载与安装 mac
  • 三种经典算法无人机三维路径规划对比(SMA、HHO、GWO三种算法),Matlab代码实现
  • 【Python】Excel表格操作:ISBN转条形码
  • RPC常见问题回答
  • Qwen3 Embedding 结构-加载-训练 看透模型设计哲学
  • windows查看占用端口的进程并杀死进程
  • phpstudy无法启动apache,80端口被占用,完美解决
  • 【MySQL篇10】:四种分库分表详解
  • Symbol.iterator 详解
  • Windows 10 防火墙 0x8007045b 打不开
  • Rust 项目文档生成之旅:cargo doc
  • 博士,超28岁,出局!
  • MySQL复杂查询优化实战:从多表关联到子查询的性能突破
  • 掌握Bash脚本编写:从服务启动脚本到语法精要
  • Xilinx XC7A12T‑1CPG238I Artix‑7 FPGA
  • SAM2论文解读-既实现了视频的分割一切,又比图像的分割一切SAM更快更好
  • 猿人学js逆向比赛第一届第九题