openai-cli 上手:终端里直接调 OpenAI API(不写 SDK 也能跑 Agent)
你有没有这种时刻:
- 就想在服务器上临时跑一次模型调用,还得开个 Python/Node 项目。
- CI 里要用到 LLM,结果一堆依赖装来装去,缓存还老失效。
- 纯命令行党更惨:不是手写
curl,就是自己写一堆脚本拼参数。
现在 OpenAI 官方出了 openai-cli(开源仓库:openai/openai-cli),方向很直接:把 SDK 的能力搬进 shell。你在终端打一行命令,就能调用 Responses API,还能用 OpenAI 托管工具(web 搜索、代码解释器、文件检索、图像生成等)把“Agent 味儿”的流程串起来。
下面咱们按“能直接照抄”的方式讲。用完你会发现:很多小工具脚本可以删了。
openai-cli 能干啥?你关心的重点我给你挑出来
1)Responses API + Cloud Tools:Agent 工作流命令行直通
responses 是核心入口。
- 你可以像调用普通模型一样生成文本
- 也可以把 OpenAI 托管工具塞进一次请求里(web 搜索、代码解释器、文件检索、图像生成等)
这意味着什么?
你在终端里就能做“查资料 → 总结 → 输出结构化结果 → 进入下一步脚本”的流程。很适合放进自动化。
2)输出很 Unix:JSON / YAML / JSONL / pretty / raw
命令行工具最烦的就是输出不好接管道。
openai-cli 直接给你准备了:
json:你要喂给其他程序jsonl:你要写日志、做批处理yaml:人类读着舒服pretty:调试专用raw:只要纯文本
更狠的是:它还内建字段抽取(类似 jq 的感觉),能直接从输出里抠你要的字段,不用你再写一堆解析。
3)图像/语音这些“以前要写 SDK 的活”,一行命令
比如:
- 图像生成 / 编辑
- 语音转录(STT)
- 语音合成(TTS)
以前你可能得写 Python,装依赖,处理文件上传。现在命令行直接搞。
4)管理能力也给了:project / key 更省事
对团队和运维来说,这块很实用:
- 创建 project
- 分发/管理 API key
不用你再去网页点点点,脚本里就能做。
安装:两种主流方式(按你的习惯来)
项目是 Apache 2.0 协议,代码在 GitHub:github.com/openai/openai-cli。
安装方式官方给了两条路:
- Homebrew:macOS 用户大概率顺手
- Go 安装:你机器上有 Go 环境就走这个
具体安装命令以仓库 README 为准(作者也提到会补更多文档)。
核心用法:资源化命令结构,一眼就懂
它的命令长这样:
openai responses create --input "..." --model <model>
你把它理解成:
openai:主命令responses:资源create:动作--input/--model:参数
这个结构的好处是:你不用背一堆“神秘子命令”,看到就知道在干嘛。
立刻能用的示例:复制就跑
下面示例偏“模板”。模型名、参数名以你账户可用的为准。
1)终端里做一次最小调用
openai responses create \
--input "把这段话改成三条要点:……" \
--model <model>
你会得到结构化输出(看你选择的格式)。
2)输出选型:给脚本用 vs 给人看
调试时你可能想看得舒服点:
openai responses create --input "写个 30 字广告文案" --model <model> --format pretty
要接管道给别的程序:
openai responses create --input "给我一个 JSON,包含 title 和 tags" --model <model> --format json
要记日志、批处理:
openai responses create --input "生成 10 条样本,每条一行 JSON" --model <model> --format jsonl
3)内建字段抽取:少写一堆 jq(这点很爽)
典型场景:你只想拿到“最终文本”,别的元数据都不关心。
思路是:
- 让输出保持结构化
- 直接抽字段
- 把抽到的值塞进下一个命令
示例(字段路径以实际输出为准):
openai responses create --input "给我一句话总结" --model <model> --format json \
| openai gjson '...'
如果你平时用 jq,你会立刻明白它的价值:少装一个依赖,少记一套语法,命令更短。
4)文件参数:@file.ext 跟 curl 一个味儿
你在命令行传文件,不用你自己读文件再 base64。
openai responses create \
--input @prompt.txt \
--model <model>
还有个更“硬核”的:二进制内容你可以显式写成 base64 数据源(用 @data:// 这种形式)。适合你在脚本里动态生成二进制,再塞给命令。
把它塞进 CI/CD:适合哪些活?
openai-cli 的最佳打开方式就是“别当成玩具”,当成你流水线的一环。
几个特别实用的场景:
- PR 自动总结:把变更 diff 喂给模型,输出一段 release note
- 生成测试数据:一批 JSONL 直接落盘,给集成测试用
- 日志清洗:把 noisy 的日志分类、提取关键字段
- 客服/工单归类:输入原始工单,输出标准标签 + 优先级
你会发现:以前这些要写一个小服务,现在脚本里一两条命令就行。每天早下班半小时那种。
避坑清单:踩过的人都懂 😅
- 输出格式别选错:要接管道就用
json/jsonl,别用pretty。 - 字段抽取路径对不上:不同模型/不同接口返回结构可能有差异。先用
--format json打印一遍,确认字段路径再抽。 - 二进制/文件传参:文本文件用
@file很省心;二进制别硬塞字符串,走@data://这类显式编码方式更稳。 - 命令行里塞太长 prompt:建议把 prompt 放文件里,版本可控,也方便复用。
这工具适合谁?
- 你爱写 shell 脚本,讨厌为了调个 API 搭项目
- 你在搞 CI/CD,想把 LLM 能力变成一个可重复的步骤
- 你在做 Agent 工作流,想快速把“工具调用”跑通
- 你是运维/团队管理员,想把 project/key 管理脚本化
openai-cli 目前作者在 X 上也说了更像是 small ship / passion project,偏轻量发布。我的建议是:
- 现在就拿来解决“脚本自动化”这类确定性场景
- 复杂业务逻辑该写服务还是写服务
仓库地址:github.com/openai/openai-cli