当前位置: 首页 > news >正文

【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 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
    • 闭环输出:将这个结果拼接成上下文重新喂给 LLM,LLM 最终用自然语言回复用户:“It’s 4am in New Zealand”

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

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

http://www.jsqmd.com/news/923885/

相关文章:

  • Zotero Style插件:如何彻底改变你的文献管理体验
  • 告别Python环境混乱:用Miniconda3创建项目专属环境的保姆级教程
  • 2026鞍山防水补漏公司怎么选?三家主流品牌实力全方位对比 - 吉修匠
  • 别再只懂TF-IDF了!用Python sklearn实战TF-IWF,搞定同类文本关键词提取难题
  • 不只是抓包:用Ubertooth One和Wireshark搭建你的第一个蓝牙LE嗅探环境
  • 温州黄金回收实测:六家上门机构谁更靠谱? - 黄金回收
  • 从零打造Arduino蜘蛛机器人:舵机控制与步态算法详解
  • 20251905 2025-2026-2 《网络攻防实践》实验九
  • HackMyVM-Quick3
  • 3步掌握消息留存神器:RevokeMsgPatcher深度解析与实战指南
  • novel-downloader:终极跨站点小说下载器深度实战指南
  • 终极实战指南:如何用Arduino-IRremote库解决15种红外遥控协议兼容性问题
  • 论文写作高效落地:百考通AI全流程辅助功能实战解析
  • 免费开源AMD锐龙调试工具SMUDebugTool:释放处理器潜能的终极指南
  • 2026年2月衢州黄金回收实录:今日金价677元,警惕高价引流陷阱 - 黄金回收
  • 别再只调包了!用ResNet18/50在CIFAR-10上跑出第一个模型(环境配置+训练技巧避坑)
  • 盐城黄金回收实体店全解析:资质、鉴定、报价与上门服务 - 黄金回收
  • ROS2多机通讯实战:当WiFi局域网遇上虚拟机,如何用集中式发现协议绕过UDP组播限制?
  • 2026年4月质量好的焊管供应商推荐,对焊法兰/不锈钢无缝管/弯头/耐蚀合金无缝管/不锈钢法兰,焊管供货商哪家靠谱 - 品牌推荐师
  • 基于Arduino与超声波传感器的手势识别游戏机设计与实现
  • 电路设计从实验室到生活:创客实践与多元应用场景解析
  • 为什么Windows 10用户需要这个3步搞定OneDrive的卸载神器?
  • 绍兴金价高位变现攻略:上门回收实测6家机构,实时金价1300元/克 - 黄金回收
  • 告别调参炼丹!看VOYAGER如何用‘提示工程’在《我的世界》里从砍树到挖矿
  • SpringBoot整合Milvus向量数据库
  • 成都H型钢今日价格、价格行情、盛世钢联最新报价(2025年09月31日) - 四川盛世钢联营销中心
  • 从平面点云到清晰轮廓:结合RANSAC与AC方法,搞定复杂场景下的轮廓提取
  • 重磅上新:靠谱的气力输送设备制造商 - 品牌推广大师
  • 2026年5月盐城黄金回收实测:金价高位下各区变现实录 - 黄金回收
  • BotW存档管理器:跨平台存档转换与进度同步的终极解决方案