新闻详情

新闻详情

首页 / 资讯中心 / 详情

30天从零开始学AI应用开发(Day 11):Function Calling:让大模型学会“动手干活”

发布时间:2026/9/28 18:02:09来源:尧图网络
30天从零开始学AI应用开发(Day 11):Function Calling:让大模型学会“动手干活”
这是系列的第 11 篇。整个系列写给零基础、想入行 AI 的朋友每天一篇30 天后你会做出 3 个能写进简历的项目。这篇解决什么问题昨天那个“第 11 轮忘掉第 1 轮”的实验好多人做出来了结论都挺一致AI 的记忆确实是拼出来的不是天生的。今天往一个更刺激的方向走。到目前为止你的 AI 有个硬伤它只会说话。你问它今天天气它编一个你让它算个数它可能算错你让它读你的文件它做不到。不是它笨是它只有一张嘴没有手脚。今天要装的 Function Calling就是给它装上手和脚。这是通往 Agent 的第一道门也是项目三的地基。别被这个英文名吓住它一点都不复杂。一、先想清楚AI 为什么不能自己做事你可能会想我直接告诉它“你现在的身份是天气助手有人问天气你就回答”行不行不行。因为大模型的全部能力就是预测文字它没有办法去访问网站、读取文件。它所谓的“知道今天天气”只是根据训练数据猜一个像样的答案纯属编造。打个比方它是个博学但被困在房间里的人能跟你聊任何话题但打不开门。Function Calling 做的事情就是给它开一扇窗你替它去查、去读、去算把结果递进来它负责理解和使用。关键的一句话真正干活的是你的代码AI 只负责决定“该干什么”和“结果怎么用”。二、流程拆解五步走完一轮听起来玄拆开就是五步每一步你都能看懂你告诉 AI我这儿有几个工具工具清单AI 判断用户这个问题该用哪个工具需要什么参数你的代码照着 AI 的要求去执行真的去查天气你把执行结果递回给 AIAI 拿着真实结果组织成人话回答用户看到没AI 从头到尾没干过任何实事它只做了两次“判断”。真正的动作全是你的 Python 代码完成的。三、实战给 AI 装一个查天气的能力新建 tools.py跟着敲。先定义工具也就是告诉 AI 它有什么“手脚”importjsonfromopenaiimportOpenAI clientOpenAI(api_key你的密钥,base_urlhttps://api.deepseek.com)# 第一步描述工具清单。这是给 AI 看的“说明书”tools[{type:function,function:{name:get_weather,# 工具名要和后面的函数对应description:查询某个城市的实时天气,parameters:{# 告诉 AI 需要什么参数type:object,properties:{city:{type:string,description:城市名如北京}},required:[city]}}}]然后写出真正的函数也就是干活的代码defget_weather(city):# 教学演示用假数据真实项目里这里去调天气 APIdata{北京:晴25度,上海:小雨22度,济南:多云24度}returndata.get(city,查不到这个城市)接着是核心的调用循环messages[{role:user,content:济南今天天气怎么样}]# 第二次请求这次带上工具清单responseclient.chat.completions.create(modeldeepseek-chat,messagesmessages,toolstools# 关键把工具清单发给 AI)msgresponse.choices[0].message# AI 的判断结果# 如果 AI 决定要用工具就执行ifmsg.tool_calls:callmsg.tool_calls[0]# 取出它想调用的那个工具argsjson.loads(call.function.arguments)# 取出参数是个 JSON 字符串print(AI 决定调用,call.function.name,参数,args)resultget_weather(args[city])# 真的去执行# 把AI的请求和执行结果都追加进对话记录messages.append(msg)messages.append({role:tool,# 新角色tool专门装工具的执行结果tool_call_id:call.id,# 对号入座回应哪次调用content:result})# 第三次请求把结果给 AI让它组织语言finalclient.chat.completions.create(modeldeepseek-chat,messagesmessages)print(AI 回答,final.choices[0].message.content)跑一遍你会看到 AI 先说“我要调用 get_weather参数是济南”然后输出基于真实数据整理的回答。注意这里其实发生了两次 AI 调用第一次它判断该用什么工具第二次它根据结果生成回答。中间干活的是你自己的代码。这个结构理清了后面做 Agent 就是在这个循环上加东西。四、为什么这一招这么重要Function Calling 是分水岭技术。有它之后AI 能做的事从“聊天”扩展到“操作世界”查数据库、查天气、搜网页读你的文件、写入表格发邮件、下单、调用你公司内部的接口你以后面试时听到的“智能体”“Agent”本质就是“大模型 工具调用 自主循环”。今天你手写了一遍最小版本后面只是让它更聪明、能连着用好几个工具。常见报错排查报错一AI 不调用工具直接自己编了个答案。检查两点一是 tools 参数有没有真的传进去二是 description 写得够不够清楚。AI 是靠这段描述判断该不该用的。描述里写清楚“什么时候用”比如“当用户询问某地实时天气时使用”。报错二json.loads(call.function.arguments) 报错。arguments 的格式偶尔不规范加个 try 兜底。另外注意 AI 选错工具时参数可能对不上先 print 出来看看。报错三追加 tool 消息时漏了 tool_call_id。这个字段是“回执单号”必须和上面那次调用对上漏了 AI 会不知道这结果是谁的直接报错。报错四模型不支持工具调用。换个支持的模型。主流模型基本都支持如果报错说 model does not support tools去平台文档确认下具体模型名。今天的作业把上面的例子跑通然后加一个新工具比如 get_time报时或者 calculator做四则运算。写完在评论区说说你加的工具AI 有没有乖乖用跑通了你就正式摸到 Agent 的门槛了。明天预告Day 12《像产品一样稳流式输出、报错重试、花钱控制》。今天你已经能调工具了但代码还很脆网络抖一下报错等半天没反应账单什么样也不知道。明天把这三件事解决掉你的程序才算像个能交出去的东西。————————————————*系列目录30天从零开始学AI应用 开发
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

设备偶发掉线重启恢复?五维排查法从物理链路到日志取证 2026/9/28 18:55:00

设备偶发掉线重启恢复?五维排查法从物理链路到日志取证

1. 设备偶发掉线重启恢复的排查思路总览设备偶发掉线、重启之后又恢复正常,这个现象在运维圈里几乎人人都遇到过。它最让人头疼的地方在于:故障是间歇性的,等你赶到现场或者连上设备的时候,它已经自己好了。你查日志,日…

阅读更多 →
Kimi K2 大模型的“真香”时刻:Claude Code + Kimi K2 在 Windows 下的配置使用详解与 TaoToken 统一 Key 接入 2026/9/28 18:55:00

Kimi K2 大模型的“真香”时刻:Claude Code + Kimi K2 在 Windows 下的配置使用详解与 TaoToken 统一 Key 接入

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

阅读更多 →
偶发掉线排查指南:从物理层到应用层的系统方法 2026/9/28 18:55:00

偶发掉线排查指南:从物理层到应用层的系统方法

1. 偶发掉线为什么比彻底断网更难查设备偶发掉线、重启后恢复,这个现象在运维圈里有个很形象的说法叫"幽灵故障"。它最让人头疼的地方在于:你赶到现场的时候,设备已经好了。日志里可能只有一条"link down"然后"link…

阅读更多 →
Sqoop导入HDFS全量覆盖:--delete-target-dir参数机制与最佳实践 2026/9/28 18:54:53

Sqoop导入HDFS全量覆盖:--delete-target-dir参数机制与最佳实践

1. 一次数据覆盖事故引发的思考:Sqoop导入为何总要和“已存在的目录”较劲先说个我自己的经历,挺典型的。早年间我第一次用Sqoop做MySQL到HDFS的全量导入,命令写好后第一次执行很顺利,数据乖乖落进了HDFS的指定目录。等第二天数据…

阅读更多 →
设备偶发掉线排查全攻略:从物理链路到应用层的系统化方法论 2026/9/28 18:54:47

设备偶发掉线排查全攻略:从物理链路到应用层的系统化方法论

1. 先搞清楚"偶发掉线"到底难在哪设备偶发掉线、重启后恢复,这个现象在运维圈里有个很形象的说法叫"幽灵故障"。它最让人头疼的地方不在于故障本身有多复杂,而在于它的不可复现性——你去现场的时候它好了,你一走它又犯了…

阅读更多 →
Jetson黑屏故障排查:从rc.local到systemd的启动链诊断指南 2026/9/28 18:54:47

Jetson黑屏故障排查:从rc.local到systemd的启动链诊断指南

1. 项目概述:Jetson开机黑屏不是“死机”,而是系统启动链上某个环节的静默失败Jetson系列开发板——Nano、Orin Nano、Orin NX、AGX Orin——这几年在边缘AI部署场景里几乎成了标配。但凡做过Jetson项目的人,大概率都经历过那种“通电、风扇转…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉