零基础认识大语言模型(LLM)工作原理(10.Tool Calling:让 AI 第一次拥有行动能力)
零基础认识大语言模型LLM工作原理(10.Tool Calling让 AI 第一次拥有行动能力)在前面的章节中我们了解到大语言模型LLM本质上是一个“文本生成器”——它根据输入的提示预测下一个最合理的词语。但无论它生成多么精彩的回答它始终停留在“说”的层面无法真正去“做”任何事情。例如你问它“今天天气怎么样”它可能回答“根据我的训练数据我无法获取实时信息”。或者你让它“帮我发一封邮件”它只能给你一封邮件的草稿却无法真正发送。这就是LLM的“无力感”——它没有行动能力。但Tool Calling工具调用的出现彻底改变了这一局面。它让LLM第一次拥有了“行动能力”使其能够调用外部工具、API或函数完成实际任务。本文将深入剖析Tool Calling的原理并通过可运行的代码示例让你零基础理解这一强大的机制。## 什么是Tool CallingTool Calling顾名思义就是让LLM能够“调用工具”。其核心思想是在LLM的输入中提供一组预先定义好的工具如函数、API接口LLM在生成回答时可以自主决定是否需要调用某个工具并生成相应的参数。然后由外部系统执行这个工具并将结果返回给LLM让LLM基于结果继续生成回答。这种机制让LLM从“纯文本生成器”升级为“智能代理”Agent它能够感知环境、决策行动、获取反馈并最终完成任务。## Tool Calling的工作原理Tool Calling的工作流程通常分为以下几步1.定义工具开发者定义一组函数或API并给LLM提供它们的描述包括函数名、参数类型、功能说明。这些描述以JSON Schema或其他结构化格式呈现。2.用户提问用户向LLM提出一个需要调用工具才能完成的问题。3.LLM决策LLM分析问题如果认为需要调用工具它会生成一个特殊的响应包含要调用的工具名称和参数。4.执行工具外部系统如Python代码解析LLM的响应调用对应的函数并获取结果。5.返回结果将工具的执行结果作为新的上下文重新输入给LLM。6.生成最终回答LLM基于工具结果生成最终的自然语言回答。这种模式类似于人类使用工具我们先用语言思考LLM然后动手操作工具再根据结果调整。## 代码示例1使用OpenAI API实现简单的Tool Calling下面是一个使用OpenAI GPT-4 API实现Tool Calling的完整示例。假设我们想让AI能够调用一个“获取当前时间”的函数。pythonimport jsonfrom openai import OpenAI# 初始化OpenAI客户端需要设置API keyclient OpenAI(api_keyyour-api-key-here)# 1. 定义一个工具函数def get_current_time(timezone: str UTC) - str: 获取指定时区的当前时间 from datetime import datetime import pytz try: tz pytz.timezone(timezone) current_time datetime.now(tz).strftime(%Y-%m-%d %H:%M:%S) return f当前时间{timezone}: {current_time} except Exception as e: return f错误无法获取时区{timezone}的时间。{str(e)}# 2. 定义工具的元数据描述给LLM看tools [ { type: function, function: { name: get_current_time, description: 获取指定时区的当前时间, parameters: { type: object, properties: { timezone: { type: string, description: 时区名称如 Asia/Shanghai, America/New_York等, default: UTC } }, required: [] } } }]# 3. 用户提问messages [ {role: user, content: 现在日本东京是几点}]# 4. 调用LLM传入工具定义response client.chat.completions.create( modelgpt-4, messagesmessages, toolstools, tool_choiceauto # 让LLM自动决定是否调用工具)# 5. 解析LLM的响应assistant_message response.choices[0].message# 检查LLM是否决定调用工具if assistant_message.tool_calls: for tool_call in assistant_message.tool_calls: function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) print(fLLM决定调用工具: {function_name}) print(f参数: {function_args}) # 6. 执行工具函数 if function_name get_current_time: result get_current_time(**function_args) print(f工具返回结果: {result}) # 7. 将工具结果返回给LLM messages.append(assistant_message) # 追加LLM的决策 messages.append({ role: tool, tool_call_id: tool_call.id, content: result }) # 8. 让LLM基于工具结果生成最终回答 final_response client.chat.completions.create( modelgpt-4, messagesmessages ) print(f最终回答: {final_response.choices[0].message.content})else: print(fLLM没有调用工具直接回答: {assistant_message.content})运行结果示例LLM决定调用工具: get_current_time参数: {timezone: Asia/Tokyo}工具返回结果: 当前时间Asia/Tokyo: 2025-03-15 14:30:45最终回答: 日本东京的当前时间是2025年3月15日14点30分45秒东京时间。在这个示例中LLM识别到用户的问题需要获取实时时间于是它“决定”调用get_current_time工具并自动填写了参数timezone: Asia/Tokyo。我们代码中执行了这个工具将结果返回给LLMLLM最终给出了一个完整的自然语言回答。## 代码示例2自定义工具调用实现天气查询下面我们实现一个更复杂的例子让AI能够调用天气API查询实时天气。为了简化我们使用一个模拟的天气查询函数。pythonimport jsonimport requests# 模拟的天气查询函数实际开发中可替换为真实APIdef get_weather(city: str) - str: 模拟查询指定城市的天气实际应调用天气API # 模拟数据 weather_data { 北京: {temperature: 22, condition: 晴, humidity: 45}, 上海: {temperature: 25, condition: 多云, humidity: 60}, 东京: {temperature: 18, condition: 小雨, humidity: 80}, 纽约: {temperature: 12, condition: 阴天, humidity: 70} } if city in weather_data: data weather_data[city] return f{city}天气{data[condition]}温度{data[temperature]}°C湿度{data[humidity]}% else: # 如果城市不在模拟数据中返回错误信息 return f抱歉暂时没有{city}的天气数据。# 定义工具元数据tools [ { type: function, function: { name: get_weather, description: 查询指定城市的当前天气情况, parameters: { type: object, properties: { city: { type: string, description: 城市名称如北京、上海等 } }, required: [city] } } }]# 用户提问messages [ {role: user, content: 我想去上海旅游帮我看看上海的天气怎么样另外北京现在热吗}]# 调用LLMresponse client.chat.completions.create( modelgpt-4, messagesmessages, toolstools, tool_choiceauto)assistant_message response.choices[0].message# 处理工具调用if assistant_message.tool_calls: # 注意这里LLM可能会同时调用多个工具并行调用 for tool_call in assistant_message.tool_calls: function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) print(f调用工具: {function_name}) print(f参数: {function_args}) if function_name get_weather: result get_weather(**function_args) print(f返回结果: {result}) # 将结果追加到消息列表 messages.append(assistant_message) messages.append({ role: tool, tool_call_id: tool_call.id, content: result }) # 让LLM综合所有结果生成回答 final_response client.chat.completions.create( modelgpt-4, messagesmessages ) print(fAI最终回答: {final_response.choices[0].message.content})else: print(fAI直接回答: {assistant_message.content})运行结果示例可能输出调用工具: get_weather参数: {city: 上海}返回结果: 上海天气多云温度25°C湿度60%调用工具: get_weather参数: {city: 北京}返回结果: 北京天气晴温度22°C湿度45%AI最终回答: 上海现在的天气是多云温度25°C湿度60%非常适合旅游北京现在是晴天温度22°C不算热很舒适。两个城市都非常适合出行。注意在这个例子中LLM识别到用户询问了两个城市因此它“聪明地”连续调用了两次get_weather工具分别查询上海和北京的天气然后综合结果给出了回答。## Tool Calling的进阶应用Tool Calling不仅限于简单的函数调用它还可以用于1.数据库查询让AI生成SQL语句并执行返回结果。2.文件操作读取、写入、修改文件。3.发送消息通过API发送邮件、短信或即时消息。4.控制设备通过物联网API控制智能家居设备。5.代码执行让AI编写并执行Python代码需谨慎处理安全性。这些能力让AI从一个“聊天机器人”进化成一个真正的“智能助手”能够主动完成复杂的多步骤任务。## 总结Tool Calling是LLM能力的一次质的飞跃。通过将外部工具以结构化的方式暴露给LLM我们赋予了它“行动能力”——它不再只是被动地生成文本而是可以主动决策、调用工具、获取反馈最终完成任务。这一机制的核心在于“工具描述”和“执行分离”LLM负责决策调用哪个工具、用什么参数外部系统负责执行运行函数、返回结果。这种设计既利用了LLM强大的语言理解和推理能力又避免了它在计算、实时数据获取等方面的天然缺陷。对于开发者而言Tool Calling提供了一个强大的框架可以构建出各种实用的AI应用如智能客服、自动化工作流、个人助手等。掌握这一技术你就迈出了从“对话式AI”到“行动式AI”的关键一步。

相关新闻

AI智能体技能实战:从入门到企业级应用

AI智能体技能实战:从入门到企业级应用

1. 从零开始认识AI智能体技能 去年我接手了一个内容运营项目,每天需要处理上百篇行业报告。最初团队用传统方式人工阅读摘要,三个人全职工作还经常加班到深夜。直到我偶然接触到了AI智能体(Agent)技术,情况发生了翻天覆…

2026/7/27 21:28:45 阅读更多 →
阿里云 Elasticsearch 9.4 Agent Builder 实战

阿里云 Elasticsearch 9.4 Agent Builder 实战

导读:本文以一次灰度发布故障为完整演示,拆解阿里云 Elasticsearch 9.4 Agent Builder 如何用 Skill 固化经验、用 Tool 锁定口径、用 Workflow 守住人工确认,做到能力可复用、权限不放开、审批不跳过。 开篇:一条告警&#xff0c…

2026/7/27 21:28:45 阅读更多 →
ColorPickerPreference源码解读:探索Android颜色选择器的设计模式与最佳实践

ColorPickerPreference源码解读:探索Android颜色选择器的设计模式与最佳实践

ColorPickerPreference源码解读:探索Android颜色选择器的设计模式与最佳实践 【免费下载链接】android-ColorPickerPreference ColorPickerPreference for android to create color picker in preferences. Project created as Library 项目地址: https://gitcode…

2026/7/27 21:28:45 阅读更多 →

最新新闻

终身智能体的持续学习与长期对齐技术解析

终身智能体的持续学习与长期对齐技术解析

1. ICLR 2026 Workshop:终身智能体的前沿探索 人工智能领域正迎来一个关键转折点。作为从业者,我注意到近年来以大语言模型(LLM)、强化学习(RL)和具身智能(Embodied AI)为核心的AI A…

2026/7/27 21:34:47 阅读更多 →
百度一见视觉AI:工业级应用与五维管理实践

百度一见视觉AI:工业级应用与五维管理实践

1. 企业视觉管理的AI革命:百度一见的深耕之道 在2025年AI技术井喷的背景下,当大多数企业还在追逐通用大模型的浪潮时,百度一见团队却选择了一条截然不同的道路——深入工厂车间、矿山巷道、物流仓库等产业一线,用八年时间打磨出一…

2026/7/27 21:34:47 阅读更多 →
Newcar项目实战:从零开始开发一个交互式Canvas游戏

Newcar项目实战:从零开始开发一个交互式Canvas游戏

Newcar项目实战:从零开始开发一个交互式Canvas游戏 【免费下载链接】newcar 🖌️ [WIP] Modern JavaScript Canvas Library 项目地址: https://gitcode.com/gh_mirrors/ne/newcar Newcar是一个现代JavaScript Canvas库,专为创建交互式…

2026/7/27 21:34:47 阅读更多 →
Jellium Desktop音频位深度基础:解锁高保真音质的关键指南

Jellium Desktop音频位深度基础:解锁高保真音质的关键指南

Jellium Desktop音频位深度基础:解锁高保真音质的关键指南 【免费下载链接】jellium-desktop An unofficial desktop client for Jellyfin 项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop Jellium Desktop作为一款非官方的Jellyfin桌面客…

2026/7/27 21:34:47 阅读更多 →
未来照明控制:OLA最新特性与2024路线图详解

未来照明控制:OLA最新特性与2024路线图详解

未来照明控制:OLA最新特性与2024路线图详解 【免费下载链接】ola The Open Lighting Architecture - The Travel Adaptor for the Lighting Industry 项目地址: https://gitcode.com/gh_mirrors/ola1/ola Open Lighting Architecture(OLA&#xf…

2026/7/27 21:34:47 阅读更多 →
企业级部署指南:agents-js性能优化与Docker容器化实践 — 支持1000并发连接

企业级部署指南:agents-js性能优化与Docker容器化实践 — 支持1000并发连接

企业级部署指南:agents-js性能优化与Docker容器化实践 — 支持1000并发连接 【免费下载链接】agents-js Build realtime multimodal AI agents with Node.js 项目地址: https://gitcode.com/gh_mirrors/ag/agents-js agents-js是一个基于Node.js构建实时多模…

2026/7/27 21:33:47 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻