在开发和测试AI大模型应用时,我们经常需要调用API来生成图片。通常的做法是打开代码编辑器,写一段Python脚本,引入 requests 库,甚至安装官方的SDK。

但如果你只是想快速测试一下提示词(Prompt),或者想要一种极其轻量级的方式,这种做法就显得有些“杀鸡用牛刀”了。

今天给大家分享一个“极客范儿”的操作:完全不写任何代码,仅用一行Shell命令,结合 curljq,直接调用大模型接口并保存生成的图片!
在这里插入图片描述

核心原理

这个操作的核心在于利用Linux/macOS系统自带的强大命令行工具:

  1. curl:用于发送HTTP请求,与大模型API进行通信。
  2. jq:一个轻量级且极其强大的命令行JSON处理器。我们用它来动态构造请求体,并解析返回的JSON数据。
  3. base64:大模型接口通常将图片以Base64编码格式返回,我们使用自带的解码工具将其还原为真实的图片文件。
  4. 管道符 |:将前一个命令的输出作为后一个命令的输入,实现流水线作业。

实战演练

话不多说,直接上命令!你可以直接复制以下代码到你的终端(Terminal)中运行。

# 1. 设置环境变量(请替换为你自己的API地址和密钥)
GATEWAY="https://api.openai.com"
KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
PROMPT="一个穿宇航服的女孩,水彩风格"
OUT="out.png"

# 2. 一行命令执行请求、解析并保存图片
curl -sS "$GATEWAY/v1/responses" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg m "gpt-image-2" --arg p "$PROMPT" '{
        model: $m,
        input: $p,
        tools: [{type: "image_generation"}]
      }')" \
| tee /tmp/resp.json \
| jq -r '.output[] | select(.type=="image_generation_call") | .result' \
| base64 -d > "$OUT"

代码拆解与原理解析

这看似复杂的一长串命令,其实逻辑非常清晰。我们一步步来拆解:

1. 动态构造JSON请求体

jq -n --arg m "gpt-image-2" --arg p "$PROMPT" '{ model: $m, input: $p, tools: [{type: "image_generation"}] }'

这里利用了 jq-n(不读取输入)和 --arg 参数,安全地将我们的 Shell 变量传入,构造出标准的JSON格式请求体。这比使用 echo 拼接字符串要安全和优雅得多,完全不用担心引号转义的问题。

2. 发送API请求

curl -sS "$GATEWAY/v1/responses" -H "..." -H "..." -d "$(上一步构造的JSON)"

使用 curl 发送 POST 请求。-sS 参数让 curl 保持静默,但会在发生错误时显示错误信息。

3. 日志记录(可选但推荐)

| tee /tmp/resp.json

tee 命令非常实用,它像一个三通管道,既把结果输出到文件 /tmp/resp.json 以便我们后续排查问题,又把内容继续传递给下一个命令。

4. 提取Base64图片数据

| jq -r '.output[] | select(.type=="image_generation_call") | .result'

这是 jq 展现真正实力的时刻!它直接深入 JSON 层级结构,过滤出 typeimage_generation_call 的节点,并提取其中的 result 字段(即图片的Base64字符串)。-r 参数表示输出原始字符串,不要带双引号。

5. 解码并保存图片

| base64 -d > "$OUT"

最后,通过系统的 base64 命令(macOS自带 base64 -Dbase64 -d,Linux为 base64 -d)将字符串解码,并重定向保存为真正的图片文件 $OUT

总结

通过 curl + jq 的组合,我们可以极其高效地完成 API 测试和轻量级自动化任务。这种方式不仅免去了配置开发环境的烦恼,还非常适合集成到各种 CI/CD 脚本或自动化工作流中。

如果你觉得这个技巧有用,不妨在你的终端里试一试吧!你平时还有哪些提高效率的“神仙命令行”操作?欢迎在评论区留言交流!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐