极客专属:一行命令搞定AI画图,告别繁琐代码!
在开发和测试AI大模型应用时,我们经常需要调用API来生成图片。通常的做法是打开代码编辑器,写一段Python脚本,引入requests库,甚至安装官方的SDK。
但如果你只是想快速测试一下提示词(Prompt),或者想要一种极其轻量级的方式,这种做法就显得有些“杀鸡用牛刀”了。
今天给大家分享一个“极客范儿”的操作:完全不写任何代码,仅用一行Shell命令,结合curl和jq,直接调用大模型接口并保存生成的图片!
核心原理
这个操作的核心在于利用Linux/macOS系统自带的强大命令行工具:
curl:用于发送HTTP请求,与大模型API进行通信。jq:一个轻量级且极其强大的命令行JSON处理器。我们用它来动态构造请求体,并解析返回的JSON数据。base64:大模型接口通常将图片以Base64编码格式返回,我们使用自带的解码工具将其还原为真实的图片文件。- 管道符
|:将前一个命令的输出作为后一个命令的输入,实现流水线作业。
实战演练
话不多说,直接上命令!你可以直接复制以下代码到你的终端(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--argm"gpt-image-2"--argp"$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--argm"gpt-image-2"--argp"$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.jsontee命令非常实用,它像一个三通管道,既把结果输出到文件/tmp/resp.json以便我们后续排查问题,又把内容继续传递给下一个命令。
4. 提取Base64图片数据
|jq-r'.output[] | select(.type=="image_generation_call") | .result'这是jq展现真正实力的时刻!它直接深入 JSON 层级结构,过滤出type为image_generation_call的节点,并提取其中的result字段(即图片的Base64字符串)。-r参数表示输出原始字符串,不要带双引号。
5. 解码并保存图片
|base64-d>"$OUT"最后,通过系统的base64命令(macOS自带base64 -D或base64 -d,Linux为base64 -d)将字符串解码,并重定向保存为真正的图片文件$OUT。
总结
通过curl+jq的组合,我们可以极其高效地完成 API 测试和轻量级自动化任务。这种方式不仅免去了配置开发环境的烦恼,还非常适合集成到各种 CI/CD 脚本或自动化工作流中。
如果你觉得这个技巧有用,不妨在你的终端里试一试吧!你平时还有哪些提高效率的“神仙命令行”操作?欢迎在评论区留言交流!
