你需要三个值
每个 OpenAI 兼容客户端都需要相同的三个信息。以下是该服务对应的内容。
| 设置 | 值 |
|---|---|
| Base URL | https://api.getcodexapi.com/v1 |
| API 密钥 | 来自 API 密钥页面 的密钥 |
| 模型 | uncensored |
密钥通过 Authorization: Bearer YOUR_KEY 发送。你可以调用的两个接口是 POST /v1/chat/completions 和 GET /v1/models。这是一个独立服务,运行一个开放权重模型,并非 OpenAI 的 Codex,因此不要将 OpenAI 的接口地址或密钥填入同一设置中。
使用 curl 检查连接
在编辑任何应用配置之前,请先在终端中确认密钥和 URL 有效。列出模型是开销最小的检查方式,因为它不需要提示词:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
你应该得到一个包含模型 uncensored 的 JSON 列表。然后发送一个真实的补全请求:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
如果两项调用都成功,后续任何失败的问题都出在你的客户端配置中,而非服务本身。响应头包含 X-Request-Id,如果你需要追踪特定调用,保留它很有用;以及 X-Balance-USD,显示你剩余的预付额度。
Python 配合 OpenAI SDK
官方的 openai 包在客户端构造函数中接受基础 URL。你的代码其他部分无需更改。
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
)
print(resp.choices[0].message.content)
如果你希望将配置与代码分离,SDK 也会从环境变量中读取 OPENAI_BASE_URL 和 OPENAI_API_KEY:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
设置后,OpenAI() 无需参数即可自动获取这些变量。这很方便,因为基于该 SDK 构建的许多第三方工具无需任何代码更改即可继承相同的变量。
Node.js
JavaScript SDK 使用相同的选项名称,拼写为 baseURL。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
启用 stream: true 时,流式输出以服务器发送事件(SSE)形式返回,并在末尾包含用量信息。请注意,流式请求会占用一个并发槽位,直到流结束。如果你放弃流但未关闭连接,它仍会占用该槽位。
具有设置界面的应用
桌面工具和编辑器通常将字段标记为以下三种名称之一:"Base URL"、"API Base" 或 "OpenAI-compatible endpoint"。它们都需要相同的字符串。以下注意事项可节省时间:
- 选择 OpenAI 或“自定义 OpenAI 兼容”提供商类型,而不是特定供应商的类型。
- 如果应用有自由文本框,请手动输入模型名称。
uncensored是确切的 ID。 - 如果应用有“测试连接”按钮,它通常会调用模型列表接口,该 API 支持此接口。
- 某些应用会缓存来自先前提供商的模型列表。如果下拉列表看起来不正确,请删除旧条目并添加新条目。
如需特定编辑器的具体示例,请参阅连接 Cursor 指南,或查看 coding API 页面 了解整体情况。完整参数参考见 API 文档。
连接成功后,将确切值保存在你以后能找到的地方:URL、模型名称和创建密钥的日期。团队后来常因配置副本中仍保留旧值而浪费一小时。在仓库中创建一个包含占位符(而非真实密钥)的共享示例文件,即可避免这种情况。
常见错误及修复方法
URL 变成了 /v1/v1
某些客户端会自动附加 /v1。如果你的请求失败且客户端日志显示路径为 /v1/v1/chat/completions,请从输入的基础 URL 中删除 /v1。反之亦然:不添加它的客户端需要在你的设置中包含它。请求路径的日志可以很快解决这个问题。
你将完整的接口路径放入了基础 URL
基础 URL 以 /v1 结尾。不要在那里输入 /chat/completions。SDK 会为每次调用添加路径。
尾部斜杠或主机名拼写错误
大多数 SDK 容忍尾部斜杠,但一些较旧的工具通过纯拼接构建路径,导致出现双斜杠。如果你看到奇怪的 404 响应,请删除它。
密钥错误,或使用了其他服务的密钥
OpenAI 的密钥在这里无法使用,我们的密钥在其他地方也无法使用。API 密钥错误几乎总是意味着复制粘贴问题,例如缺少字符或末尾有空格。
curl 有效,但你的应用无效
如果 curl 成功而应用在使用相同 URL 和密钥时失败,差异在于环境。检查应用是否在代理后面运行,或在没有出站访问权限的容器中运行,是否读取了来自其他项目的旧环境变量(如残留的 OPENAI_BASE_URL),以及配置文件是否覆盖了你在代码中设置的值。在请求之前打印客户端将要调用的最终 URL,可以在一分钟内解决大多数此类情况。
HTTP 429
这意味着达到了限制。错误代码 rate_limited 表示每分钟请求数,concurrency 表示同时请求过多。完整密钥允许 8 个并发请求和每分钟 300 个请求;试用密钥允许 2 个并发请求和每分钟 60 个请求。在临时过载时,你还会收到带有 Retry-After: 5 头的 429 响应,因此等待五秒后重试。
LangChain 并将 URL 集中管理
基于 OpenAI 客户端构建的框架采用相同的值。在 LangChain 的 OpenAI 集成中,参数命名如下:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
无论使用什么框架,都不要将 URL 分散在你的代码中。将其放在一个环境变量或一个设置文件中,并从中读取。这样,在测试密钥和生产密钥之间切换,或在不同机器之间切换时,只需更改一行。它还能将密钥保留在你的仓库之外:将密钥存储在一个环境变量或密钥管理器中,不要存储在已提交的文件中。
如果你正在寻找 OpenAI 自己的 Codex 产品的接口,这不是。它们的基础 URL 和API 密钥由 OpenAI 记录,因此请遵循它们当前的文档。此页面上的地址属于一个独立的服务,仅接受在此处颁发的密钥。
连接后可发送的内容
该接口支持流式输出、tool calling(tools、tool_choice,结果以 role: "tool" 消息返回)以及通过 response_format: {"type": "json_object"} 实现的 JSON 模式。参数 temperature、top_p、stop、seed 以及惩罚项会透传。上下文窗口为 100,000 token(包含提示词和补全),最大请求体为 8 MB。
它仅支持文本。没有图像或音频生成、没有嵌入(embeddings)也没有微调,因此依赖这些功能的客户端功能在此 Base URL 下无法使用。按 token 计费,输入为每 1M token $0.15,输出为每 1M token $0.50;定价页面 提供了具体示例。
