可靠结构化输出引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 官方安装指南,在当前 AI 助手中安装规范名为 @kunlungrowth/llm-structured-output 的技能。
技能介绍
问题:JSON 说翻车就翻车
LLM 返回的自由文本不是稳定接口。字段偶尔缺失、多出一个逗号、外层套着 ``` `json `` 代码块,JSON.parse` 当场抛错。把「请输出 JSON」写进 prompt 只是口头约定,没有任何机制阻止模型在某次采样里输出半截嵌套。下游要么为脏数据堆一摞容错补丁,要么天天重试上游。
工作原理:把约定下沉到解码层
核心思路是受控生成:不再祈求模型「老实点」,而是在解码时按正则或语法限制 token 的选择空间。技能对比三种策略:
Prompt 约定:只靠文字叮嘱,可靠性低,偶发格式错就能击穿下游后处理校验:解析失败再修复或重试,有效但吃重试开销受控生成:格式在生成阶段就被锁进 schema,可靠性高、成本低
落地步骤:
- 先定 schema:字段名、类型、必填项、枚举范围写进代码,而不是口头约定
- 选约束方式:简单格式用 regex 约束;复杂嵌套用 JSON schema / CFG 受控生成
- 剥离包装:统一去掉 ```
`json``` 代码块和前后废话再解析 - 校验兜底:受控生成之后仍跑一遍 schema 校验,双保险
- 失败分类:格式错重试;语义错改 prompt 或样本,避免越重试越偏
适用边界
- 约束太死会压低内容质量——模型可能为合规而编造字段
- 语义错误不是格式错误,盲目重试只会把输出推得更远
- 结构化输出给出的是概率保证而非确定性保证,关键业务数据仍需二次校验与人工抽检
使用场景
- 客服工单与日志要抽取成固定字段和枚举值入库,模型输出格式不稳定导致解析频繁报错
- 在函数调用链路中,把用户自然语言转成可校验的结构,再驱动下游业务逻辑
- 批量解析商品评论或用户反馈时,需要严格约束字段类型和枚举范围,避免脏数据进分析管道
- 多标签分类结果落库前做 schema 校验,把模型自由文本锁成下游能稳定消费的 JSON
适合人员
- LLM 应用开发者:正在接入模型 API,希望下游 JSON 解析不再因缺字段或多逗号而失败
- 数据工程师:负责把模型输出抽取清洗后落库,需要用受控生成限制枚举和必填字段
- 后端工程师:实现函数调用或工具编排,需要把自然语言请求转成固定字段后再执行
- Agent 工程师:构建多步骤业务流,希望统一剥离代码块包装并做校验兜底