【Agent智能体13 | 工具使用-什么是工具?】

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

前面已经介绍完反思设计模式的所有内容了,从这篇开始,要介绍智能体设计模式中的工具使用

这篇主要是介绍一下,工具的概念。

首先要明确,让大模型具体选择和使用工具(调用函数)的能力,就像我们人类一样可以使用很多工具实现更多功能

为什么需要工具?

通过这幅图的对比,我们可以看到工具可以让大模型有更强大的功能。

  • 没有工具的 LLM(上方的流程): 传统的 LLM 其知识储备截止于训练完成的那一刻,且无法直接感知现实世界的实时状态。

    • 因此,当用户询问"现在几点了?"(What time is it?)时,模型只能基于其固有的限制回答:"抱歉,我无法获取当前时间。"

    外部工具的引入(右侧代码): 图中展示了一段简单的 Python 代码 get_current_time()。这是一个可以获取系统当前真实时间的"工具"。

  • 拥有工具的 LLM(下方的流程): 赋予 LLM 访问该工具的能力后,面对同样的问题,LLM 就可以给出准确的答案:"现在是下午 3:20。"(It's 3:20pm.)

下面简单展示一下简单的工具执行操作:

这个图揭示了 LLM 内部是如何处理工具调用的:

  • 调用工具的完整流程(上方的流程):
    1. 用户输入提示语:用户询问"现在几点了?"。
    2. LLM查看可用的工具集 :LLM 接收到问题,检查自己拥有的工具箱(Tools),发现里面有一个 get_current_time 工具。
    3. LLM决定调用哪个工具 :LLM 意识到要回答这个问题必须使用该工具,于是触发工具调用
    4. 工具会反馈给大模型 :工具执行并返回原始结果(例如图中的 15:20:45)。
    5. 大模型会输出最终结果:LLM 接收这个时间数据,将其转化为自然语言("It's 3:20pm.")并输出给用户。

工具使用的一个重要方面是:可以让大模型自主决定是否使用这些工具中的任何一个(自主决策

  • 按需选择工具的流程(下方的流程):
    1. 用户询问"绿茶里有多少咖啡因?"。
    2. LLM 同样检查工具箱(里面依然只有 get_current_time)。
    3. 关键: LLM 能够理解语境,它判断出"获取当前时间"这个工具对于回答"咖啡因含量"毫无帮助
    4. 因此,LLM 选择不调用任何工具,而是直接利用自己预训练的内部知识库给出答案("绿茶通常每杯含有 25-50 毫克咖啡因...")。

工具调用的具体示例 (Examples)

  • 场景一:网络搜索 (Web Search)
    • 用户: 想找加州山景城附近的意大利餐厅。
    • LLM 动作: 识别出需要搜索信息,调用 web_search 工具 ,并准确地将用户的话提炼为搜索关键字参数:query="restaurants near Mountain View, CA"
  • 场景二:数据库查询 (Database Query)
    • 用户: 让我看看买了白色太阳镜的客户。
    • LLM 动作: 识别出这是一个数据检索需求,调用 query_database 工具 ,并像程序员一样提取出关键字段:表名 (table="sales")、产品 (product="sunglasses")、颜色 (color="white")。
  • 场景三:数学计算 (Math Calculation)
    • 用户: 存500美元,利息5%,10年后有多少钱?
    • LLM 动作: LLM 知道自己直接做复杂数学题容易出错,于是调用专用的计算工具 。它不仅能调用像 interest_calc 这样预设好参数的函数,甚至能直接写出数学表达式并使用 eval 工具执行计算( 500 ∗ ( 1 + 0.05 ) 10 500 * (1 + 0.05)^{10} 500∗(1+0.05)10)。

结论: LLM 具备强大的意图识别与参数提取能力。它不仅知道"该用什么工具",还能从口语化的提问中抓取工具运行所需的格式化数据。


上面都是单个工具的例子,但是很多场景下,我们希望为大模型提供多个工具或函数,具体例子如下:

多工具的组合与链式调用 (Multiple tools)

当一个任务无法用单一工具完成时,LLM 可以按逻辑顺序调用多个工具。

  • 复杂任务拆解: 用户下达了一个复合指令:"在我的日历上找一个周四的空闲时间,并和 Alice 预约一个会议。"
  • 步骤 1:收集信息 (调用第一个工具)
    • LLM 接收到指令后,评估工具箱(包含预约、查日历、删除预约)。它判断出第一步必须先知道有哪些时间是空闲的。
    • 因此,它触发了 check_calendar检查日历)工具。
    • 工具返回了结果:周四下午 3pm, 4pm, 6pm 有空。
  • 步骤 2:执行动作 (调用第二个工具)
    • LLM 接收到了空闲时间数据。现在它进入任务的第二阶段:创建会议
    • 它再次调用工具,这次选择了 make_appointment创建预约),并智能地从上一步的时间列表中挑了一个(例如 3pm),作为参数传给该工具执行。
    • 工具返回结果:"会议创建成功!"。
  • 步骤 3:最终反馈
    • LLM 将所有操作的结果汇总,用自然语言向用户报告:"您的预约已设定在周四下午 3 点与 Alice 进行。"

通过上面的单个工具调用以及多个工具调用的例子,我们不难发现,工具对于LLM来说是很重要的,能提供给LLM更强大的外部感知能力!

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

相关推荐
ZhengEnCi2 小时前
09bad-斯坦福CS336作业一-构建优化器
人工智能
ZhengEnCi2 小时前
09bac-斯坦福CS336作业一-实现训练损失计算
人工智能
冬奇Lab3 小时前
Skill 系列(01):Skill 评测体系——如何量化一个 AI Skill 的质量
人工智能
IT_陈寒6 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
用户3521802454757 小时前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
米小虾8 小时前
手把手教你搭建第一个生产级AI Agent:从选型到实战的完整指南
人工智能·agent
任沫8 小时前
Agent之Function Call
javascript·人工智能·go
米小虾8 小时前
2026年AI Agent全面爆发:从开源生态到企业级应用的进化之路
人工智能·agent
用户6919026813398 小时前
Vibe Coding 开发项目的基本范式
人工智能·设计模式·代码规范
To_OC8 小时前
别再跟 AI 死磕 prompt 了,我写了个 Loop 让它自己改到满意为止
人工智能·aigc·agent