LLM代理通过整合各种组成部分来完成任务。理解其操作序列对于掌握代理如何从接收任务到交付结果具有主要意义。一个典型的、简化的代理工作流程展示了大型语言模型(LLM)、指令、工具、记忆和基本规划如何协同整合到一个运行周期中。LLM代理的核心运作方式是一个循环,通常被称为观察-思考-行动循环。代理通过这个循环感知其环境(或新信息),决定做什么,然后执行一个动作。让我们将其分解为更详细的步骤:目标或输入接收:当代理获得特定目标或接收到输入时,这个过程就开始了。这可能来自用户的直接指令,例如“帮我总结这篇文章”,也可能是由外部系统触发的事件。观察与上下文收集:代理接收初始输入并将其与任何相关上下文结合。短期记忆在这里发挥作用。代理可能会回想最近的互动或在与当前任务相关的先前步骤中收集到的信息。这有助于保持连贯性,尤其是在多轮对话或复杂任务中。思考与规划 (LLM的核心任务):这是代理的“大脑”,即LLM,承担主要工作的地方。处理:在预设指令(其主要提示)的指导下,LLM分析当前的观察结果(输入加上来自记忆的上下文)。规划:LLM接着制定计划。对于简单任务,这可能只是决定立即执行的下一个动作。对于更复杂的目标,它可能涉及将问题分解成一系列更小、可管理的步骤。这是一种基本的规划形式。工具选择:如果LLM判断它需要外部信息(如当前日期、来自特定网站的数据)或需要在另一个系统中执行动作(如发送电子邮件),它将决定使用其可用工具之一。它会识别哪个工具合适,以及该工具完成工作所需的信息。动作执行:基于LLM在“思考”步骤中的决定,代理现在执行一个动作。如果选择了工具,代理会使用必要的参数调用该工具(例如,用查询内容调用搜索引擎工具)。如果不需要工具,动作可能是生成一段文本(例如问题的答案或长文档的一部分)。如果输入模糊不清,动作也可能是提出一个澄清问题。结果处理与迭代:代理接收其动作的结果。如果使用了工具,工具会返回一个结果(例如,搜索结果、计算结果)。这个结果,或因动作而产生的任何环境变化,都成为一个新的观察结果。代理随后循环返回到步骤2(观察与上下文收集)或步骤3(思考与规划)。它处理这些新信息,更新其记忆,并决定下一个动作。这个循环持续进行,直到代理判断总体目标已达成,或达到预设的停止条件。最终输出:一旦LLM判断目标已达成,它便制定并将最终输出交付给发起请求的用户或系统。这种迭代过程使得代理能够处理需要多个步骤的任务,随时间收集信息,并通过工具使用外部能力。以下图表说明了这种简化工作流程:digraph G { rankdir=TB; node [shape=box, style="filled,rounded", fontname="Arial", fontsize=10, margin=0.2]; edge [fontname="Arial", fontsize=9]; startNode [label="用户输入 / 初始目标", shape=ellipse, fillcolor="#ced4da", width=2.2, height=0.6]; observeNode [label="1. 观察\n(收集输入、上下文、记忆)", fillcolor="#a5d8ff", width=2.7, height=0.8]; thinkNode [label="2. 思考 (LLM核心)\n(处理信息、应用指令、\n规划下一步、选择工具)", fillcolor="#748ffc", fontcolor="white", width=2.7, height=1.1]; actNode [label="3. 行动\n(使用工具、调用API、\n生成部分响应)", fillcolor="#96f2d7", width=2.7, height=0.8]; endNode [label="最终输出 / 目标达成", shape=ellipse, fillcolor="#ced4da", width=2.2, height=0.6]; startNode -> observeNode; observeNode -> thinkNode; thinkNode -> actNode [label=" 需要动作以推进"]; actNode -> observeNode [label=" 获取工具输出 /\n 观察新状态"]; thinkNode -> endNode [label="目标达成 "]; }代理运行周期的图示,从用户输入开始,经过观察、思考和行动,并持续迭代直到目标达成。我们通过一个简短的例子来使其更具体。想象一个代理的目标是:“找出电影《盗梦空间》的导演,然后告诉我它的上映年份。”1. 目标/输入接收:代理收到请求:“找出《盗梦空间》的导演和上映年份。”2. 观察与上下文收集:输入清晰。我们假设对于这个新请求,记忆中没有先前的相关上下文。3. 思考与规划 (LLM核心):LLM处理请求。其指令指导它保持事实性和提供帮助。它规划:这需要两部分信息。首先是导演。其次是上映年份。工具选择:LLM知道它本身不具备所有电影细节信息。它决定需要一个movie_database_tool(电影数据库工具)。它计划首先查询导演。4. 动作执行:代理调用movie_database_tool.get_director(movie_title="Inception")。5. 结果处理与迭代 (第一次循环):观察:工具返回“克里斯托弗·诺兰”。上下文更新:代理将“导演:克里斯托弗·诺兰”存储到其短期记忆中,用于此任务。思考 (LLM核心):LLM回顾最初的目标。它已经有了导演信息。现在它需要《盗梦空间》的上映年份。它计划再次使用movie_database_tool。动作:代理调用movie_database_tool.get_release_year(movie_title="Inception")。6. 结果处理与迭代 (第二次循环):观察:工具返回“2010”。上下文更新:代理存储“上映年份:2010”。思考 (LLM核心):LLM回顾最初的目标及其当前信息(导演:克里斯托弗·诺兰,上映年份:2010)。请求的两个部分都已满足。目标达成。它计划制定最终答案。7. 最终输出 (动作):代理生成响应:“《盗梦空间》由克里斯托弗·诺兰执导,并于2010年上映。”这个例子虽然简单,但表明了代理分解请求、使用工具、记住中间结果并持续迭代直到目标达成的能力。这个基本工作流程是后续你将遇到的更复杂的代理行为的依据。每个组成部分——LLM的推理、指导指令、可用工具、记忆能力和规划逻辑——都在这个精心编排的序列中发挥其作用。