一、概述
OpenAI Codex CLI是一款开源命令行工具,可将我们最新推理模型的强大功能直接带到您的终端。它充当轻量级的编码代理,可以在您的本地计算机上读取、修改和运行代码,从而帮助您更快地构建功能、修复错误并理解不熟悉的代码。由于 CLI 在本地运行,因此除非您选择共享,否则您的源代码永远不会离开您的环境。
有关更多详细信息,请直接查看 Github repo - https://github.com/openai/codex。
二、主要功能
-
零设置安装– 只需一个
npm install -g @openai/codex
(或codex --upgrade
)即可开始。 -
多模式输入——传递文本、屏幕截图或图表,并让代理相应地生成或编辑代码。
-
丰富的审批工作流程——通过三种不同的模式选择您想要的实际操作方式(请参阅审批模式)。
-
完全在您的终端中运行- 非常适合快速迭代而无需切换上下文。
三、审批模式
模式 |
代理可以做什么 |
何时使用 |
建议(Suggest,默认) |
读取文件。建议编辑和 shell 命令,但在进行更改或执行命令之前需要您的批准。 |
安全探索、代码审查、学习代码库。 |
自动编辑(Auto Edit) |
自动读写文件。运行 shell命令前仍会询问。 |
重构或重复编辑时您需要留意副作用。 |
全自动(Full Auto) |
在当前目录范围内的沙盒、网络禁用环境中自主读取、写入和执行命令。 |
较长的任务,例如,在您喝咖啡时修复损坏的构建或制作原型功能。 |
专业提示:如果目录不受版本控制,Codex 会在进入自动编辑或全自动编辑之前向您发出警告。
四、快速入门
1.安装:npm install -g @openai/codex
2.验证:导出您的 OpenAI API 密钥(export OPENAI_API_KEY="<OAI_KEY>"
)。
3.在建议模式下运行:从项目根目录,输入 codex 并询问例如:“向我解释这个 repo。”
4.切换模式:根据需要添加标志:
-
codex --auto-edit
-
codex --full-auto
5.审核输出:Codex 会以内联方式打印建议的补丁和 Shell 命令。您可以根据需要批准、拒绝或进行调整。
6.过程示例
#下载和安装NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
\. "$HOME/.nvm/nvm.sh"
# 下载安装 Node.js:
nvm install 22
# 验证Node.js版本:
node -v # 输出 "v22.14.0".
nvm current # 输出 "v22.14.0".
# 验证NPM版本
npm -v # Should print "10.9.2".
#全局安装
npm install -g @openai/codex
#设置OpenAI API密钥:
export OPENAI_API_KEY="your-api-key-here"
#设置模型
codex --model gpt-4.1-2025-04-14
#让模型设置永久生效
mkdir -p ~/.codex
echo "model: gpt-4.1-2025-04-14" > ~/.codex/config.yaml
#基本使用方式
#交互式运行
codex
#使用提示作为输入
codex "解释这个代码库给我"
#完全自动模式
codex --approval-mode full-auto "创建一个最精美的待办任务应用"
#高级配置
#Codex 会查找 ~/.codex/ 目录下的配置文件:
# ~/.codex/config.yaml
model: o4-mini # 默认模型
fullAutoErrorMode: ask-user # 或 ignore-and-continue
#自定义指令
# ~/.codex/instructions.md
- 不要用表情符号回应
- 只有当我明确提到时才使用 git 命令
todo list例子(网上的一个) ,下面直接执行
# AI超元域频道原创视频
codex --model gpt-4.1-2025-04-14 --approval-mode full-auto "创建一个现代化的Todo List应用,具有以下功能:
1. 任务管理功能:
- 添加新任务
- 标记任务为完成/未完成
- 编辑现有任务
- 删除任务
- 按优先级分类任务(高、中、低)
- 任务截止日期设置
2. 分类与过滤:
- 创建任务分类(如工作、个人、学习等)
- 按完成状态过滤任务
- 按截止日期排序
- 搜索任务功能
3. 用户体验:
- 响应式设计,适配移动端和桌面端
- 拖放重新排序任务
- 深色/浅色主题切换
- 简洁美观的UI设计
4. 本地存储:
- 使用localStorage保存任务数据
- 导入/导出任务列表功能
使用HTML、CSS和JavaScript实现,不依赖任何后端服务。确保代码结构清晰,UI交互流畅,并提供适当的用户反馈。"
五、常问问题
1、Codex 使用哪些模型?
Codex 默认以o4‑mini为目标平台,以实现快速推理。您可以指定 Responses API 中提供的任何模型,例如codex -m o3
。我们还建议您验证您的开发者帐户,以便在 API 中查看思路链摘要。
2、Codex 会将我的代码上传到 OpenAI 吗?
不会。所有文件读取、写入和命令执行都在本地进行。只有您的提示符、高级上下文和可选的差异摘要会被发送到模型进行生成。
3、如何更改批准模式?
使用适当的标志(--suggest
、--auto-edit
、--full-auto
)启动 Codex 或使用会话中的快捷方式/mode
进行切换。
4、支持哪些平台?
Codex 正式支持 macOS 和 Linux。Windows 支持尚处于实验阶段,可能需要 WSL。
5、代理卡住或超时——我该怎么办?
-
确保您拥有稳定的互联网连接以进行 API 调用。
-
尝试
CTRL‑C
取消当前步骤并要求 Codex 继续。 -
如果使用全自动模式,请确认沙盒有权访问所需的目录。
6、如何更新 Codex?
codex --upgrade
随时运行以获取最新版本。
六、自制典型功能详解
一个用户自制的 OpenAI Codex CLI 的目标是让你能够通过终端与 Codex 模型进行交互,而无需编写额外的 Python 脚本或使用 OpenAI Playground。它可以极大地提高你在开发、实验和快速生成代码片段时的效率。
1、自然语言生成代码
> codex "Create a Python function that reverses a string"
返回:
def reverse_string(s):
return s[::-1]
2、终端命令自动补全 / 转换
> codex "List all files including hidden ones, with details, sorted by size"
返回:
ls -alhS
3、代码重构/优化
> codex optimize main.py
Codex 会分析 main.py
并输出更简洁或更高效的代码版本。
4、代码解释
> codex explain server.js
Codex 会逐行解释 server.js
的逻辑,类似 ChatGPT 的“代码解说模式”。
5、快速生成项目结构
> codex "Initialize a basic Flask app"
返回:
📁 my-flask-app
┣ app.py
┣ templates/
┗ requirements.txt
6、Git 帮助命令
> codex "Undo last commit but keep changes"
返回:
git reset --soft HEAD~1
七、自制的实现方式
1、使用方式一:结合 OpenAI API + Bash
可以创建一个脚本(如 codex.sh
)调用 OpenAI GPT API:
#!/bin/bash
prompt="$*"
curl https://api.openai.com/v1/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"text-davinci-003\",
\"prompt\": \"$prompt\",
\"max_tokens\": 150
}"
然后用法:
./codex.sh "How to write a Python decorator?"
2、使用方式二:GitHub 社区项目
以下是一些社区项目,提供了 Codex CLI 类似的体验:
-
smol-ai/developer - 用自然语言生成整个应用
-
copilot-cli - GitHub Copilot 的 CLI 版本(测试中)
-
gpt-engineer - 从需求生成项目
-
openai-codex-terminal - 微软曾实验性的构建过(已归档)
3、适用场景
场景 | 示例 |
---|---|
写脚本/函数 | “写一个 bash 脚本自动备份文件夹到远程服务器” |
工具命令提示 | “我怎么查看一个 Docker 容器的日志?” |
自动补全 | 只输入 “git rebase ...” 然后让 Codex 猜后面 |
调试代码 | 复制代码片段后让 Codex 帮你找 bug |
创建项目原型 | 一句话创建 Node.js 或 Python 项目 |
4、总结
OpenAI Codex CLI 是一个“以自然语言控制终端/代码的接口”概念的实践,可以极大提升开发效率。虽然目前没有官方标准产品,但可以通过 OpenAI API + Shell 脚本 + 社区工具,自行打造一个属于你的 Codex CLI。
七、 自制完整的 Codex CLI 脚本
1、明确脚本的需求和功能
在开始编写任何代码之前,最重要的是明确你的 Codex CLI 脚本需要完成什么任务。例如:
- 它需要与 OpenAI Codex API 交互吗?如果是,需要哪些功能(代码生成、编辑、补全等)?
- 它需要处理哪些输入(例如,从命令行参数、文件读取)?
- 它需要产生哪些输出(例如,在终端打印、写入文件)?
- 是否有特定的用户交互需求?
- 是否需要处理错误和异常情况?
2、选择编程语言
选择一种你熟悉且适合 CLI 脚本开发的编程语言。一些常见的选择包括:
- Python: 拥有丰富的库(如
argparse
用于命令行参数解析,requests
用于 HTTP 请求),易于学习和使用。 - Bash: 如果你的脚本主要涉及系统操作和调用其他命令行工具,Bash 是一个不错的选择。
- Node.js: 如果你熟悉 JavaScript 并且可能需要处理异步操作或与 Web 服务交互,Node.js 也是一个选项。
在接下来的示例中,我们将使用 Python,因为它在处理 API 交互和文本处理方面非常方便。
3、设置项目结构
一个清晰的项目结构有助于组织你的代码并使其更易于维护。一个基本的结构可能如下所示:
codex_cli/
├── codex_cli.py # 主要脚本文件
├── config.py # 配置文件(例如,API 密钥)
├── utils.py # 实用函数
└── README.md # 项目说明
4、处理命令行参数
CLI 脚本通常需要接受用户通过命令行传递的参数。Python 的 argparse
模块可以帮助你轻松地定义和解析这些参数。
# codex_cli.py
import argparse
def main():
parser = argparse.ArgumentParser(description="A CLI tool for interacting with Codex.")
parser.add_argument("prompt", help="The prompt to send to Codex.")
parser.add_argument("-n", "--num_completions", type=int, default=1, help="Number of completions to generate.")
parser.add_argument("-m", "--model", default="code-davinci-002", help="The Codex model to use.")
parser.add_argument("-o", "--output", help="Optional file to save the output.")
args = parser.parse_args()
print(f"Prompt: {args.prompt}")
print(f"Number of completions: {args.num_completions}")
print(f"Model: {args.model}")
if args.output:
print(f"Output file: {args.output}")
if __name__ == "__main__":
main()
现在,用户可以通过命令行传递 prompt
以及可选的参数 -n
, -m
, 和 -o
。例如:
python codex_cli.py "Write a Python function to calculate factorial" -n 2 -m code-cushman-001 -o output.py
5、配置 API 密钥
为了与 OpenAI Codex API 交互,你需要一个 API 密钥。最好将这个密钥存储在一个配置文件中,而不是硬编码在脚本中。
# config.py
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if not OPENAI_API_KEY:
raise ValueError("OPENAI_API_KEY environment variable not set. Please create a .env file with your API key.")
确保有一个 .env
文件在你的项目根目录下,内容如下:
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
6、与 Codex API 交互
使用 requests
库或其他 HTTP 库向 OpenAI API 发送请求。需要构建正确的请求头和请求体。
# codex_cli.py
import argparse
import requests
import config
import json
def generate_code(prompt, num_completions=1, model="code-davinci-002"):
api_url = "https://api.openai.com/v1/completions"
headers = {
"Authorization": f"Bearer {config.OPENAI_API_KEY}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"model": model,
"n": num_completions,
"max_tokens": 256 # 可以根据需要调整
}
try:
response = requests.post(api_url, headers=headers, json=data)
response.raise_for_status() # 如果请求失败,抛出 HTTPError 异常
return response.json()["choices"]
except requests.exceptions.RequestException as e:
print(f"Error communicating with OpenAI API: {e}")
return None
def main():
parser = argparse.ArgumentParser(description="A CLI tool for interacting with Codex.")
parser.add_argument("prompt", help="The prompt to send to Codex.")
parser.add_argument("-n", "--num_completions", type=int, default=1, help="Number of completions to generate.")
parser.add_argument("-m", "--model", default="code-davinci-002", help="The Codex model to use.")
parser.add_argument("-o", "--output", help="Optional file to save the output.")
args = parser.parse_args()
completions = generate_code(args.prompt, args.num_completions, args.model)
if completions:
if args.output:
with open(args.output, "w") as f:
for i, choice in enumerate(completions):
f.write(f"-- Completion {i+1} --\n")
f.write(choice["text"] + "\n\n")
print(f"Completions saved to {args.output}")
else:
for i, choice in enumerate(completions):
print(f"-- Completion {i+1} --\n")
print(choice["text"])
if __name__ == "__main__":
main()
7、处理输出
脚本需要将 Codex API 返回的结果以用户友好的方式展示出来。这可能包括在终端打印代码、将其保存到文件中,或者进行进一步的处理。
在上面的示例中,如果提供了 -o
参数,生成的代码补全将被写入指定的文件;否则,它们将被打印到终端。
8、错误处理和异常管理
一个健壮的 CLI 脚本应该能够处理各种错误情况,例如 API 请求失败、无效的输入、文件写入错误等。使用 try...except
块来捕获和处理这些异常。
在 generate_code
函数中,我们使用了 response.raise_for_status()
来检查 API 请求是否成功,并在失败时抛出异常。
9、添加实用功能(可选)
根据具体需求,可以添加额外的实用功能,例如:
- 历史记录: 记录用户之前的 prompt 和生成的代码。
- 模板: 允许用户使用预定义的 prompt 模板。
- 代码执行: 如果生成的是可执行代码,可以提供一个选项来运行它(需要谨慎处理安全性)。
- 更复杂的参数处理: 使用更高级的
argparse
功能来支持更复杂的命令行选项。
10、编写文档 (README)
一个好的 README 文件对于让其他用户(或者未来的你)了解如何使用你的脚本至关重要。它应该包括:
- 脚本的简要描述。
- 如何安装和配置(例如,设置 API 密钥)。
- 如何使用脚本的示例。
- 脚本支持的选项和参数。
11、测试
在发布或广泛使用脚本之前,进行彻底的测试非常重要。测试应该覆盖各种场景,包括正常的输入、边缘情况和错误输入。
- 单元测试: 测试脚本中的各个函数是否按预期工作。
- 集成测试: 测试脚本的各个组件是否能协同工作。
- 手动测试: 亲自运行脚本,模拟用户的使用场景。
12、打包和分发(可选)
如果希望其他人也能方便地使用你的脚本,可以考虑将其打包成可执行文件或发布到包管理器(例如,PyPI 对于 Python 包)。
对于 Python 脚本,可以使用工具如 PyInstaller
或 cx_Freeze
将其打包成独立的可执行文件。
13、总结
编写一个完整的 Codex CLI 脚本是一个迭代的过程。从明确需求开始,逐步构建功能,并始终关注用户体验和代码质量。记住处理错误、编写清晰的文档和进行充分的测试是至关重要的步骤。
八、自制相关信息
以下是一个典型的用户自制 OpenAI Codex CLI 可能具备的功能、实现方式以及一些考虑事项:
1、核心功能(可能包含但不限于):
-
代码生成 (Completion):
- 接受文本提示 (Prompt): 允许用户在命令行中输入自然语言的指令或代码片段作为 Codex 的输入。
- 指定生成数量: 可以设置生成多个代码补全结果。
- 选择模型: 允许用户指定要使用的 Codex 模型(例如
code-davinci-002
,code-cushman-001
等)。 - 控制生成参数: 提供选项来调整 Codex API 的各种参数,例如:
max_tokens
: 生成代码的最大长度。temperature
: 控制生成代码的随机性。top_p
: 控制生成代码的核采样概率。stop
: 定义生成代码的停止序列。
- 输出格式化: 以清晰易读的方式在终端显示生成的代码,或者提供保存到文件的选项。
-
代码编辑 (Edit):
- 提供输入代码和指令: 允许用户输入一段现有的代码,并提供一个自然语言的指令来修改这段代码(例如,“将这个 Python 函数中的变量名
x
改为value
”)。 - 指定模型: 选择用于编辑任务的 Codex 模型。
- 控制编辑参数: 类似于代码生成,可以调整
temperature
、top_p
等参数。 - 显示编辑后的代码: 在终端显示修改后的代码,或提供保存选项。
- 提供输入代码和指令: 允许用户输入一段现有的代码,并提供一个自然语言的指令来修改这段代码(例如,“将这个 Python 函数中的变量名
-
代码补全 (Inference):
- 输入部分代码: 允许用户输入一段不完整的代码。
- 模型自动补全: Codex 基于上下文补全剩余的代码。
- 参数控制: 同样可以调整相关参数。
-
配置管理:
- API 密钥管理: 提供安全存储和管理 OpenAI API 密钥的方式(例如,通过环境变量或配置文件)。
- 默认参数设置: 允许用户设置常用的默认模型、生成数量等参数,避免每次都重复输入。
-
实用工具:
- 历史记录: 记录用户之前的 prompt 和生成的代码。
- 模板功能: 允许用户保存和使用常用的 prompt 模板。
- 与其他工具集成: 可能会与其他命令行工具(例如代码格式化工具)集成。
2、实现方式 (以 Python 为例):
正如之前的回答中提到的,一个 Codex CLI 通常会使用编程语言(如 Python)结合相关的库来实现:
argparse
: 用于解析命令行参数,使得用户可以通过命令行传递 prompt、模型名称、生成数量等。requests
: 用于发送 HTTP 请求到 OpenAI Codex API。dotenv
或configparser
: 用于管理 API 密钥和配置信息。json
: 用于处理 API 返回的 JSON 格式数据。
一个简化的 Python 实现示例(仅展示代码生成的核心逻辑):
import argparse
import requests
import json
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
API_URL = "https://api.openai.com/v1/completions"
def generate_code(prompt, model="code-davinci-002", n=1, max_tokens=256, temperature=0.7):
headers = {
"Authorization": f"Bearer {OPENAI_API_KEY}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"model": model,
"n": n,
"max_tokens": max_tokens,
"temperature": temperature
}
try:
response = requests.post(API_URL, headers=headers, json=data)
response.raise_for_status()
return response.json()["choices"]
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None
def main():
parser = argparse.ArgumentParser(description="OpenAI Codex CLI")
parser.add_argument("prompt", help="The prompt for Codex")
parser.add_argument("-n", "--num_completions", type=int, default=1, help="Number of completions to generate")
parser.add_argument("-m", "--model", default="code-davinci-002", help="The Codex model to use")
parser.add_argument("--max_tokens", type=int, default=256, help="Maximum number of tokens to generate")
parser.add_argument("--temperature", type=float, default=0.7, help="Sampling temperature (0.0 - 1.0)")
parser.add_argument("-o", "--output", help="Optional file to save the output")
args = parser.parse_args()
if not OPENAI_API_KEY:
print("Error: OPENAI_API_KEY environment variable not set.")
return
completions = generate_code(
args.prompt,
model=args.model,
n=args.num_completions,
max_tokens=args.max_tokens,
temperature=args.temperature
)
if completions:
if args.output:
with open(args.output, "w") as f:
for i, choice in enumerate(completions):
f.write(f"-- Completion {i+1} --\n")
f.write(choice["text"] + "\n\n")
print(f"Completions saved to {args.output}")
else:
for i, choice in enumerate(completions):
print(f"-- Completion {i+1} --\n")
print(choice["text"])
if __name__ == "__main__":
main()
3、如何使用(基于上述示例):
- 安装依赖:
pip install requests python-dotenv
- 设置 API 密钥: 在项目根目录下创建一个
.env
文件,并添加你的 OpenAI API 密钥:OPENAI_API_KEY=sk-...
- 运行脚本:
或者将结果保存到文件:python your_script_name.py "Write a Python function to calculate the sum of a list" -n 2 -m code-cushman-001 --max_tokens 100
python your_script_name.py "Write a Javascript function to reverse a string" -o reversed_string.js
4、优点:
- 便捷性: 无需编写额外的代码即可快速与 Codex 交互。
- 效率: 可以直接在终端进行实验和生成代码片段。
- 可定制性: 用户可以根据自己的需求定制 CLI 的功能和参数。
- 自动化: 可以将 Codex 集成到 shell 脚本或其他自动化流程中。
5、考虑事项:
- API 费用: 每次调用 Codex API 都会产生费用,需要注意使用情况。
- 安全性: 需要妥善保管 API 密钥。
- 错误处理: 需要实现完善的错误处理机制,以应对 API 调用失败、网络问题等。
- 用户体验: 设计清晰的命令行参数和输出格式,提高用户友好性。
一个用户自制的 OpenAI Codex CLI 是一个强大的工具,它允许开发者和技术人员通过命令行界面直接利用 Codex 的代码生成和编辑能力。通过合理地设计和实现,它可以显著提高与 Codex 交互的效率和便捷性。如果你经常需要使用 Codex,构建一个符合自己工作流程的 CLI 是一个非常有价值的项目。
6、官方与自制的区别
-
官方性与支持:
- 官方 CLI: 由 OpenAI 官方开发、维护和支持。这意味着它更可能与 Codex API 的最新功能保持同步,并且有官方的文档和潜在的技术支持。
- 用户自制 CLI: 由个人或社区开发,维护和支持取决于开发者个人的意愿和能力。可能无法及时跟进 API 的更新,文档和支持也可能有限。
-
安装与配置:
- 官方 CLI: 根据链接中的说明,它可能需要特定的安装步骤,例如使用
pip install openai
并进行特定的配置(例如,通过openai configure
设置 API 密钥)。 - 用户自制 CLI: 安装和配置方式取决于开发者的选择,通常也是使用
pip install
安装依赖库,并通过环境变量或配置文件管理 API 密钥。
- 官方 CLI: 根据链接中的说明,它可能需要特定的安装步骤,例如使用
-
功能集:
- 官方 CLI: 官方工具的功能集通常会紧密围绕 Codex API 的核心能力展开,并经过精心设计以提供最佳的用户体验。从链接的“Getting Started”来看,它似乎专注于代码补全和生成,并提供了模型选择、最大 token 数、温度等参数的控制。
- 用户自制 CLI: 功能集可能更广泛或更狭窄,取决于开发者的具体需求和实现。一些用户可能会添加额外的实用功能,如历史记录、模板等。
-
更新和维护:
- 官方 CLI: OpenAI 会负责官方 CLI 的更新和维护,以修复 bug、添加新功能并兼容 API 的变化。
- 用户自制 CLI: 更新和维护完全取决于开发者。如果开发者停止维护,工具可能会过时或无法使用。
-
信任和安全性:
- 官方 CLI: 使用官方工具通常在安全性方面更有保障,因为它是 OpenAI 官方发布的。
- 用户自制 CLI: 需要用户自行评估代码的安全性,特别是如果从非信任的来源获取。