OpenAI SDK 怎么接入 OfoxAI?Python、TypeScript 与框架迁移
迁移到 OfoxAI,需要核对 base URL、API Key 和模型 ID。本文给出 Python、TypeScript、流式输出示例,以及 LangChain、LlamaIndex、Vercel AI SDK 的接入检查项。
用 OpenAI SDK 接入 OfoxAI,需要把 base URL 设为 https://api.ofox.run/v1,换成 OfoxAI 的 API Key,并核对当前目录中的模型 ID。SDK 可以保留,但业务用到的端点和参数仍要验证。本文示例使用 Chat Completions,不能据此推断其他接口都能直接迁移。
从 OpenAI 或 OpenRouter 迁移,需要改哪些配置?
核对网关地址、密钥和模型 ID 三项。修改 URL 不会让 OpenAI 或 OpenRouter 的密钥变成 OfoxAI 密钥。
| 配置 | OpenAI 直连 | OpenRouter | OfoxAI |
|---|---|---|---|
| Base URL | SDK 默认值 | https://openrouter.ai/api/v1 | https://api.ofox.run/v1 |
| API Key | OpenAI 密钥 | OpenRouter 密钥 | OfoxAI 密钥 |
| model | OpenAI 模型 ID | OpenRouter 目录 ID | OfoxAI 目录 ID |
地址和参数名可查 OfoxAI SDK 接入文档与 OpenRouter quickstart。从 OpenRouter 迁移时,还要单独检查原有路由参数和模型别名;命名格式相同,不代表行为一致。
Python 怎么配置?
创建客户端时设置 base_url 和 api_key,请求时通过 model 指定模型。在项目虚拟环境中运行 python -m pip install openai 安装官方包;Python 版本要求见 SDK 安装说明。
通过环境变量或密钥管理工具设置 OFOX_API_KEY。可选的 OFOX_MODEL 用于指定模型,下面默认使用 openai/gpt-4o,该 ID 出现在 2026 年 9 月 9 日检查的公开目录中。不要把密钥提交到代码库;仅新建 .env 文件不会自动让 Python 读取它,还需要相应的加载方式。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.ofox.run/v1",
api_key=os.environ["OFOX_API_KEY"],
)
model_id = os.environ.get("OFOX_MODEL", "openai/gpt-4o")
response = client.chat.completions.create(
model=model_id,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content)
使用有余额的账户运行代码会产生生成费用。先核对模型价格和账户权限;模型列表请求成功,不代表已经验证生成权限或实际计费。
TypeScript 怎么配置?
TypeScript 使用 baseURL 和 apiKey。安装官方 openai 包,在服务端 TypeScript 项目中运行;具体环境要求见 SDK 安装说明。密钥应保留在服务端。
import OpenAI from 'openai';
const apiKey = process.env.OFOX_API_KEY;
if (!apiKey) throw new Error('Set OFOX_API_KEY before running this example.');
const client = new OpenAI({
baseURL: 'https://api.ofox.run/v1',
apiKey,
});
async function main() {
const response = await client.chat.completions.create({
model: process.env.OFOX_MODEL ?? 'openai/gpt-4o',
messages: [{ role: 'user', content: 'Say hello in one sentence.' }],
});
console.log(response.choices[0]?.message.content);
}
main().catch((error) => {
console.error(error.message);
process.exitCode = 1;
});
模型 ID 应该怎么填?
从公开模型列表或模型目录复制完整 ID。下表中的条目在 2026 年 9 月 9 日的公开列表中存在,且未标记弃用;后续可用性仍需核对。
| 想使用的模型 | OfoxAI ID |
|---|---|
| GPT-4o | openai/gpt-4o |
| GPT-4o mini | openai/gpt-4o-mini |
| GPT-5.2 | openai/gpt-5.2 |
| Claude Sonnet 4.6 | anthropic/claude-sonnet-4.6 |
GPT-5.2 和 GPT-5.4 mini 是不同模型。从 gpt-5.2 改成 openai/gpt-5.4-mini 会切换模型,并非只加厂商前缀。Claude、Gemini、DeepSeek 等模型也要查当前目录,不能一律添加 openai/。
共用客户端不代表所有模型能力相同。使用 OpenAI 端点时,核对 supported_endpoints、supported_parameters 和输入输出模态;这些字段本身不能证明另一种原生协议是否受支持。
流式输出和工具调用要怎么验证?
流式响应要单独测试,不能用普通文本请求成功代替。沿用上面的 Python 客户端和 model_id,消费增量文本时要允许出现没有 choices 或文本内容的数据块:
stream = client.chat.completions.create(
model=model_id,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
stream=True,
)
try:
for chunk in stream:
if chunk.choices:
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)
finally:
stream.close()
工具调用要验证完整业务流程:提交工具定义、校验模型返回的参数、由应用执行工具,再把结果发回模型。模型返回工具调用,并不等于已经执行了函数。结构化输出也要用业务要求的 schema 校验,不能把 SDK 兼容当作输出正确的保证。
LangChain、LlamaIndex 和 Vercel AI SDK 要注意什么?
选择支持自定义 OpenAI 兼容端点的适配器,并明确业务需要的 API 类型。框架可能在 SDK 之上增加模型名校验、默认参数或厂商专有行为。LangChain 的 ChatOpenAI 以 OpenAI 标准响应字段为目标,不应假定它会保留网关额外返回的推理字段。
| 框架 | 接入检查项 |
|---|---|
| LangChain | 配置 ChatOpenAI 的地址、密钥和完整模型 ID,并核对启用功能所用的端点。见 ChatOpenAI 文档。 |
| LlamaIndex | 第三方兼容 API 可参考 OpenAILike 适配器,核对 api_base、模型和能力设置。 |
| Vercel AI SDK | 为 OpenAI provider 配置 baseURL、apiKey;需要 Chat Completions 时显式选择 .chat(modelId)。见 OpenAI provider 文档。 |
Chat Completions 成功,不代表 Responses、嵌入或图片生成也通过了验证。应按项目实际安装的框架版本,分别测试用到的端点。
切换生产流量前,需要检查什么?
使用实际模型和业务请求测试,并保留经过验证的回滚配置。
- 核对密钥、账户权限、余额和完整模型 ID。
- 测试普通文本生成及业务中的错误处理。
- 按需测试流式输出、取消请求、工具调用和结构化输出。
- 核对请求大小、token 上限、超时和重试设置。
- 对照返回用量与账户账单,把重试请求也纳入检查。
- 先迁移少量流量,观察失败率与延迟,通过后再扩大范围。
首次开通与接入见 OfoxAI 快速开始。费用和团队功能可查 OfoxAI 与 OpenRouter 对比;选哪个网关,与应用能否安全迁移,需要分别评估。
常见问题
- OpenAI SDK 接入 OfoxAI 应该填哪个 base URL?
- 填写 https://api.ofox.run/v1,并使用 OfoxAI 的 API Key。Python 参数名是 base_url,TypeScript 是 baseURL;model 则填写当前 OfoxAI 目录中的完整 ID。
- 迁移后需要改模型名称吗?
- 需要核对完整 ID。例如 gpt-5.2 对应 openai/gpt-5.2,而不是 openai/gpt-5.4-mini。换成另一款模型属于模型迁移,不能当作加前缀处理。
- 能用 OpenAI SDK 调用 Claude 吗?
- 如果所选 Claude 模型支持 OpenAI Chat Completions 端点,可以在同一客户端中使用其 OfoxAI 模型 ID。使用工具调用或结构化输出前,还需核对该模型支持的参数。
- 改完 base URL 就能直接切换生产服务吗?
- 不能据此保证迁移成功。应先在测试环境验证鉴权、模型 ID、参数、流式响应、错误处理和计费,并保留可回滚的配置。
- 这份教程适用于所有 OpenAI 接口吗?
- 本文示例使用 Chat Completions。Responses、嵌入、图片等接口需要根据所选模型和 SDK 版本分别验证。


