news 2026/6/1 19:13:01

【Agent智能体15 | 工具使用-现代的LLM请求调用工具的语法】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Agent智能体15 | 工具使用-现代的LLM请求调用工具的语法】

声明:本篇博客是以吴恩达的【Agent智能体】教程为基础,并对其中的内容做了笔记整理以及个人收获的总结。

下面的例子都使用AISuite 开源库,让大语言模型调用工具。

注意:大模型本身不直接调用工具,它只是请求“你”去调用工具。但是在开发代理型工作流的开发者中,有时会直接说大模型调用了工具,虽然这并不是技术上的真实过程,这样说只是为了方便

定义工具 (Defining the tool)


图片使用的代码库是aisuite,演示了如何让模型调用一个简单的 Python 函数

  • 定义工具 (Defining the tool)
    左侧: Python 函数get_current_time(),用于获取当前时间。

    • 注释(Docstring)"""Returns the current time as a string"""。在 AI Agent 的开发中,这段描述至关重要。底层的框架会自动读取这段文字,把它发给大模型大模型正是依靠这句话来理解“这个工具是干什么用的”以及“什么时候该用它”。
  • 调用语法 (Syntax)
    右侧展示了如何将刚刚定义好的工具传递给大语言模型(这里调用的是openai:gpt-4o)。

    • tools=[get_current_time](工具列表):你只需把左侧写好的 Python 函数名放在列表中传给大模型。框架会自动把函数转化为模型能看懂的 JSON 格式描述
    • max_turns=5(最大轮次):作用是“限制 LLM 连续请求工具的次数,防止出现循环”。实际情况中这种死循环一般很少发生。
  • 总结
    The function get_current_time is automatically described to the LLM to enable it to decide when to use it.总结了整个过程的核心机制:

    • 系统会自动将函数描述给 LLM,赋予 LLM 自主决策的能力。当你问模型“现在几点了”时,模型会自己判断需要调用get_current_time这个工具来获取答案,而不是瞎编一个时间。

AI Agent 框架在后台工作的底层机制(无参)

底层会直接生成一个详细描述函数的JSON架构,这是实际传递给大模型的内容

这个图展示了从Python 函数JSON Schema的自动映射过程。

大模型原生并不直接运行 Python 代码,它们通过 API 接收标准的 JSON 格式数据。

aisuite这类框架是如何在后台做自动转换的:

  • 红框(函数名映射):Python 代码定义的函数名get_current_time,被框架自动提取,并填入了右侧 JSON Schema 中的"name"字段。

    • 这告诉大模型:“这里有一个工具,它的代号叫这个”。
  • 绿框(功能描述映射):Python 代码中的文档字符串"""Returns the current time as a string""",被自动提取并填入了右侧 JSON 的"description"字段。

    • 作用:大模型就是通过阅读这句 description,来理解这个工具的具体功能,从而决定在何时调用它。

“the name and description get added automatically”(名称和描述会被自动添加)

  • 作为开发者,你只需要像左下角那样,简单地把get_current_time放入tools列表中传给框架。你不需要手动去手写右上方那一坨繁琐的 JSON Schema 字典,框架(如aisuiteLangChainOpenAI SDK)会在底层替你完成这些翻译和组装工作。

三者的关系

  • get_current_time:开发者编写的真实代码实体。 它包含了具体的业务逻辑(获取系统时间)和人类可读的注释说明(Docstring)
    • 大语言模型(LLM)本身是一个文本处理引擎,它在云端的服务器里,并不能直接运行你本地或服务器上的 Python 代码
  • JSON Schema:给大模型看的内容
    • 大模型不懂如何直接运行 Python,它只认一种标准化的数据格式 - JSON
    • 它是大模型的“API 接口文档”。通过这种标准化的 JSON 格式,大模型就能清楚地知道这个函数的作用以及需要调用的场景
    • JSON Schema 就是get_current_time这段 Python 代码在 AI 世界里的名片
  • aisuite库 API:连接两者的中转站:
    • 没有aisuite(或者 OpenAI 原生 SDK 等框架),你需要自己手动写代码把 Python 函数转成那一大坨复杂的 JSON,不仅繁琐,而且容易出错。
    • 作用:aisuite作为中间商。当你把get_current_time丢进tools=[get_current_time]时,aisuite会在后台自动完成以下工作:
      • 解析你的 Python 函数名和注释。
      • 组装成大模型需要的 JSON Schema 格式。
      • 打包发送给大模型。
      • 并且,如果大模型回复“我要调用这个工具”,aisuite还会负责执行这个 Python 函数,并把运行结果再次发回给大模型

AI Agent 框架在后台工作的底层机制(带参)

这个图展示了如何给工具加上“参数(Parameters)”,让大语言模型(LLM)能够更灵活地传递信息给工具。

  • 自动映射的三要素

    左侧是你写的 Python 代码,右侧是框架自动生成的 JSON Schema 。框架做了自动翻译工作:

    • 红框(函数名):将 Python 函数名get_current_time映射到 JSON 的name字段。

    • 绿框(整体描述):将文档字符串映射到 JSON 的description,告诉大模型这个工具现在的用途是“获取指定时区的当前时间”。

    • 蓝框(参数 ):

      • 左侧:Python 函数的括号里多了一个参数(timezone)
      • 右侧:在 JSON 中生成了一个非常详细的"parameters"字典。这里面不仅告诉大模型需要提供timezone这个参数,还规定了它的数据类型("type": "string"),并且给出了具体的格式示例(例如'America/New_York')。
  • 为什么需要这个蓝框?(大模型的思考过程)

    有了这段详细的 JSON 参数说明,大模型在处理你的问题时,就能完成参数提取的工作。

    举个例子,假设你问大模型:“东京现在几点了?”

    1. 大模型阅读右侧的 JSON 说明书。
    2. 它判断出需要调用get_current_time工具。
    3. 关键步骤:结合蓝框里的要求和你的问题,大模型会自动把“东京”转换成符合规范的时区字符串(如Asia/Tokyo)。
    4. 大模型向框架发送请求:“请执行get_current_time,并把参数设为Asia/Tokyo”。

用一个例子简单说一下具体的执行流程:

用户输入:“请问现在纽约几点了”

  • 第一步aisuite框架开始进行翻译工作
    • aisuite拿到你的get_current_time函数,然后把它翻译成了JSON Schema(AI的说明书)
    • aisuite将用户的提问跟这个JSON数据一起打包发送给LLM
    • 此时LLM得到的数据是这样的:
      • 用户消息:“请问现在纽约几点了?”
      • 工具 (JSON格式):[{"name": "get_current_time", "description": "获取指定时区的时间", "parameters": {"timezone": "string"}}]
  • 第二步:LLM开始思考
    • “用户问的是纽约时间。”
    • 看工具列表:正好有一个叫get_current_time的工具,可以查时区时间。
    • LLM决定不直接回答,而是aisuite发送一个“调用请求”。
    • 大模型回复给aisuite的数据:
      • 动作:call_function
      • 工具名:get_current_time
      • 提取到的参数:{"timezone": "America/New_York"}
  • 第三步::aisuite收到指令之后,执行工具
    • aisuite会在你的本地电脑/服务器上,真正执行你的Python 代码
    • 假设代码运行完毕,返回了字符串"09:30:15"
    • aisuite再次把这个结果发送给大模型
  • 第四步:LLM进行最终回答
    • 大模型拿到了具体的时间数据,结合用户的原始问题,生成了一句自然流畅的人类语言。
      1. 大模型输出:“现在纽约的时间是上午 09:30:15。”
      2. aisuite将这句话返回给你的程序,展示在屏幕上。

总结

这篇博文展示了现代进行工具调用的一些基本语法与底层逻辑。文本用的是开源代码库aisuite为例进行了详细拆解,但还有许多类似且成熟的框架(例如 LangChain、LlamaIndex 或 OpenAI 原生 SDK 等)。无论你未来在开发中选择哪一种框架,它们背后的核心价值和运转机制都是类似的。

总而言之,工具调用并不神秘,它就是一个标准化数据格式(JSON)的自动映射与协同执行过程。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 19:10:20

保姆级教程:在Windows上从零搭建GB28181监控平台(WVP-Pro + ZLMediaKit)

Windows平台GB28181监控系统全栈部署指南:WVP-Pro与ZLMediaKit深度整合第一次接触GB28181协议时,我被各种专业术语弄得晕头转向——SIP信令、媒体流、NAT穿透...直到在Windows电脑上成功运行起完整的监控平台,所有概念才真正串联起来。本文将…

作者头像 李华
网站建设 2026/6/1 19:09:22

Arduino声控照明系统:从传感器原理到继电器安全控制实践

1. 项目概述:从拍手开灯到智能声控的实践几年前,我还在大学实验室里捣鼓单片机时,就想过能不能做个“声控灯”——不是那种楼道里反应迟钝、还经常被咳嗽误触发的,而是能精准识别拍手、开关自如的。这个想法一直搁置,直…

作者头像 李华
网站建设 2026/6/1 19:09:07

高频电刀四层板高压隔离、大电流散热与EMC抗干扰

高频电刀是外科手术常用设备,通过高频高压电流切割、凝血组织,核心 PCB 需同时承载3000V 高压、10A 大电流、高频信号控制,对高压隔离、散热、EMC要求极高。​设备核心参数:工作频率 400kHz,输出电压 0~3000V&#xff…

作者头像 李华
网站建设 2026/6/1 19:07:35

基于Arduino与蓝牙的双控智能家居系统:硬件冗余与可靠性设计

1. 项目概述:一个真正实用的双控智能家居中枢做智能家居项目,最怕的就是“单点失效”。想象一下,你正舒舒服服躺在沙发上用手机APP关灯,结果网络断了或者手机没电了,你就得摸黑爬起来去按墙上的物理开关——这体验一下…

作者头像 李华
网站建设 2026/6/1 19:06:35

关于不良网络内容潜在影响的客观分析

人机协作,AI模型:Deepseek仅供参考关于不良网络内容潜在影响的客观分析在数字信息高度发达的今天,各类网络内容充斥人们的日常生活。其中,某些特定类型的不良信息,若被个体过度接触或沉溺其中,可能对个人产…

作者头像 李华
网站建设 2026/6/1 18:57:27

渔人的直感:终极FF14钓鱼计时器使用指南

渔人的直感:终极FF14钓鱼计时器使用指南 【免费下载链接】Fishers-Intuition 渔人的直感,最终幻想14钓鱼计时器 项目地址: https://gitcode.com/gh_mirrors/fi/Fishers-Intuition 渔人的直感是一款专为《最终幻想14》设计的智能钓鱼计时器工具&am…

作者头像 李华