【Agent智能体13 | 工具使用-什么是工具?】
声明:本篇博客是以吴恩达的【Agent智能体】教程为基础,并对其中的内容做了笔记整理以及个人收获的总结。
前面已经介绍完反思设计模式的所有内容了,从这篇开始,要介绍智能体设计模式中的工具使用
这篇主要是介绍一下,工具的概念。
首先要明确,让大模型具体选择和使用工具(调用函数)的能力,就像我们人类一样可以使用很多工具实现更多功能
为什么需要工具?
通过这幅图的对比,我们可以看到工具可以让大模型有更强大的功能。
没有工具的 LLM(上方的流程):传统的 LLM 其知识储备截止于训练完成的那一刻,且无法直接感知现实世界的实时状态。
- 因此,当用户询问“现在几点了?”(What time is it?)时,模型只能基于其固有的限制回答:“抱歉,我无法获取当前时间。”
外部工具的引入(右侧代码):图中展示了一段简单的 Python 代码
get_current_time()。这是一个可以获取系统当前真实时间的“工具”。拥有工具的 LLM(下方的流程):赋予 LLM 访问该工具的能力后,面对同样的问题,LLM 就可以给出准确的答案:“现在是下午 3:20。”(It’s 3:20pm.)
下面简单展示一下简单的工具执行操作:
这个图揭示了 LLM 内部是如何处理工具调用的:
- 调用工具的完整流程(上方的流程):
- 用户输入提示语:用户询问“现在几点了?”。
- LLM查看可用的工具集:LLM 接收到问题,检查自己拥有的工具箱(Tools),发现里面有一个
get_current_time工具。 - LLM决定调用哪个工具:LLM 意识到要回答这个问题必须使用该工具,于是触发工具调用。
- 工具会反馈给大模型:工具执行并返回原始结果(例如图中的
15:20:45)。 - 大模型会输出最终结果:LLM 接收这个时间数据,将其转化为自然语言(“It’s 3:20pm.”)并输出给用户。
工具使用的一个重要方面是:可以让大模型自主决定是否使用这些工具中的任何一个(自主决策)
- 按需选择工具的流程(下方的流程):
- 用户询问“绿茶里有多少咖啡因?”。
- LLM 同样检查工具箱(里面依然只有
get_current_time)。 - 关键:LLM 能够理解语境,它判断出“获取当前时间”这个工具对于回答“咖啡因含量”毫无帮助。
- 因此,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更强大的外部感知能力!
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!
