L3.11.4illegal intermediate structured states设计研究

结构化输出在流式过程中会出现暂时不合法的中间态

别名: 流式非法中间态 · 半截 JSON · partial parse

概念解释

JSON 正往外冒,花括号还没闭合,下游的表单解析器已经按「一份结构」去吃,当场报错,界面红成失败。再过两秒,括号补上,本来会是合法对象。暂时不合法的中间态(illegal intermediate states)指的是:结构化输出在流式过程中必然经过不能被解析器接受的前缀;把前缀当成品送进下游,失败是协议错误,不是模型不会写。

看起来像不像终稿,是给人看的。这里的接收者是解析器和会被解析器绊倒的人。

机制

自回归按 token 长,合法结构按闭合的树长。任意真前缀在闭合前都可能不是合法 JSON、不是可编译代码、不是对齐的表格。流式若把每个前缀广播给同一条「结果」通道,下游没有「还在长」的类型,只能当损坏的成品。人看见红字,会把暂时的语法失败读成任务失败,提前丢弃或改提示,把本会成功的生成切掉。

增量解析、长度前缀、先出 schema 再填值,都是在给中间态一个合法类型。没有类型,中间态只能是错误。

怎么研究

对 JSON / 表格 / 代码三种结构,比较:每个前缀都送进解析器 vs. 仅在闭合或检查点送入 vs. 增量解析器。因变量:误报失败次数、被误报吓停的比例、终稿合法率。自变量:结构深度、是否在 UI 上显示解析错误。

要把「中间态解析失败」和「终稿非法」分开。前者在流式下是期望事件。

边界

纯散文没有解析器,中间态问题弱,只剩给人看的未完成态。用户明确只要看字、不会把半截贴进编译器时,可以显示原文,但不要提供「作为 JSON 插入」的动作。工具调用协议若规定增量事件,应走增量,而不是伪装成一次完整 payload。中止发生在未闭合时,半截结构的归属是下一层问题。

怎么落地

  • 结构化结果在闭合前不要进入会解析的通道;过程中给人看的是只读前缀,动作为「等待结构完整」。
  • 若要增量消费,使用增量解析器或检查点(每个完整元素),不要用一次性 parse。
  • 中间态的红字应标成「尚未闭合」,不要标成「生成失败」。
  • 验证:把半截 JSON 送到产品实际的下游。若下游报失败且人据此停掉,中间态被当成了终局。等到闭合再送,同一下游应接受。

延伸

  • 同组L3.11.1 流式呈现的价值是提供早期可判断的信号,而不是缩短总时长 · L3.11.2 用户可据早期内容提前中止,中止权是流式的主要收益 · L3.11.3 未完成内容与已完成内容必须在视觉上可区分 · L3.11.5 中止后已生成部分的归属需明确:可用、需重来还是作废
  • 相邻L3.06 流式呈现 · L3.12 生成内容的编辑与接管
  • 站内检索partial JSON · incremental parse · illegal intermediate state

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/L3.11.4