流式返回与格式配合
定义
流式结构化输出的关键不是押注某一种文本格式,而是定义可增量消费的帧、字段或事件,并规定半包、取消、校验失败和最终提交怎样处理。
说明
Markdown 可以边生成边展示,但不适合在未完成时驱动业务动作;完整 JSON 对象便于最终校验,却可能在闭合前无法用普通解析器读取。两者解决的是不同问题。
需要边到边处理时,可以采用 JSON Lines、SSE 事件、长度前缀帧、增量 JSON 解析,或在明确协议下使用 XML 标签。每个可见片段都应区分“暂存中”和“已确认”。
程序消费时应在最终提交前做 schema 校验,并为连接中断保留明确状态。界面可以先展示草稿,但支付、写数据库等副作用只能使用验证完成的数据。
边界与误区
为什么完整 JSON 常要等到末尾再校验: 对象在括号和字符串闭合前可能不是合法 JSON;若要提前消费,需要专门的分帧协议或增量解析器。
XML 是否天然比 JSON 更适合流式: 不一定。结束标签能提供边界,但仍要处理转义、嵌套和截断;选择取决于既有协议、模型表现与解析器。
对用户来说,格式差异会影响什么: 影响首屏反馈、错误恢复和哪些字段能安全驱动界面。流式展示可以提前,最终业务提交仍需完整校验。