为什么 AI 应用开发者要掌握 jq
在开发 LLM 应用时,你经常需要处理 API 返回的 JSON 数据——无论是提取choices[0].message.content,还是解析流式响应中的增量内容。虽然 Python 脚本能搞定,但在快速调试、日志分析或管道处理时,jq是效率最高的命令行工具。下面这些技巧能让你少写几十行 Python。
技巧一:用-r输出纯文本,去掉 JSON 引号
原因:默认jq输出 JSON 格式,字符串会带引号,不方便直接保存或重定向。
示例:
echo '{"content":"Hello, AI"}' | jq -r '.content' # 输出:Hello, AI技巧二:用--stream处理流式 JSON(如 SSE 数据)
原因:OpenAI 的流式响应是多个 JSON 对象连续输出,jq默认只能解析单个 JSON。用--stream可以逐条解析。
示例:
curl -N https://api.openai.com/v1/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4","stream":true,"messages":[{"role":"user","content":"Hi"}]}' \ | jq --stream 'select(length==2 and .[0][0]=="choices") | .[1][0].delta.content // empty'这段命令会逐行输出增量文本,方便实时查看。
技巧三:用slurp合并多个 JSON 对象
原因:当你需要把多行 JSON 合并成一个数组时(比如从日志文件分析),slurp可以一次性读取所有输入。
示例:
cat responses.jsonl | jq -s '.' > combined.json这样就把每行一个 JSON 变成了一个 JSON 数组。
技巧四:用map和select批量提取字段
原因:在处理批量结果时,你可能只想提取特定字段或过滤条件。
示例:
cat results.json | jq '[.[] | select(.score > 0.8) | {id, text: .message.content}]'这会输出所有分数大于 0.8 的记录,并只保留id和message.content字段。
技巧五:用@json或@tsv格式化输出
原因:当你想把 JSON 转换成其他格式(如 CSV 或 TSV)用于表格处理时,@json和@tsv非常有用。
示例:
cat data.json | jq -r '[.id, .content] | @tsv' > data.tsv这样就能用 Excel 或awk直接处理了。
小结
掌握这些 jq 技巧后,你可以直接在命令行中快速解析、过滤和转换 LLM 返回的数据,提高调试效率。建议把常用命令写成 shell 别名,比如alias jqstream='jq --stream ...'。