一句话定义:流式增量 JSON 解析(Partial JSON Parsing),是指在一段 JSON 文本还没接收完整、按标准语法甚至还不合法的时候,就按已到达的片段尽量解析出可用的部分结构,让上层程序提前用上这份"半成品数据"。
它解决什么问题
大模型调用工具(tool use,也叫 function calling)时,参数大多以 JSON 形式给出。模型是一个 token 一个 token 往外吐的,流式(streaming)返回的 JSON 往往一段段到达:
```
{"city": "上海", "days": 3, "tags": ["美食
```
如果直接用标准解析器(比如各语言里的 JSON.parse)去读,它会立刻报错——引号没闭合、数组没闭合,语法就是错的。于是界面只能干等到最后一个字符到达才敢渲染,用户盯着转圈等了十几秒,体验很差。
增量解析的做法,是换一个"容错"的扫描器:读到一半时,把没结束的字符串先当作已经结束,把没闭合的数组、对象先自动补上 ]、},于是拼出一棵结构合法、内容不全的对象树。新片段来了,就在这棵树上继续生长:已确定的字段不再变动,新字段陆续出现。上层组件因此能"边吐边渲染"。
打个比方,这像听人报菜名。对方说"宫保鸡丁、水煮……",你不必等他念完整张菜单才去后厨下单,先记下已经听清的,剩下的一边听一边补;等他说完,再回头核对一遍完整菜单。
和相邻概念的区别
| 概念 | 关心什么 | 输入能否暂时不合法 | 典型用途 |
|---|---|---|---|
| 严格 JSON 解析 | 一次拿到完整对象 | 不能 | 收到完整响应后 |
| 流式传输(SSE、chunked) | 把字节分块送达 | 无所谓,它不看内容 | 降低首字延迟 |
| 结构化输出(Structured Output) | 约束模型最终的格式 | 最终必须合法 | 保证下游能解析 |
| 增量 JSON 解析 | 半成品也能先用 | 允许,且是常态 | 边生成边渲染 |
一句话区分:流式传输管"怎么送",结构化输出管"最后长什么样",增量解析管"还没长完时怎么先用"。三者可以叠加。
对实际工作的意义
从业者这边,工具调用的参数可以立刻填进卡片、表单、地图打点或代码预览;用户中途发现方向不对,也能及时打断,省下后面的 token 和时间。
普通人这边,最直观的感受是"内容一行行长出来,而不是卡半天再一次性蹦出来"。搜索结果的标题、行程表里的第二站、代码补全的后半行,都能先出现,等待感明显下降。
需要注意:残缺数字、转义字符、嵌套未闭合时该怎么补,各家库的处理细节并不一致,有些还会在流结束后再做一次严格校验。具体行为以所用库或平台的官方文档为准。
