AI智能体的五大设计模式
大语言模型(LLM)是通用的AI系统,能够处理种类繁多的任务。只要给出合适的提示词,LLM就能编写代码、回答复杂问题、总结长篇文档以及生成创意内容。
然而,LLM本质上是反应式的。它们响应提示词,但缺乏实现复杂长期目标的能力。这就是Agentic AI的用武之地。
AI智能体通过巧妙的系统设计,利用LLM主动实现既定目标。本文将探讨五种基本的设计模式,它们将LLM转变为能够自主推理、规划、采取行动并适应环境的AI智能体。
1、什么是AI智能体?
AI智能体是一种为实现特定目标而设计的软件系统。与遵循固定脚本的基于规则的自动化软件不同,AI智能体将LLM的强大功能与额外能力相结合,以更独立地处理复杂的多步骤问题。你可以将AI智能体视为一个目标导向的系统,它决定下一步做什么、采取行动,并在过程中不断调整。
我们使用"agentic"这个词,是因为这些系统可以在不同程度上自主运行。与其将"智能体"视为一个非黑即白的分类,不如将agenticness看作一个连续谱系,这样更有帮助。
Agenticness定义:"系统在有限直接监督下,在复杂环境中适应性地实现复杂目标的程度" [2]
有些系统只是轻度agentic,需要大量的人工输入和控制。另一些则是高度agentic的,能够管理多步骤任务,并在很少或无需人工监督的情况下做出决策。
2、反思:AI智能体如何自我批评和改进回答
反思模式将一个LLM的输出传递给另一个LLM(通常称为"批评者")进行审查。批评者可以是同一个LLM模型,也可以是不同的模型。基于审查结果,批评者提供反馈以帮助改进原始回答。
原始LLM随后可以利用这些反馈来修改其回答。这种审查和改进的过程可以自动重复多次,以精炼结果。
研究表明,与没有反馈的单步生成相比,反思能够更稳定地提升任务表现 [3]。通过审查和修改自身输出,模型可以更有效地识别错误、更精确地遵循指令,并产生更高质量的回答,尤其对于复杂任务而言。
利用外部反馈改进LLM输出
当我们能够提供外部反馈时,反思尤其有效。外部反馈是指模型自身无法推断出的信息。例如,假设你使用LLM来生成代码。与其接受第一个结果,不如:
- 运行生成的代码。
- 捕获任何错误信息或测试失败。
- 将这些信息反馈给LLM,让它重试,这次避免之前的错误。
将执行结果等真实世界的反馈纳入循环,使AI更加可靠和实用。
3、工具使用:通过外部系统扩展LLM能力
LLM功能强大,但有一个主要局限。它们只能"知道"训练数据中包含的内容。它们无法访问实时信息,也无法自行执行计算或网络搜索等操作。
工具(也称为函数)解决了这个问题。它们通过将LLM连接到可以执行模型自身无法完成的外部系统,来扩展LLM的能力。
以下是AI智能体常用的一些工具:
- Web Search:用于在线查找最新信息。
- Code Execution:例如,运行Python代码片段来分析数据。
- RAG:在向量数据库中搜索文档或对话历史。
- Database:例如,与SQL数据库交互。
- File System:用于浏览文件夹以及读取或写入文档。
LLM并不直接执行这些工具。相反,我们预先定义一组工具,并向LLM提供每个工具的功能和使用方法信息。每个工具都通过其模式(schema)来定义,包括工具的名称、描述和参数。当LLM判断某个工具可以帮助回答问题或完成任务时,它会生成一个符合工具规范的结构化请求。
agentic软件应用接收该请求,运行工具,并将结果作为对话的一部分返回给LLM。然后模型可以利用新信息生成回答。
与其默认让LLM访问所有工具,不如根据特定目标限制可用工具的数量。这有助于降低复杂性,避免错误或不必要的工具使用。
在所有工具中,代码执行尤其高效。与其为每种任务类型创建单独的工具,不如赋予AI智能体编写和运行代码的能力,使其能够灵活解决各种问题。例如,如果可以使用代码执行,就不需要单独的计算器工具,因为模型可以简单地编写一个短程序来完成计算。
然而,允许AI运行代码也存在风险。自动执行AI生成的代码可能会产生意外的副作用。因此,在受控的、隔离的沙箱环境中运行代码执行非常重要。
工具的特殊之处在于LLM在使用它们时的决策能力。这赋予了AI智能体更高程度的自主性。例如,它可以选择仅在需要进行精确数学计算时使用计算器,或仅在无法回答问题时才搜索网络。
要有效使用工具,重要的是使用专门为工具使用训练的LLM [4]。这些模型经过微调,能够在结构化聊天格式中正确遵循工具规范。这种训练使它们能够识别工具有用的场景,并生成符合工具模式的请求。
4、MCP:连接LLM与工具的标准
工具极大地扩展了LLM的能力。模型上下文协议(MCP)是一个开放标准,定义了LLM如何连接到外部系统。如今,有许多符合MCP标准的工具可以集成到agentic AI系统中。例如,开源工具允许LLM与GitHub、Google Maps、Slack、SQL数据库、本地文件系统交互,甚至只是获取当前时间。
使用MCP的AI应用称为MCP主机。它可以访问由MCP服务器提供的工具,MCP服务器与MCP客户端通信。这种设置建立了一对一的连接:客户端发送请求,服务器返回工具和数据。MCP服务器可以在你的设备上本地运行,也可以在云端远程运行。
MCP服务器向LLM暴露三种主要类型的组件:
- Tools:这些是LLM可以调用的主动功能。
- Resources:这些提供对有用信息的只读访问。示例包括文档内容、数据库模式或帮助模型理解其环境的API文档。
- Prompts:这些是可复用的预定义提示词模板,LLM可以使用它们来产生一致且有效的输出。
在agentic AI系统中,MCP为LLM提供了一种通过与外部系统交互来访问真实世界数据的标准化方法。这使得AI应用在实践中更加强大和实用。
5、Agent Skills:引导LLM行为的可复用指令
Agent skills是扩展LLM能力的另一种方式。一个skill通常位于其自己的本地文件夹中,并包含一个名为SKILL.md的文件。这个纯文本文件提供了结构化的指令,教导智能体特定于公司、领域或任务的行为。
skill文件必须包含以下三个要素:
- skill的名称
- skill功能的简短描述以及何时使用它
- skill的内容,包含智能体应遵循的实际指令、规则、示例或模板
在根据给定任务选择skill后,智能体在生成回答之前将相应的内容读入其上下文窗口。
例如,假设你在工作中使用agentic软件来帮助完成各种任务,包括撰写电子邮件。你的公司可能有特定的电子邮件模板和写作风格,员工需要遵循。与其每次都重复这些规则,不如将它们存储在skill文件中。
当智能体被要求撰写电子邮件时,它可以识别到存在相关的skill,从该skill中读取指令,然后按照你公司的标准撰写电子邮件。
在这个例子中,文件write-emails/SKILL.md可能如下所示:
---
name: write-emails
description: Company email standards.
---
# How to Write Emails
## Writing Style
Always be extra friendly.
## Required Email Footer
MyCompany
www.mycompany.example
虽然skills与工具相关,但它们服务于不同的目的。工具是执行操作的外部软件程序,例如查询数据库并返回结果。另一方面,skills是按需加载的可复用指令,用于引导LLM的行为。工具和skills可以一起使用。
关于MCP与Skills与AGENTS.md的更详细比较,我推荐我的另一篇关于这个特定主题的文章:
The Agentic AI Toolkit: MCP vs. Agent Skills vs. AGENTS.mdLearn how these new standards for AI agent connectivity and behavior work and when to use each one
6、规划:AI智能体如何分解复杂任务
在解决复杂问题时,人们通常不会试图一次性完成所有事情。相反,他们会将问题分解为更小的步骤。这正是agentic AI中规划的核心所在。与其给出单一指令并期待最好的结果,不如让AI提前思考。需要采取哪些步骤?按什么顺序?以及如何执行?
规划设计模式首先提示LLM为特定任务生成一个计划。这个计划通常是AI智能体将要遵循的一系列步骤。计划准备好后,智能体逐步执行每个步骤。在每个阶段,LLM都会收到当前步骤以及之前步骤的任何结果,以便它能够适当地响应并根据需要调整。
如果计划中的某些步骤彼此独立,它们可以并行执行。在最后合并这些步骤的结果,可以显著加快整体进程。
为了使计划简洁且易于人类和机器理解,AI智能体的计划通常以JSON格式编写。与纯文本不同,JSON具有清晰的结构,使其更易于解析和可靠地执行每个步骤。每个步骤通常包括任务描述,以及必要时关于使用哪个工具的信息。
以下是一个AI智能体可能创建的、关于给定主题撰写博客文章的简单三步计划示例:
- Step 1:使用"Web Search"工具进行研究
- Step 2:根据研究结果撰写大纲。
- Step 3:使用大纲和研究笔记撰写文章。
然而,并非所有复杂任务都需要详细的计划。例如,在分析数据集时,让LLM直接编写和运行代码可能更有效率。
编程语言通过支持循环来重复任务、变量来存储结果、函数来组织复杂行为,提供了一种强大的结构化逻辑的方式。在这些情况下,代码本身就成了逐行执行的计划 [6]。
7、多智能体:多个AI智能体如何协作解决复杂任务
在第四种设计模式中,我们使用多个AI智能体构建系统,每个智能体都有特定的角色或专业领域。类似于公司内部人们如何协作,这些智能体通过将大任务分解为更小、更易管理的部分来协同工作。
想想一个典型的工作场所,不同的专业人员处理不同的职责。例如,在软件开发团队中,一个人可能编写代码,另一个人可能进行测试,第三个人可能负责部署。多智能体AI系统的运作方式类似。每个智能体被分配一个特定的角色,并可以访问为该角色量身定制的工具。
多智能体AI系统中的通信模式
多智能体系统中有多种可能的通信模式。以下两种方法通常被使用:
- Sequential Chat:智能体按预定义的顺序工作。每个智能体完成其任务后,将结果传递给队列中的下一个智能体。
- Hierarchical Chat:一个管理智能体监督其他智能体,并根据情况动态分配任务。
要使这种设计模式有效工作,每个智能体都应该有一个狭窄、定义明确的角色。与其创建一个通用的"软件开发人员"智能体,不如定义专门的智能体,例如"Python后端开发人员"、"高级DevOps工程师"和"质量保证工程师"。然后可以给这些智能体提供系统提示词,以引导它们的行为和关注的任务。
这些智能体可以使用相同的LLM,也可以使用不同的LLM。例如,管理智能体可以使用通用的推理LLM,而开发人员智能体可以使用为编码任务专门微调过的LLM。
对于软件开发等非常复杂的多步骤任务,多智能体应用已被证明优于单智能体应用 [7]。然而,它们高度的自主性可能导致不可预测的结果,以及难以调试的系统。
8、Human-In-The-Loop:为智能体添加人工监督
尽管AI智能体可以在很大程度上自主运行,但让它们完全独立运行并不总是理想的。在许多现实情况中,人类的判断、监督和领域知识仍然是必要的。Human-in-the-loop(HITL)是一种agentic设计模式,它在工作流的关键时刻有意地将人工输入整合进来。
考虑这个简单的例子:你使用一个购物智能体来协助你在线购买商品。你会把信用卡交给智能体,让它在不与你确认的情况下进行购买吗?可能不会。在完成交易之前,你会希望智能体暂停并征求你的明确批准。对于具有财务、法律或安全影响的操作,HITL是必须的。
实现HITL有多种方式。两种常见的交互设计是协作规划和协作任务执行 [8]。
9、协作规划:让人工审查和编辑计划
假设你是一名软件工程师,要求一个AI编码智能体"清理代码库"。智能体广泛地理解了这个请求,开始重构多个模块、重写文档并运行大量的性能测试。经过数小时的计算和代码更改后,你意识到智能体误解了你的意思:你只想保持格式一致和注释更清晰。
协作规划将人工监督整合到智能体的规划过程中。在AI智能体生成初始计划后,用户可以:
- 直接编辑计划
- 按原样接受它
- 提供反馈,让智能体修改它
这种方法增加了透明度,并提高了智能体行为与用户目标一致的可能性。通过在执行前审查计划,用户可以防止浪费时间、不必要的计算和偏离目标的结果。
协作任务执行:人类与AI智能体协同工作
即使有了可靠的计划,执行过程中也可能出现意外情况。协作任务执行允许用户在智能体工作时保持参与。有两种主要的交互形式:
- User-initiated intervention:用户可以随时中断智能体以提供指导或纠正。例如,如果智能体开始偏离正确的方向,用户可以立即重新引导它。
- Agent-initiated requests:智能体可以暂停并向用户请求澄清或批准。实现这一点的一种方法是将人类视为智能体可以调用的"工具"。另一种方法是将用户视为多智能体系统中的一个智能体,其中管理LLM将任务委托给用户"智能体"。某些操作,例如删除文件或进行不可逆的更改,可能始终需要人类的明确批准。
协作规划和协作任务执行自然地融入了agentic AI系统的规划工作流中。让用户参与其中使系统更加可靠、符合用户期望,并且更安全。
10、结束语
本文涵盖了反思、工具使用、规划、多智能体和人机协同这五种设计模式。这些设计模式将反应式的LLM转变为能够自主推理、行动和适应的目标导向型AI智能体。
如果你使用agentic AI软件,你会注意到这些设计模式正在发挥作用。例如,Claude Code会创建计划,生成子智能体来处理这些任务,并执行工具调用以与外部系统交互(例如,使用"web search tool")。有时,它还会提出澄清问题或在复杂任务期间请求确认。
如果你正在使用LangChain/LangGraph或CrewAI开发自己的agentic AI应用,你可以实现这些设计模式来创建更好的AI智能体。然而,在设计AI智能体时,从简单的工作流开始,只在必要时增加复杂性,这是一个好的实践。
原文链接: Agentic AI: The Five Design Patterns That Turn LLMs Into AI Agents
汇智网翻译整理,转载请标明出处