vivgrid /
sjq
(当前6 star) 它解决什么问题 把 LLM 流式响应用管道传给 jq: console $ curl -sN "$BASEURL/v1/chat/completions" -d '{"stream":true, …}' | jq jq: parse error: Invalid numeric literal at line 1, column 5 流式响应不是一份 JSON 文档,而是一行行 data: {...} 的 SSE …
vivgrid /
(当前6 star) 它解决什么问题 把 LLM 流式响应用管道传给 jq: console $ curl -sN "$BASEURL/v1/chat/completions" -d '{"stream":true, …}' | jq jq: parse error: Invalid numeric literal at line 1, column 5 流式响应不是一份 JSON 文档,而是一行行 data: {...} 的 SSE …
(当前6 star) 它解决什么问题 把 LLM 流式响应用管道传给 jq: console $ curl -sN "$BASEURL/v1/chat/completions" -d '{"stream":true, …}' | jq jq: parse error: Invalid numeric literal at line 1, column 5 流式响应不是一份 JSON 文档,而是一行行 data: {...} 的 SSE 事件(/v1/responses 还有 event: 行)。sjq 解析 SSE 分帧,每个事件只打印它新增的内容,一行一个增量,外加一行计时:TTFT、总耗时、tokens/秒。 信封占了 98.6%–99.1% 每个 data: 行都在重复 id、model、object 类型和一串 null,真正的新文本只有几个字符(按字节实测;SSE 信封是高度重复的 JSON,token 占比与字节占比基本一致): | 流 | 线上字节 | 生成文本 | 信封占比 | |---|---|---|---| | chat completion,短回答 | 3,590 B | 31 B | 99.1% | | chat completion,推理 + 回答 | 10,446 B | 142 B | 98.6% | | Responses API,推理 + 回答 | 24,726 B | 300 B | 98.8% | Agent Loop 中节省 98.6%–99.1% Token 调试 Agent Loop 时,常常要让 agent 盯着原始流看:某个工具是不是在正确的时间、以正确的参数被调用了。直接把原始 SSE 喂给 agent,98.6%–99.1% 的输入 token 都花在信封上。先用 sjq 过一遍,agent 只读增量——同一份信息,输入 token 省 98.6%–99.1%。 按模型算一笔账 价格来源: tokens)。以 50M input token 的原始流为基准(即 agent 直接读原始 SSE 流): | 模型 | 输入价格 | input token 大小 | 原始成本 | 用 sjq 后成本 | 节省 | |---|---|---|---|---|---| | fable-5-1 | $10.00 | 50M | $500.00 | $4.50–$7.00 | $493.00–$495.50 | | gemini-4-argon | $4.00 | 50M | $200.00 | $1.80–$2.80 | $197.20–$198.20 | | gpt-6.1-sol | $2.00 | 50M | $100.00 | $0.90–$1.40 | $98.60–$99.10 | 节省比例只取决于信封占比(98.6%–99.1%);绝对节省金额随模型输入价格变化。(注:fable-5-1 在价格页上为 claude-fable-5-1。) 安装 sh brew tap vivgrid/tap && brew trust vivgrid/tap # Homebrew 6+ 需要 trust 第三方 tap,一次即可 brew install sjq 或从源码安装 cargo install --git
讨论这个产品