- Published on
AI智能体开发:简单性胜过复杂性
智能体的定义
智能体的概念多种多样。有人将其视为能够独立思考、自主决策并运用工具完成复杂任务的“全能管家”。另一些人则认为它是按部就班执行预设工作流程的“规矩员工”。Anthropic 将这两者统称为智能系统,并区分了工作流和智能体:
- 工作流:通过预定代码路径编排大型语言模型(LLM)和工具的系统。
- 智能体:由 LLM 动态指导自身流程和工具使用的系统,可自主控制任务完成方式。
何时选用智能体
Anthropic 建议在开发 AI 应用时,应遵循“能简单就不要复杂”的原则。并非所有场景都需要构建复杂的智能系统。智能系统功能强大,但可能导致响应变慢和成本增加。开发者需要在功能与效率之间权衡。
- 工作流:适合需要可预测性和一致性的明确任务。
- 智能体:更适合需要灵活性和模型驱动决策的大规模场景。
对于许多应用,使用好的提示词配合检索和上下文示例,直接向大模型提问通常已足够。
框架的使用
目前,市面上存在多种帮助开发者构建 AI 智能体的框架,例如:
- LangChain 的 LangGraph
- 亚马逊 Bedrock 的 AI Agent 框架
- 拖放式大模型工作流构建工具 Rivet
- 用于构建和测试复杂工作流的 GUI 工具 Vellum
这些框架简化了开发流程,但也会增加代码的抽象层,使底层逻辑不够透明,增加调试难度,并可能导致在简单场景中引入过度复杂的解决方案。
Anthropic 建议开发者从直接使用大模型的 API 开始。许多模式仅需几行代码即可实现。如果选择使用框架,务必理解其底层原理。对框架底层机制理解不足是导致开发问题的主要原因。Anthropic 的 cookbook 提供了具体示例。
构建模块、工作流和智能体
基础构建模块:增强版 LLM
智能系统的基本构建模块是增强的 LLM,具备检索和记忆等功能。Anthropic 的模型可以主动使用这些能力,例如生成搜索查询、选择工具和决定保留的信息。
在扩展功能时,应重点关注:
- 根据具体应用场景定制功能
- 确保为模型提供简单且文档完备的接口
Anthropic 最近发布的模型上下文协议简化了 AI 模型与第三方工具生态系统的集成。
工作流:提示链
提示链将复杂任务分解为多个步骤,每个步骤调用一次大模型,后续步骤基于前一步的结果进行处理。开发者可在中间环节加入检查点,确保流程按预期推进。
提示链适合将复杂任务清晰分解为一系列固定子任务的场景。每个模型专注于完成一个简单任务,虽然整体响应时间可能稍长,但准确率会显著提高。
典型应用案例:
- 先生成营销文案,再将其翻译成其他语言。
- 先写文档大纲并进行合规性检查,再基于大纲撰写完整文档。
工作流:智能分流
分流技术判断输入任务类型,并将其分配给相应的模块。这种设计让每个模块针对特定任务进行优化,避免不同任务类型之间的相互干扰。智能分流适用于任务有明显分类特征的场景。AI 系统可以通过大语言模型或传统算法,准确识别任务类型并进行分流。
典型应用案例:
- 客服系统中,将一般咨询、退款申请和技术支持等问题分别引导到相应流程。
- 将简单常见问题分配给较小模型,将困难罕见问题分配给更强大的模型,以优化成本和速度。
工作流:并行
大语言模型可以同时处理任务,并以编程方式聚合输出。并行工作流的特点:
- 任务分段:将任务拆分为可并行运行的子任务,最后整合结果。
- 投票机制:对同一任务进行多次运行,选择最优结果或综合多个答案。
当子任务可以并行执行以提高速度,或需要多角度尝试以获得更高置信度的结果时,并行方法非常有效。对于复杂任务,让每次调用专注于处理特定方面,会获得更好的效果。
典型应用案例:
- 任务分段:
- 安全防护:一个模型处理用户请求,另一个进行内容审核。
- 性能评估:不同模型评估系统性能指标。
- 投票机制:
- 代码安全检查:多个检测模型共同发现代码漏洞。
- 内容审核:多个模型从不同角度评估内容安全性。
工作流:领导 - 执行者
中央大语言模型动态分解任务,分配给执行者模型,并汇总结果。
这种工作流适用于难以提前确定具体步骤的复杂任务。任务拆分不是固定的,而是由 AI 系统根据情况动态决定。
典型应用案例:
- 需要对多个文件进行复杂修改的编程应用。
- 需要从多个来源收集和分析相关信息的搜索任务。
工作流:评估 - 优化
一个 LLM 调用生成响应,另一个提供评估和反馈,形成循环。
当存在明确评估标准,且通过迭代细化可以带来显著价值时,此工作流特别有效。LLM 能够提供反馈,类似于人类作家反复修改的过程。
典型应用案例:
- 文学翻译:评估模型发现翻译遗漏的语言差异并提供修改建议。
- 复杂搜索:评估模型判断是否需要继续深入搜索。
智能体
智能体随着 LLM 在理解复杂输入、推理规划、工具使用和错误恢复等关键能力上的成熟而出现。
智能体的工作始于人类用户的命令或互动讨论。一旦任务明确,智能体会独立规划和操作,可能需要向人类索取更多信息或让人类做判断。
执行过程中的每一步,从环境中获得“真实情况”至关重要。智能体可以在检查点或遇到阻塞时暂停以获取人类反馈。任务通常在完成后终止,但也通常包含停止条件。
智能体能够处理复杂任务,但其实现通常很简单,通常只是循环中根据环境反馈来使用工具的大型语言模型。因此,设计工具集及其文档清晰、周到至关重要。
智能体适用于开放性问题,此类问题难以预测所需步骤数量,并且不能硬编码固定路径。智能体的自主性使其成为在受信任环境中扩展任务的理想选择。智能体的自主性意味着成本更高,并且可能存在错误累积的风险。建议在沙盒环境中进行广泛测试,并设置适当的防护措施。
智能体的应用示例:
- 一个代码智能体,用于解决涉及根据任务描述编辑多个文件的 SWE-bench 任务。
- Anthropic 的“Computer use”功能,其中 Claude 使用计算机完成任务。
组合与定制
这些构建模块并非规定性,开发者可以根据用例进行塑造和组合。成功的关键在于衡量性能并迭代实现。只有当更简单的解决方案无法实现时,才应考虑增加复杂性。在 LLM 领域取得成功不在于构建最复杂的系统,而在于构建适合需求的系统。从简单的提示开始,用全面的评估优化它们,只有当更简单的解决方案无法实现时才添加多步骤智能体系统。
在部署智能体时,需要遵循以下原则:
- 保持智能体设计的简单性。
- 优先确保智能体的透明度,清楚展示计划中的每一步。
- 通过全面的工具文档和测试,精心打造智能体-计算机界面(ACI)。