第21章:结构化输出与JSON稳定性治理
1. 项目背景
业务场景
某公司的AI工单分类系统已上线两周——客服输入工单描述,AI自动输出分类和紧急程度。技术方案在第9章(Prompt工程)和第12章(RAG)的基础上搭建,核心流程是:工单文本 → Ollama → JSON分类结果 → 自动路由到对应处理组。
但周二早上,自动化路由突然大面积失效。排查发现:AI返回的JSON里多了一个尾部逗号{"category": "技术故障",}——下游的json.loads()直接抛异常。周三下午又出了新问题:AI在JSON外面包了一层Markdown代码块```json {...} ````,解析又失败了。周四晚上更离谱:AI返回的分类结果是"技术故障(疑似硬件问题)"`——带括号的补充说明,导致分类名称匹配不到任何路由规则。
运维老李统计发现:每天5000次AI调用中,约有180次(3.6%)出现结构化输出异常。这个错误率在非关键场景可以接受,但工单路由是生产链路的核心环节。
痛点
- JSON格式不稳定:模型可能输出非法JSON(尾部逗号、单引号、未转义字符),或在JSON外包裹Markdown/解释文字。
- 字段值不可控:即使JSON格式正确,字段值可能超出枚举范围(如
"severity": "super_high"而非约定的"high"),或包含多余的解
