Agent 实现方法论
From Scratch
学习地图
练习
术语表
← 返回首页
本章教程
本章练习
第 05 章测验
第 05 章测验
对应章节:结构化输出与 JSON 校验
共 7 题,答对率 ≥ 80% 即通过。请完成全部题目后点击「提交」。
Q1
为什么程序不能直接消费模型的自然语言回答?
因为自然语言没有稳定契约:措辞一变,正则与字符串匹配就失守,程序也无法验证自己解析对没对
因为模型回答里总是混着表情符号,导致解析失败
因为 fetch 返回的是二进制数据,需要先解码
因为解析自然语言需要额外付费的 API
Q2
三种约束输出格式的手段里,「直接返回裸 JSON + 严格指令 + 低 temperature」的优势是什么?
输出最干净、提取成本最低、成功率最高
100% 保证输出合法 JSON,校验层可以省掉
只对 OpenAI 模型有效,Anthropic 不支持
提取成本最高,需要复杂的正则
Q3
关于 extractJson 的括号平衡扫描,下列说法正确的是?
扫描到第一个 } 就返回,不关心括号是否配对
扫描必须用字符串状态机跳过字符串字面量(含 \" 与 \\ 转义),否则 {"note":"{ }"} 这类合法 JSON 会被切错边界
JSON 数组 [ ] 也要像花括号一样计数,否则数组里的对象提取不出来
字符串字面量里的 \" 会提前结束字符串状态,导致提取失败
Q4
对 validateAgainstSchema({ action: 'set_reminder', needsTool: 'yes' }, schema)(schema 中 needsTool 声明为 boolean),返回结果是?
{ valid: false, errors: ['needsTool: expected boolean, got string'] }
{ valid: false, errors: ['needsTool: missing required field'] }
{ valid: true, errors: [] }
抛异常:JSON.parse failed
Q5
校验 type: 'object' 时为什么必须显式排除 null 和数组?
因为 JSON.parse 无法解析 null,遇到就抛异常
因为数组不是合法 JSON 值,校验器必须拒绝
因为 typeof null === 'object' 且 typeof [] === 'object',不显式排除的话,null 和数组都能通过 typeof 检查蒙混过关
因为 null 会触发校验器的无限递归
Q6
parseStructured 失败时返回 { ok: false, error } 而不是抛异常,为什么?
因为 throw 语句会消耗更多 token,成本太高
模型输出不合法是常态而非意外;把错误当数据返回,让失败走正常数据流,调用方 if (result.ok) 分支即可
因为浏览器沙箱禁止 throw 关键字
因为错误对象没法被 JSON 序列化
Q7
关于 parseStructured 的注入式 retry 回调,正确的理解是?
retry 回调返回的文本必须是合法 JSON,否则立即抛异常
retry 只在提取失败时被调用,校验失败不重试
retry 每次重试都会重置 maxAttempts,可能无限重试
失败时调用 retry({ stage, error }),回调返回新文本则用新文本重试、返回 undefined 则放弃,最多尝试 maxAttempts 次
提交