跳到主要内容

3 篇博文 含有标签「json」

查看所有标签

结构化输出并非已解决的问题:生产环境中的 JSON 模式失效模式

· 阅读需 14 分钟
Tian Pan
Software Engineer

你开启了 JSON 模式,你的 LLM 开始返回有效的 JSON,然后你发布了它。三周后,生产环境悄无声息地挂了。JSON 在语法上是有效的。Schema 在技术上也是满足的。但某个字段包含了一个虚构的实体,finish_reason"length" 导致数据负载在 95% 处被静默截断,或者模型对任何人类读起来都感到刺耳的文本分类为 "positive" 情感——而你的下游流水线毫无怨言地吞下了它。

JSON 模式被解决的方式,就像“使用互斥锁(mutex)”解决并发问题一样。原语(primitive)是存在的。但故障模式并不在于你把锁放在哪里。

生产级 LLM 系统中结构化输出的可靠性

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 LLM 管道在测试中达到了 97% 的成功率。但在它发布后,在实际使用的长尾场景中,JSON 解析失败会静默地损坏下游状态,缺失字段会在三步之后导致空指针异常,或者包裹在 Markdown 代码块(fences)中的响应会在凌晨 2 点破坏你的提取逻辑。结构化输出失败是生产级 AI 系统中鲜为人知的可靠性杀手——它们很少出现在基准测试中,但在多步管道中会无形地累积,而且只要你理解了问题的核心,它们是完全可以避免的。

令人不安的事实是:在生产环境中,简单的 JSON 提示词(prompting)失败率高达 15–20%。对于一个每天进行 1000 次 LLM 调用的管道来说,这意味着 150–200 次静默失败。由于这些错误通常不会立即显现——它们作为格式错误的数据而非异常向前传播——它们是检测和调试难度最高的一类 Bug。

生产环境中的结构化输出:让 LLM 返回可靠的 JSON

· 阅读需 10 分钟
Tian Pan
Software Engineer

在生产环境中的某个阶段,每个由 LLM 驱动的应用都需要停止将模型输出视为散文,而开始将其视为数据。当你尝试从语言模型中可靠地提取 JSON 对象——并将其输入到下游的数据库、API 调用或 UI 中时——你会发现这有多少种出错的方式。模型会将 JSON 包裹在 Markdown 栅栏中。它会生成一个有效的对象,但遗漏了必填字段。它在多次调用中格式化日期的格式不一致。它会幻觉出枚举值。这些失败中的任何一个都会静默地破坏下游状态。

结构化输出已经从一个事后才考虑的问题演变成生产级 LLM 系统的一等公民。这篇文章介绍了强制执行结构化输出的三种主要机制、各自失效的场景,以及如何在约束下设计高质模式(Schema)。