← 返回算法与AI总览 算法与AI · 知识点深化 · 函数调用与工具使用:Schema、参数抽取与错误处理
知识点深化 · 函数调用

函数调用与工具使用:Schema、参数抽取与错误处理

函数调用就是:大模型不光会说人话,还能「说参数」,让程序替它动手。这一页讲透工具 JSON Schema、参数抽取、缺参反问、错误回喂,以及为什么模型只出请求、程序才真执行。

① 小白第一课怎么学(4 步走,约 60 分钟)

函数调用就是:大模型不光会说人话,还能"说参数",让程序替它动手:

1建立直觉(10 分钟)
读②③:用户说"查下北京天气",模型不瞎编,而是吐出"调天气函数、city=北京"。
2记 schema(15 分钟)
读④:工具名、参数 JSON Schema、模型输出结构化调用。
3跟例题(20 分钟)
精读⑤,看参数抽取和错误处理。
4刷题纠错(15 分钟)
做⑦⑩,错题回⑥。
本课小目标学完你要能:① 说清函数调用的一次往返;② 看懂工具 JSON Schema;③ 处理参数缺失/工具报错。

② 一图看懂:函数调用往返

函数调用 定义工具 名称+参数schema 模型决定调用 输出函数名+参数 程序执行 真去调 API/函数 结果回喂模型 自然语言答复用户 应用:查天气/订日程 让模型动手 易错:参数瞎编 不校验就执行
读法:告诉模型有哪些工具和参数 → 模型决定调哪个、传什么 → 程序执行 → 结果喂回模型生成人话。

③ 本质直觉:让模型把"意图"翻译成"参数"

用户说"帮我查下明天上海的天气"。模型自己不会联网,但它能判断该调用哪个工具、传什么参数。

关键约定:你提前把可用工具的"说明书"(函数名、每个参数叫什么、什么类型、是否必填)告诉模型。模型据此输出一个结构化的调用请求。

程序拿到后真去执行(调天气 API),再把结果交回模型,模型才用自然语言回答用户。

注意:模型本身不执行函数,它只负责"决定和填参数",真正执行在你的代码里。

用户:"查明天上海天气" 模型输出: get_weather(city="上海") 程序执行 → 结果回喂 → 人话回答
为什么比自由文本可靠结构化 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函数调用让模型学会干什么?
把意图翻译成结构化函数调用请求。
基础2真正执行函数的是谁?
你的程序。
基础3工具说明书叫什么?
JSON Schema(函数名+参数)。
基础4缺必填参数模型该?
反问用户,别瞎编。
基础5工具执行后结果给谁?
喂回模型,生成自然语言回答。
基础6危险操作执行前要?
二次确认。

▍中档 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总览