声明本篇博客是以吴恩达的【Agent智能体】教程为基础并对其中的内容做了笔记整理以及个人收获的总结。本篇文章主要是梳理LLM实现函数调用的具体流程。目前可以简单理解为工具其实就是LLM可用请求执行的代码或者函数如下图将代码作为一种工具现在主流的LLM都已经通过直接训练来使用工具了。但是如果需要自己写提示词告诉LLM何时使用工具会是什么样子的流程早期LLM还未直接训练使用工具的时候是这样做的。虽然现在不完全采用这种方式了但是有助于我们理解整个流程例子如下例子1调用函数查现在是几点这个工作流程展示了在 LLM 原生支持“函数调用Function Calling”之前开发者是如何通过提示词工程Prompt Engineering和代码逻辑的配合强行让大模型“学会”使用工具的。可以将这个流程拆解为三个主要阶段来理解准备阶段设定规则与定义工具在用户开始提问之前系统需要做好两项准备工作编写系统提示词System Prompt图左上赋予 LLM 工具的使用说明书。这里明确告诉 LLM“你现在有一个叫get_current_time的工具。如果你想用它必须严格按照特定格式输出即输出FUNCTION: get_current_time()。”定义实际运行的工具代码实现图右上准备好真正能在后台执行的 Python 代码。当 LLM 发出请求时这段代码负责获取真实的系统时间。第一轮对话LLM 识别意图并“请求”调用工具流程图的前半部分。用户提问红色框用户问 “What time is it?”现在几点了。LLM 执行第一个灰色框LLM 接收到用户的提问结合之前的系统提示词它意识到自己不知道当前时间必须借助工具。于是它严格按照提示词规定的格式输出了特定的字符串FUNCTION: get_current_time()。系统拦截白框if FUNCTION in output:这是关键的一步。LLM 本身是不能直接运行代码的。包裹在 LLM 外层的应用程序你的代码会检查 LLM 的输出。一旦发现输出中包含约定的暗号“FUNCTION”系统就会拦截这段输出不将其展示给用户。之后会执行工具…第二轮对话执行工具并生成最终回复流程图的后半部分。执行工具绿色框应用程序拦截到暗号后在本地真正执行了右上角那段 Python 函数get_current_time()并得到了结果08:00:00。拼接上下文第二个白底框应用程序将工具返回的真实数据08:00:00连同之前的对话历史用户的提问、工具调用的动作重新打包在一起。LLM 最终总结第二个灰色框应用程序将这份包含答案的“新考卷”再次发送给 LLM。此时 LLM 已经“看到”了现在的具体时间。输出自然语言LLM 根据08:00:00这个数据生成了最终回复“It’s 8am.” 并展示给用户。核心总结这个图揭示了 LLM 使用工具的本质LLM 负责“做决定”和“生成特定格式的文本”而外部的代码程序负责“解析文本”、“执行真正的动作”并将结果“喂”回给 LLM。现在的模型如 OpenAI 的 function calling API虽然将这个过程封装得更优雅不再需要你在提示词里写死这么复杂的正则表达式或格式要求但其背后的“两段式对话请求工具 - 拿到结果再回复”的核心思想是完全一致的。另外要注意一个点大模型本身不直接调用工具它只是请求“你”去调用工具例子2带参数的工具调用Function Calling with Arguments工具与规则的升级需要输入变量代码端右上角Python 函数get_current_time不再是获取本地默认时间而是需要接收一个timezone时区作为参数。提示词左上角系统提示词相应地进行了修改明确告诉 LLM“如果想用这个工具你必须在括号里填入特定的时区参数”即FUNCTION: get_current_time(timezone)。LLM 的理解与“参数翻译”这是整个流程中最精彩的一环也是大模型展现其“智能”的地方。用户提问用户问的是 “What time is it inNew Zealand?”新西兰现在几点了。用户使用的是日常的自然语言。LLM 推理LLM 接收到提问后不仅判断出需要调用时间工具更重要的是它利用自身的常识储备将模糊的地名“New Zealand”转换成了标准 API 需要的精确时区格式Pacific/Auckland。输出指令LLM 按照规则输出了FUNCTION: get_current_time(Pacific/Auckland)。拦截、执行与回复接下来的流程就和之前类似了应用程序拦截并解析外层代码拦截到 LLM 的输出提取出工具名称和参数。带参执行绿框真正执行了 Python 代码get_current_time(Pacific/Auckland)得到结果04:00:00。闭环输出将这个结果拼接成上下文重新喂给 LLMLLM 最终用自然语言回复用户“It’s 4am in New Zealand”现在的LLM已经被训练为可以使用特定的工具语法了这可以让大模型非常明确的请求调用某个工具。详情见下一篇文章现代的LLM请求调用工具的语法如果这篇文章对你有帮助欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力
【Agent智能体14 | 工具使用-如何创建工具】
发布时间:2026/5/31 16:38:32
声明本篇博客是以吴恩达的【Agent智能体】教程为基础并对其中的内容做了笔记整理以及个人收获的总结。本篇文章主要是梳理LLM实现函数调用的具体流程。目前可以简单理解为工具其实就是LLM可用请求执行的代码或者函数如下图将代码作为一种工具现在主流的LLM都已经通过直接训练来使用工具了。但是如果需要自己写提示词告诉LLM何时使用工具会是什么样子的流程早期LLM还未直接训练使用工具的时候是这样做的。虽然现在不完全采用这种方式了但是有助于我们理解整个流程例子如下例子1调用函数查现在是几点这个工作流程展示了在 LLM 原生支持“函数调用Function Calling”之前开发者是如何通过提示词工程Prompt Engineering和代码逻辑的配合强行让大模型“学会”使用工具的。可以将这个流程拆解为三个主要阶段来理解准备阶段设定规则与定义工具在用户开始提问之前系统需要做好两项准备工作编写系统提示词System Prompt图左上赋予 LLM 工具的使用说明书。这里明确告诉 LLM“你现在有一个叫get_current_time的工具。如果你想用它必须严格按照特定格式输出即输出FUNCTION: get_current_time()。”定义实际运行的工具代码实现图右上准备好真正能在后台执行的 Python 代码。当 LLM 发出请求时这段代码负责获取真实的系统时间。第一轮对话LLM 识别意图并“请求”调用工具流程图的前半部分。用户提问红色框用户问 “What time is it?”现在几点了。LLM 执行第一个灰色框LLM 接收到用户的提问结合之前的系统提示词它意识到自己不知道当前时间必须借助工具。于是它严格按照提示词规定的格式输出了特定的字符串FUNCTION: get_current_time()。系统拦截白框if FUNCTION in output:这是关键的一步。LLM 本身是不能直接运行代码的。包裹在 LLM 外层的应用程序你的代码会检查 LLM 的输出。一旦发现输出中包含约定的暗号“FUNCTION”系统就会拦截这段输出不将其展示给用户。之后会执行工具…第二轮对话执行工具并生成最终回复流程图的后半部分。执行工具绿色框应用程序拦截到暗号后在本地真正执行了右上角那段 Python 函数get_current_time()并得到了结果08:00:00。拼接上下文第二个白底框应用程序将工具返回的真实数据08:00:00连同之前的对话历史用户的提问、工具调用的动作重新打包在一起。LLM 最终总结第二个灰色框应用程序将这份包含答案的“新考卷”再次发送给 LLM。此时 LLM 已经“看到”了现在的具体时间。输出自然语言LLM 根据08:00:00这个数据生成了最终回复“It’s 8am.” 并展示给用户。核心总结这个图揭示了 LLM 使用工具的本质LLM 负责“做决定”和“生成特定格式的文本”而外部的代码程序负责“解析文本”、“执行真正的动作”并将结果“喂”回给 LLM。现在的模型如 OpenAI 的 function calling API虽然将这个过程封装得更优雅不再需要你在提示词里写死这么复杂的正则表达式或格式要求但其背后的“两段式对话请求工具 - 拿到结果再回复”的核心思想是完全一致的。另外要注意一个点大模型本身不直接调用工具它只是请求“你”去调用工具例子2带参数的工具调用Function Calling with Arguments工具与规则的升级需要输入变量代码端右上角Python 函数get_current_time不再是获取本地默认时间而是需要接收一个timezone时区作为参数。提示词左上角系统提示词相应地进行了修改明确告诉 LLM“如果想用这个工具你必须在括号里填入特定的时区参数”即FUNCTION: get_current_time(timezone)。LLM 的理解与“参数翻译”这是整个流程中最精彩的一环也是大模型展现其“智能”的地方。用户提问用户问的是 “What time is it inNew Zealand?”新西兰现在几点了。用户使用的是日常的自然语言。LLM 推理LLM 接收到提问后不仅判断出需要调用时间工具更重要的是它利用自身的常识储备将模糊的地名“New Zealand”转换成了标准 API 需要的精确时区格式Pacific/Auckland。输出指令LLM 按照规则输出了FUNCTION: get_current_time(Pacific/Auckland)。拦截、执行与回复接下来的流程就和之前类似了应用程序拦截并解析外层代码拦截到 LLM 的输出提取出工具名称和参数。带参执行绿框真正执行了 Python 代码get_current_time(Pacific/Auckland)得到结果04:00:00。闭环输出将这个结果拼接成上下文重新喂给 LLMLLM 最终用自然语言回复用户“It’s 4am in New Zealand”现在的LLM已经被训练为可以使用特定的工具语法了这可以让大模型非常明确的请求调用某个工具。详情见下一篇文章现代的LLM请求调用工具的语法如果这篇文章对你有帮助欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力