跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

JSON 与流式事件

解析最终结果和 NDJSON,区分增量与重复 flush,并正确处理失败退出。

--output-format 只适用于打印模式,包括显式 --print,以及非 TTY stdout 或管道 stdin 推断出的打印模式。默认 text 只输出最后一条助手消息。

单个 JSON 结果

agent -p --output-format json "Explain the project structure"

成功时输出一个 JSON 对象并换行;不包含逐条工具事件。主要字段如下:

字段含义
type、subtype成功结果分别为 result、success
is_error成功时为 false
result聚合的完整助手文本
duration_ms总耗时(毫秒)
duration_api_msAPI 耗时,官方当前说明与总耗时相同
session_id会话标识
request_id可选请求标识

失败时进程返回非零退出码并向 stderr 写错误,不保证输出有效 JSON。脚本应先检查退出状态,再解析结果,不能假设每次都有 result 字段。

流式 NDJSON

agent -p --output-format stream-json "Explain the project structure"

每行是一个事件。常见顺序为 system/init、user、assistant、tool_call/started、tool_call/completed,最后成功以 result 结束。默认 assistant 是两次工具调用之间的一整条消息;用 call_id 配对工具起止事件。

流可能因失败提前结束,没有终止 result。此时应结合退出码和 stderr 判断,不能把已收到文本当作任务成功。

字符增量去重

需要更细的实时显示时,增加 --stream-partial-output。同一文本还可能以 flush 再次出现,应按字段区分:

timestamp_msmodel_call_id处理方式
有无新增量,追加 message.content 中的 text
有有工具调用前的重复 flush,跳过
无无轮次末尾的重复 flush,跳过

只需要最终答案时可忽略所有 assistant 事件,读取终止 result 的 result 字段。打印模式不输出 thinking 事件;消费者应容忍新增字段,避免因向后兼容扩展而失败。