【Agent智能体14 | 工具使用-如何创建工具】

声明:本篇博客是以吴恩达的【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 in New 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
    • 闭环输出: 将这个结果拼接成上下文重新喂给 LLM,LLM 最终用自然语言回复用户:"It's 4am in New Zealand"

现在的LLM已经被训练为可以使用特定的工具语法了,这可以让大模型非常明确的请求调用某个工具。详情见下一篇文章"现代的LLM请求调用工具的语法"

如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!

相关推荐
YueJoy.AI1 小时前
AI应用的性能优化:从分析到优化的完整流程
人工智能·ai·语言模型
星辰AI1 小时前
长期记忆存储:构建持久的 AI 记忆系统
人工智能·ai·语言模型
2401_827499991 小时前
深度学习03(黑马)-神经网络基础
人工智能·深度学习·神经网络
fan65404141 小时前
AI搜索优化系统的多模型适配架构:文澜天下科技的技术实践
人工智能·科技
MobotStone1 小时前
AI正在改变的,不是岗位,而是整个企业的运营模式
人工智能
Bingorl1 小时前
机器学习之朴素贝叶斯算法
人工智能·算法·机器学习
Nile1 小时前
解密Palantir系列一:3. Palantir 是谁
大数据·人工智能·ai
m0_380167141 小时前
加密市场数据的未来:实时化、多交易所与 AI-ready
人工智能·区块链
云天AI实战派1 小时前
AI 智能体总是跑偏怎么办?ChatGPT/API/Agent 故障排查指南与全流程修复手册
大数据·人工智能·chatgpt·agent