前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库工具 schema required 可选参数 设计
AIAI Agent工具调用

设计工具 schema 时,必填参数和可选参数的划分依据是什么?

必填与可选参数的划分,核心看缺省时能否安全推断:能则选,不能则必填,并需权衡模型补问与猜测风险。

前端进阶之旅 · 一题精讲更新于 2026.09.05
AI Agent#工具调用
先看核心答案
理解线索

安全推断判据

  1. 可推断上下文或描述能给可靠值
  2. 语义可缺缺失不影响核心执行
  3. 错误代价低猜错可重试或无害

可选需满足:可推断或语义可缺至少其一,且错误代价低。否则应设为必填,并让模型补问。

核心回答

先记住这个答案

缺省参数必须能被安全推断。如果模型依据上下文和描述能可靠补全,且错误代价低,可设为可选;若缺失会导致执行失败或产生不可变副作用,必须设为必填并要求模型补问或终止。同时要意识到,设必填也可能促使能力较弱的模型编造值,所以描述要明确缺失时的处理策略。

  • 判据:缺失时能否安全推断
  • 不能安全推断就必填并让模型补问
  • 必填也可能诱发模型编造值

机制:从模型补全到服务端兜底的双向约束

工具 schema 的 required 不仅约束模型输出格式,其实是在表达“服务端对该参数存在确定性的依赖”。当参数被标记为必填,API 不会强制校验,模型仍可能缺省或编造;当为可选,运行时必须容忍缺失,否则模型一旦漏传就会中断。因此判据本质是:该参数的值能否仅凭上下文或描述安全推断出来。

能被安全推断取决于两个条件:一是模型可从对话历史、工具描述或其他参数推导出唯一合理值;二是推断错误的后果有限,例如查询语言默认设 en 不会引发不可逆动作。若两个条件不成立,就该设为必填,并要求模型在用户未提供时主动澄清,而不是自行猜测。

场景:天气接口的位置参数如何取舍

设一个 get_weather 工具,参数有 location、unit。当用户问“今天天气怎么样”而未给出位置时,若从对话历史能明确得知位置,模型可准确推断;若没有任何线索,模型可能猜测(官方示例曾猜成纽约),而非追问。此时 location 虽语义上必填,但能否设为可选取决于推断的可靠性。若设为必填,模型在缺失时更容易询问;若为可选,模型可能直接猜测。

因此当推断依赖用户输入中的隐含信息时,更稳妥的做法是设为必填,并在描述中指明若用户未给位置应先询问。这迫使模型走澄清路径,而不是冒险猜测。当然,若产品允许使用默认城市或靠 IP 定位,则可改为可选,但要承担猜错导致的错误结果。

边界:模型能力差异与工具语义

该判据在多步推理或低能力模型下容易失效。更强模型(如 Opus)更倾向识别缺失并询问,而能力较弱的模型(如 Sonnet)可能“合理地”编一个值继续执行。此时即使从机制上可推断,也不能保证安全,所以对高影响参数应必填并做服务端校验,防住幻觉值。

另一个易混淆点是可选参数与默认值的关系。可选不代表可无条件省略,有的可选参数依赖另一参数的取值,比如 sort_order 仅在 sort_by 非空时有意义。这类条件可选应写清楚依赖,服务端对缺省后的组合做二次校验;若缺省会进入无意义的中间态,不如将其并入同一必填组或拆开。

回答前,多想一步

容易答错的地方

把语义必填当成 schema 必填
有人认为“调用必须有 location”就该写在 required 里。但若模型总是能从对话明确提取到该值,设为可选反而减少失败;关键在“可推断”,而非语义必需。反例:分页 page 语义可缺但缺省默认第 1 页,可选才合理。
以为必填能完全阻止模型编造
设了 required 并不保证模型一定填真实值。当用户信息不足,模型可能虚构一个看似合理值(如默认城市)。因此不能只靠 schema,还要服务端校验合法性,并在描述中给出“缺失请询问”的指引。
试着用自己的话回答

面试官还会怎么问?

必填参数漏传时,应该报错还是让模型补充?

取决于业务容错与模型重试成本。若工具无副作用或可安全重试,且模型能通过反馈快速修正,可返回结构化错误再让模型补一次;若执行已产生不可逆代价或重试成本高,则应先由服务端校验拦截,要求用户侧澄清。

可选参数在模型省略时,服务端应该用默认值还是跳过?

两种都常见:有默认值且语义合理就用默认;没有默认则跳过并采用“不传即不处理”的语义。关键是 schema 的 description 必须写明默认行为,否则模型以为自己传了而服务端用另一套默认,结果不一致。

工具升级时,如何把可选参数改为必填而尽量不影响存量调用?

先灰度:保留可选并在 description 强调新行为,运行期统计漏传率;同时让服务端对缺省返回可读错误,促使模型迭代。一段时间后再切必填,并在版本变更文档里给出迁移周期。

从一道题,走向一组知识

把知识连起来

工具调用

工具参数设置默认值时有哪些容易被忽视的语义陷阱?

同属「工具调用」专题,接着看 工具 schema 默认值 参数设计 在具体场景中的处理方式。

工具调用

在工具 schema 中用 enum 约束枚举参数为什么比依赖描述文案更可靠?

同属「工具调用」专题,接着看 工具参数 enum 约束 schema 在具体场景中的处理方式。

参考资料

  • Tool use with Claude - Claude Platform Docs

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 机制:从模型补全到服务端兜底的双向约束
  3. 场景:天气接口的位置参数如何取舍
  4. 边界:模型能力差异与工具语义
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑