大型语言模型(LLM)虽拥有庞大的知识储备,但其信息通常是静态的,固定在其上次训练时的数据上。为了执行需要即时信息、与外部系统交互或专门计算的任务,LLM需要借助工具进行增强。这种增强将LLM从一个复杂的文本生成器,转变为一个能够在更广泛环境中执行操作的AI代理的思考中枢。本质上,工具增强型LLM依据委托原则运行。LLM本身不直接执行网页搜索或运行Python代码片段。相反,它利用其高级推理能力来理解何时需要外部工具、哪种特定工具适合该工作以及该工具需要什么输入。在这种情况下,LLM的输出不仅仅是文本答案;它是一个“工具调用”的结构化表示,供外部系统执行。可以将LLM看作一位懂得如何将任务有效委派给专业团队成员(工具)的高级经理。使用工具系统的结构组成使LLM能够使用工具的系统通常由几个共同工作的主要组成部分构成:语言模型(LLM): 这是主要的推理引擎。它处理用户请求、其当前上下文以及可用工具的描述,以决定行动方案。工具规格/描述: LLM要使用工具,就必须“了解”它们。工具规格是精心制作的描述(通常在提示中提供),详细说明每个工具的功能、它预期的输入以及其输出格式。我们将在本章后续部分介绍如何有效组织这些内容。工具调用与执行层: 这是实际执行操作的外部环境。当LLM决定使用某个工具(例如,天气API)时,它会生成一个结构化请求(例如带参数的函数调用)。该层解析请求,调用实际工具或API,并收集结果。反馈机制: 一旦工具执行完毕,其输出(无论是成功数据还是错误消息)必须返回给LLM。此反馈成为LLM上下文的一部分,使它能够理解操作结果并规划下一步。操作循环:思考、行动、观察这些组成部分之间的交互通常遵循一个迭代循环,最显著地在ReAct(推理与行动)等框架中被明确。这个循环使代理能够分解复杂问题并对新信息作出反应:思考: LLM分析当前目标、现有知识以及先前行动和观察的历史。基于此,它形成一个想法或计划,其中可能包括决定使用特定工具。例如,如果被问到“伦敦天气如何?”,LLM可能会想:“我需要当前天气信息。我应该使用get_weather工具。”行动: 如果某个工具被认为必要,LLM会生成一个结构化的“行动”命令。这并非自由格式的文本,而是一个精确指令,通常以JSON或执行层可以解析的特定函数调用语法格式呈现。对于天气示例,行动可能是:get_weather(location="London")。观察: 工具调用层执行此行动。get_weather工具将调用伦敦的天气API。此执行的结果(例如,“15°C,部分多云”)或遇到的任何错误,随后被格式化为“观察结果”并反馈到LLM的上下文中。这个“思考-行动-观察”循环重复进行。LLM考虑新的观察结果,完善其想法,并决定下一步行动,这可能是使用另一个工具、综合答案或提出一个澄清问题。digraph G { rankdir=TB; bgcolor="transparent"; node [shape=box, style="filled,rounded", fontname="Arial", margin=0.15]; edge [fontname="Arial", fontsize=10]; LLM [label="LLM\n(推理与提示处理)", fillcolor="#a5d8ff", color="#1c7ed6"]; Thought [label="思考\n(例如, '我需要查找X')", fillcolor="#ffec99", color="#f59f00"]; Action [label="行动\n(例如, 生成 tool_call('search', 'X'))", fillcolor="#b2f2bb", color="#37b24d"]; Observation [label="观察\n(例如, 工具输出: 'X的搜索结果...')", fillcolor="#ffd8a8", color="#f76707"]; ToolExecutor [label="工具执行\n环境", shape=cylinder, style="filled", fillcolor="#ced4da", color="#868e96", height=0.8]; LLM -> Thought [label="1. 初始任务/\n先前上下文", color="#495057"]; Thought -> Action [label="2. 决定工具并\n生成调用", color="#495057"]; Action -> ToolExecutor [label="3. 执行调用", color="#495057"]; ToolExecutor -> Observation [label="4. 返回输出/\n错误", color="#495057"]; Observation -> LLM [label="5. 更新LLM上下文", color="#495057"]; }工具增强型LLM的迭代循环:思考、行动和观察,由提示指令驱动。提示:指导工具协调在这个框架中,提示远不止简单的查询。它们是指示和引导LLM在使用工具方面行为的主要机制。一个设计良好的提示将:定义可用工具: 列出代理可以使用的工具,并清晰描述其功能、所需输入(及其类型)和预期输出格式。例如:您可以使用以下工具: - `web_search(query: string)`: 根据给定查询搜索网络并返回最相关结果。 - `run_python_code(code: string)`: 执行提供的Python代码并返回其输出或错误。引导工具选择: 指导LLM根据任务决定何时以及使用哪个工具。指定输出格式: 规定LLM在调用工具时必须使用的精确语法,确保工具执行层能够解析它。这可能涉及要求JSON输出或特定的函数调用字符串。管理工具输出处理: 帮助LLM解读工具返回的结果(或错误),并将此信息整合到其持续推理过程中,以决定下一步。例如,在web_search行动之后,观察结果可能包含一个搜索片段列表。提示随后指导LLM如何使用这些片段来回答原始用户查询,或判断是否需要另一个工具或行动。从文本生成到可执行指令工具使用的转变代表了LLM的重大进展。它们不再仅仅生成人类可读的文本,而是学习生成机器可解释的指令。这种方法的优点在于,LLM通常可以学会使用它们从未专门进行微调的工具,仅仅通过理解提示中通过上下文学习提供的工具描述。LLM不仅仅是回忆事实;它正在将其推理能力应用于这些新的工具描述来解决问题。这种与外部系统交互的能力带来了一系列应用,从能执行研究和总结发现的代理,到能管理您的日程、与电子商务网站交互,甚至通过执行代码并分析输出来帮助调试的代理。理解这些基本原理很重要。在本章后续部分,我们将介绍有效管理工具交互每个阶段所需的具体提示工程技术:选择正确的工具、格式化其输入、处理其输出以及从错误中恢复。这些技术将帮助您构建真正有能力的AI代理。