一个AI代理,专为复杂的多步骤操作而设计,并非单一、不可分割的实体。它是一个由多个独立但相互关联的部件协同运作的系统。理解这些部件对于有效设计引导代理行为的提示非常重要。每个部分都有其特定作用,包括推理、决策、与外部环境互动以及记忆过往事件。从宏观上看,这些部件使代理能够感知其环境(或输入),思考其目标,制定计划,执行操作,并从经验中学习。让我们审视一下这些常见的构成要素。核心:大型语言模型 (LLM)大多数现代AI代理的核心是一个大型语言模型(LLM)。该LLM作为代理主要的推理引擎或“大脑”。它负责:理解指令: 解读用户的目标和提示中包含的指令。生成文本: 生成计划、解释、中间思考和最终输出。进行推断: 根据提供的上下文、记忆和工具输出得出结论。推动决策: 通常,LLM的输出决定代理将采取的下一步行动,例如使用哪个工具或处理哪个子任务。LLM的选择(例如,来自OpenAI、Anthropic、Google的模型,或开源替代品)显著影响代理的能力。模型在复杂推理、指令遵循、编码方面的熟练程度,以及产生无用或不准确信息的倾向各不相同。您的提示工程策略通常需要根据所选LLM的特定优缺点进行调整。例如,一些LLM更擅长遵循结构化输出格式(如JSON),这对于工具使用很重要,而另一些则可能擅长创作性文本生成。规划与执行模块(控制器)尽管LLM提供原始智能,但一个独立的规划与执行模块(通常称为控制器或协调器)管理代理的整体工作流程。该模块通常是一个程序化循环或框架,它:管理任务生命周期: 它接收一个高层次目标(通常来自初始提示),并监督其通过多个步骤的执行。向LLM提供信息: 它将信息格式化并呈现给LLM,包括当前状态、可用工具和记忆内容,通常通过精心构建的提示。解释LLM输出: 它解析LLM的响应以提取可操作的命令、计划或信息。例如,LLM可能输出一个JSON对象,指定要调用的工具及其参数。执行行动: 它根据LLM的指导调用工具、更新记忆或传达结果。迭代: 它重复这个循环,即向LLM提供提示、解释其输出并采取行动,直到目标达成或满足终止条件。这个控制器实现了大部分“代理式”行为。像ReAct(推理与行动)这样的流行代理架构定义了该控制器与LLM互动以将思考过程(推理)与行动交织的特定方式。这种控制循环的设计及其使用提示的方式是代理构建的一个核心方面。记忆对于一个需要跨越单一轮次或需要超出其即时输入知识来执行任务的代理来说,记忆不可或缺。记忆使代理能够:在多个步骤中保持上下文。从过往互动中学习并避免重复错误。存储和检索与其当前任务相关的信息。通常,我们可以在代理系统中区分两种类型的记忆:短期记忆(工作记忆): 这指的是代理可以立即访问的信息,通常在LLM的上下文窗口或“暂存区”内。上下文窗口: LLM一次可以处理的有限文本量。提示必须设计得当,以使相关当前信息能放入此处。随着交互增多,管理上下文窗口中保留的内容成为一个重大难题。暂存区: 一个临时区域,通常是提示本身的一部分,代理可以在其中“记下”中间思考、工具使用观察结果或之前步骤的总结。提示工程在管理暂存区的进出内容方面扮演直接角色。长期记忆: 这使代理能够在长时间内保留和回忆信息,超出单个会话或上下文窗口的限制。常见的实现方式有:向量数据库: 将信息(例如,文本块、用户偏好、过往对话)存储为数值嵌入。这允许语义搜索,根据与当前查询或上下文的相似性来检索相关记忆。提示可以指示代理在向量存储中搜索什么。知识图谱: 将信息表示为实体和关系,从而实现对存储事实的更结构化查询和推理。传统数据库(SQL/NoSQL): 用于存储代理可能需要访问或更新的结构化数据。提示对于指导代理如何使用其记忆必不可少,例如,指示它为暂存区总结之前步骤,制定查询以从长期存储中检索信息,或决定何时以及哪些信息应提交到长期记忆中。工具(及工具使用机制)尽管LLM能力出众,但它们有固有限制。它们无法直接访问实时信息(其知识在训练时被固定),不能可靠地执行精确的数学计算,也无法与API、数据库或文件系统等外部系统互动。这就是工具发挥作用的地方。工具是代理可以用来增强其能力的外部资源或功能。示例包括:网络搜索引擎(例如,Google搜索API,Bing搜索API)代码解释器(例如,用于运行生成代码的Python执行环境)计算器或符号数学引擎特定服务的API(天气、股票价格、电子商务平台、项目管理软件)由开发者定义的自定义函数(例如,与专有公司系统互动)数据库查询接口代理有效使用工具的能力严重依赖于提示工程。提示用于:告知代理可用工具: 将工具的描述、功能、输入参数和预期输出格式提供给LLM,通常以结构化方式(如JSON Schema或API的OpenAPI规范)。引导工具选择: 根据当前任务、正在进行的计划和上下文,LLM决定哪个工具(如果有的话)适合推进进展。指定工具输入: LLM为所选工具生成必要的输入或参数,并遵守所描述的格式。指导处理工具输出: 工具由控制器执行后,其输出(例如,搜索结果、计算结果、API响应)会被反馈给LLM。提示指导代理解释此输出,并将其整合到其正在进行的推理过程中,以决定下一步。工具使用机制通常涉及规划与执行模块解析LLM使用工具的请求(通常以JSON等特定格式表达),使用指定的输入执行该工具,然后将工具的输出反馈给LLM,以进行下一轮推理。digraph G { rankdir=TB; node [shape=box, style="filled", fontname="Arial", color="#ced4da", fillcolor="#e9ecef"]; edge [fontname="Arial", color="#495057"]; subgraph cluster_agent { label="AI代理系统组成部分"; labeljust="l"; labelloc="t"; bgcolor="#f8f9fa"; color="#adb5bd"; fontname="Arial"; fontsize=14; style="rounded"; LLM [label="LLM\n(推理核心)", fillcolor="#a5d8ff", shape=ellipse, width=2, height=1]; Controller [label="规划与执行\n模块(控制器)", fillcolor="#b2f2bb", width=2.5, height=1]; Memory [label="记忆\n(短期与长期)", fillcolor="#ffec99", width=2.5, height=1]; Tools [label="工具 / 执行器\n(API、函数等)", fillcolor="#fcc2d7", width=2.5, height=1]; UserInput [label="用户目标 / \n初始提示", shape=parallelogram, fillcolor="#d0bfff", width=2, height=1]; AgentOutput [label="代理响应 / \n任务完成", shape=parallelogram, fillcolor="#d0bfff", width=2, height=1]; UserInput -> Controller [label="提供任务", fontsize=10]; Controller -> LLM [label="格式化提示:\n状态、任务、工具、\n记忆片段", fontsize=10]; LLM -> Controller [label="思考 / 计划 /\n行动请求\n(例如,使用工具X及参数Y)", fontsize=10]; Controller -> Tools [label="调用工具 / \n执行行动", fontsize=10]; Tools -> Controller [label="工具输出 / \n观察结果", fontsize=10]; Controller -> Memory [label="存储/更新信息", fontsize=10]; Memory -> Controller [label="检索信息", fontsize=10]; Controller -> AgentOutput [label="最终结果 / 更新", fontsize=10]; } }AI代理系统内部相互关联部件的宏观视图。控制器协调信息和行动的流程,LLM提供核心推理能力,记忆提供上下文,工具则扩展其与外部环境互动的能力。这些核心部件,通过有效协调,使代理能够处理对于简单的、一次性LLM查询来说过于复杂的任务。随着本课程的进展,您将学习如何使用提示工程来影响这些部件,从而塑造代理的行为,提高其可靠性,并使其能够执行复杂的任务流程。