知识点深化 · 函数调用
函数调用与工具使用:Schema、参数抽取与错误处理
函数调用就是:大模型不光会说人话,还能「说参数」,让程序替它动手。这一页讲透工具 JSON Schema、参数抽取、缺参反问、错误回喂,以及为什么模型只出请求、程序才真执行。
① 小白第一课怎么学(4 步走,约 60 分钟)
函数调用就是:大模型不光会说人话,还能"说参数",让程序替它动手:
1建立直觉(10 分钟)
读②③:用户说"查下北京天气",模型不瞎编,而是吐出"调天气函数、city=北京"。
2记 schema(15 分钟)
读④:工具名、参数 JSON Schema、模型输出结构化调用。
3跟例题(20 分钟)
精读⑤,看参数抽取和错误处理。
4刷题纠错(15 分钟)
做⑦⑩,错题回⑥。
本课小目标学完你要能:① 说清函数调用的一次往返;② 看懂工具 JSON Schema;③ 处理参数缺失/工具报错。
② 一图看懂:函数调用往返
读法:告诉模型有哪些工具和参数 → 模型决定调哪个、传什么 → 程序执行 → 结果喂回模型生成人话。
③ 本质直觉:让模型把"意图"翻译成"参数"
用户说"帮我查下明天上海的天气"。模型自己不会联网,但它能判断该调用哪个工具、传什么参数。
关键约定:你提前把可用工具的"说明书"(函数名、每个参数叫什么、什么类型、是否必填)告诉模型。模型据此输出一个结构化的调用请求。
程序拿到后真去执行(调天气 API),再把结果交回模型,模型才用自然语言回答用户。
注意:模型本身不执行函数,它只负责"决定和填参数",真正执行在你的代码里。
为什么比自由文本可靠结构化 JSON 输出可以被程序直接解析执行,不靠正则瞎匹配,参数错了也能校验。
④ 完整体系:工具 Schema 与调用流程
一个天气工具的定义示例
{"name":"get_weather",
"description":"查询某城市天气",
"parameters":{"type":"object",
"properties":{"city":{"type":"string","description":"城市名"},
"date":{"type":"string","description":"YYYY-MM-DD"}},
"required":["city"]}}
| 环节 | 做什么 | 易错 |
| 定义工具 | 写 name/description/参数 schema | 描述太笼统 |
| 参数抽取 | 从用户话里抽 city/date | 瞎编必填参数 |
| 执行与校验 | 程序校验后真执行 | 不校验直接跑 |
| 错误处理 | 工具报错回喂模型,让它补救 | 直接把错误抛给用户 |
必填参数缺失怎么办模型应反问用户("请问查哪个城市?"),而不是瞎编一个城市去调用。
⑤ 用法场景与典型例题
例1(参数抽取)用户说"帮我订明天下午三点的会",模型该抽什么?
时间和主题。
① 时间:明天 15:00。
② 主题缺失,需反问"会议主题是什么?"
答案:能抽的抽,缺关键信息就问,别瞎编。
例2(错误处理)天气 API 返回"城市不存在",怎么办?
把错误回喂模型。
① 不要直接把原始报错给用户。
② 把错误信息作为 observation 喂回,让模型礼貌提示"没找到这个城市,请确认"。
答案:错误也要走模型翻译成友好话术。
例3(多工具选择)用户说"顺便帮我把票退了",模型怎么选?
从工具列表里选退票工具。
① 看工具描述哪个匹配"退票"。
② 调退票函数,传入订单号。
答案:模型按工具语义选对应函数。
安全边界危险操作(退票、付款)执行前要二次确认,不能模型说调就调。
⑥ 高频错误诊断(4 条)
错误 1:模型不执行函数,只是"假装"调了真正的执行必须在你的代码里,模型只输出调用请求。别把它当真执行。
错误 2:不校验参数就执行模型可能传错类型/编造城市。程序必须校验参数再调用。
错误 3:工具描述写得太含糊模型不知道何时该用它,会选错工具或乱用。
错误 4:工具报错直接抛给用户应把错误喂回模型,转成可理解的提示和补救建议。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 调用往返 | 问一次函数调用几步 | 定义→决定→执行→回喂 |
| 谁执行 | 问模型还是程序执行 | 程序执行 |
| 错误处理 | 问工具报错怎么办 | 回喂模型补救 |
真题基础1. 函数调用中,真正执行函数的是?
真题中档2. 模型要调用天气函数但用户没说城市,应该?
真题中档3. 工具 API 返回错误时,最好的做法是?
真题拔高4. 关于工具 JSON Schema,正确的是?
⑧ 必背知识点卡
本质:模型把意图翻译成结构化函数调用请求 填参数
四步:定义工具→模型决定调用→程序执行→结果回喂 一次往返
Schema:name + description + 参数 type/required 工具说明书
执行者:函数由你的程序执行,不是模型 模型只出请求
缺参:反问用户,别瞎编 不臆造
错参:程序先校验再执行 先校验
错误:回喂模型转友好提示 不抛堆栈
⑨ 应用输出:做一个"查天气+提醒"小助手
实战场景:用户问"明天出门带伞吗"
① 定义工具:注册 get_weather(city 必填, date 选填)。
② 缺城市时:模型反问"你在哪个城市?"。
③ 拿到城市:模型输出 get_weather(city="南京", date="明天"),程序调 API。
④ 回喂:结果"小雨,22℃"喂回,模型答"明天有小雨,记得带伞穿薄外套"。
⑤ 异常:若 API 报错,模型提示"天气服务暂时不可用,请稍后再试"。
口述"函数调用就是告诉模型有哪些工具和参数,它决定调哪个、传什么,程序真执行,再把结果喂回让它说人话;缺参数要问,出错别直接抛。"
⑩ 分层练习 16 题(基础 6 + 中档 5 + 拔高 5)
▍基础 6 题
基础1函数调用让模型学会干什么?
把意图翻译成结构化函数调用请求。
基础3工具说明书叫什么?
JSON Schema(函数名+参数)。
基础5工具执行后结果给谁?
喂回模型,生成自然语言回答。
▍中档 5 题
中档7为什么要校验模型给的参数?
模型可能传错类型或编造值,先校验再执行才安全。
中档8工具描述写太笼统会怎样?
模型不知道何时用它,选错或乱用工具。
中档9工具报错为什么要回喂模型?
让模型把错误翻译成友好提示和补救建议,而非抛堆栈。
中档10多个工具时模型怎么选?
根据用户意图和工具描述的语义匹配选择。
中档11函数调用相比自由文本输出的好处?
结构化、可被程序直接解析执行、可校验。
▍拔高 5 题
拔高12Function Calling 和 MCP 的关系?
都是工具接线协议,MCP 更标准化、跨工具复用,Function Calling 是单模型接口形态。
拔高13为什么不让模型直接执行代码/调 API?
安全与可控:参数要校验、危险操作要确认、错误要兜底。
拔高14参数抽取错误的典型表现?
把城市名搞错、把时间解析错、或编造不存在的参数。
拔高15为什么返回结果要设计得对模型友好?
模型要基于结果组织回答,返回结构化、关键信息清晰更利于生成。
拔高16多轮工具调用如何保持上下文?
把每轮工具调用和结果都放进对话历史,供后续轮次参考。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① 函数调用:模型只出调用请求,程序才真执行。
② 写清工具名和参数 schema,缺参数就反问别瞎编。
③ 参数先校验,工具出错回喂模型转友好提示。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③④,画调用往返图 | 说清谁执行 |
| 第 2 天 | 背知识点卡 + 基础 1-6 | 基础全对 |
| 第 3 天 | 做中档 7-11 | 懂校验与错误处理 |
| 第 4 天 | 做拔高 12-16 | 懂 MCP 关系 |
| 第 5 天 | 做⑦真题 4 题 | 限时每题 2 分钟 |
| 第 6-7 天 | 合上书口述调用四步 | 不看资料全说对 |
← 返回算法与AI总览