零基础认识大语言模型(LLM)工作原理(10.Tool Calling:让 AI 第一次拥有行动能力)

发布时间:2026/11/12 6:51:16

零基础认识大语言模型(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”的关键一步。
延伸阅读

更多相关文章

2026/10/31 17:46:12

Linux进程创建与内存管理核心机制解析

1. 操作系统核心机制全景解读 当我们在终端敲下 ./a.out 运行程序时,背后究竟发生了什么?这个看似简单的动作触发了操作系统最精妙的连锁反应。作为在Linux系统开发领域摸爬滚打多年的老手,今天我想用最直白的语言,带大家深入理…

2026/10/28 22:19:59

人工智能对社会和经济发展的影响存在显著地域差异

结论先行:人工智能对经济与社会的赋能不是普惠均等的,存在极强的地域差异、城乡差异和圈层差异,呈现 “强者愈强、弱者滞后” 的马太效应。一、为什么 AI 影响天然存在地域差距?人工智能产业落地高度依赖三大稀缺资源:…

2026/11/10 20:58:11

智赋万象:人工智能对当代社会与经济发展的深层影响

目录 一、重塑经济体系:催生智能经济新形态,激活增长新动能 二、赋能社会发展:优化公共服务,重构大众生活方式 三、直面变革阵痛:人工智能带来的社会经济新挑战 四、守正创新:构建人工智能良性发展新格…

2026/11/12 6:49:26

电工证会注销不?千万别踩坑,别让证书变成废纸

电工证会注销不?千万别踩坑,别让证书变成废纸 你是不是也遇到过这样的问题: 不知道去哪报名怕被中介坑 ?电工证作为特种作业人员必备的上岗凭证,很多人以为只要考了就一劳永逸,其实不然。 电工证会注销不…

2026/11/12 6:49:26

高级电工证怎么计分实操考试多少钱

高级电工证怎么计分实操考试多少钱 实操考试心里没底怕挂科,尤其是刚入行的电工,面对高压电工证、低压电工证、高级电工证等不同级别,更是摸不着头脑。你可能最关心的是 高级电工证怎么计分 ,还有实操考试 多少钱 ,以及怎么准备才能不挂科。…

2026/11/12 6:49:26

办理考电工证焊工证叉车证需要什么材料

电工焊工叉车证考下来心里没底?电子证书怎么拿最稳妥 实操考试心里没底怕挂科,特别是第一次报考的郑州小伙伴,对考试流程、证书发放、电子证书怎么查都一脸懵。别急,这篇文章就从政策、实操、流程、避坑几个方面,帮你把考电工证焊工证叉车证这事搞清楚,…

2026/11/12 6:49:26

低压电工证 复审证丢了怎么补办

低压电工证复审实操考试心里没底怕挂科?2026河南最新政策全解析 实操考试心里没底怕挂科?你不是一个人。2026年河南最新政策一出,低压电工证复审的门槛又升了一级,很多人开始慌了。其实只要方法对,考试并不难。今天我就从一个信阳在职建筑工人的…

2026/11/12 6:44:26

南阳施工企业电工证卡实体卡申请全攻略,真实经历告诉你怎么走

南阳施工企业电工证卡实体卡申请全攻略,真实经历告诉你怎么走 你有没有过这样的经历:手里拿着一堆施工项目,但就是缺个电工证,连进场资格都拿不到?我跟你说,这不是个例,这在南阳很多中小型施工企业里,都是常事。今天我就从一个施工企业负责人的角度,…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑