OpenAI 格式的工具
把可以自定义 OpenAI base URL 的工具和库(Cline、Continue、LangChain、Vercel AI SDK、LiteLLM)指向 EZAT Router。
何时阅读本页
你使用的工具或库支持 OpenAI 的 API 格式,并允许修改 base URL。本页先给出所有这类工具都需要的三个值,再给出我们验证过的工具的设置。在你自己的代码中使用,见 OpenAI 兼容 API。
三个值
| 设置 | 值 |
|---|---|
| Base URL(也叫 API base、endpoint 或 server URL) | https://api.router.ezat.io/openai/v1 |
| API key | 你的 EZAT key(ezat_sk_…) |
| 模型 | 模型中的一个 id,例如 anthropic/claude-sonnet-5-5 |
- Base URL 以
/v1结尾。工具会自己在后面加上/chat/completions。 - 工具必须使用 Chat Completions。EZAT 还没有 OpenAI 的 Responses API,所以只调用
/responses的工具会收到404。OpenAI 的 Codex CLI 就是这样:它的自定义 provider 只支持 Responses API。 - 如果工具要求填写模型的上下文窗口或输出上限:从模型页面获取。
- 工具调用、流式输出和图片都可用。EZAT 上没有 embeddings、图片生成和音频。
配置工具之前,可以先用这三个值列出模型,检查它们是否正确:
curl --fail-with-body https://api.router.ezat.io/openai/v1/models \
-H "Authorization: Bearer $EZAT_API_KEY"Cline
在编辑器的 Cline 面板中打开设置(齿轮图标):
| 字段 | 值 |
|---|---|
| API Provider | OpenAI Compatible |
| Base URL | https://api.router.ezat.io/openai/v1 |
| API Key | 你的 EZAT key |
| Model ID | anthropic/claude-sonnet-5-5,或模型中的其他 id |
在 Model Configuration 下,根据模型页面设置 Context Window 和 Max Output Tokens;如果要发送图片,打开 Image Support。
Continue
在 Continue 的 config.yaml 中添加一个模型:
models:
- name: EZAT Router
provider: openai
model: anthropic/claude-sonnet-5-5
apiBase: https://api.router.ezat.io/openai/v1
apiKey: ezat_sk_…
useResponsesApi: falseuseResponsesApi: false 让 Continue 使用 Chat Completions。含有 key 的文件不要纳入版本控制。
LangChain
Python,使用 langchain-openai 包:
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="anthropic/claude-sonnet-5-5",
base_url="https://api.router.ezat.io/openai/v1",
api_key=os.environ["EZAT_API_KEY"],
)
print(llm.invoke("Say hello in five words.").content)- 不要设置
use_responses_api=True,并避免使用会让ChatOpenAI切换到 Responses API 的功能。 - LangChain 的文档说明,
ChatOpenAI面向的是 OpenAI 自己的 API,不会保留其他提供方返回的非标准响应字段。回答、工具调用和标准 token 数都属于标准字段。
Vercel AI SDK
使用 @ai-sdk/openai 时,用 EZAT 的 base URL 创建一个 provider,并使用 .chat():provider 默认的模型工厂调用的是 Responses API,而 .chat() 调用的是 Chat Completions。
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const ezat = createOpenAI({
baseURL: "https://api.router.ezat.io/openai/v1",
apiKey: process.env.EZAT_API_KEY,
});
const { text } = await generateText({
model: ezat.chat("anthropic/claude-sonnet-5-5"),
prompt: "Say hello in five words.",
});
console.log(text);@ai-sdk/openai-compatible 也可以使用,并且始终使用 Chat Completions。它的 includeUsage: true 选项会在流中请求 token 数:
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
const ezat = createOpenAICompatible({
name: "ezat",
baseURL: "https://api.router.ezat.io/openai/v1",
apiKey: process.env.EZAT_API_KEY,
includeUsage: true,
});
const model = ezat("anthropic/claude-sonnet-5-5");LiteLLM
在 Python SDK 中,给模型加上 openai/ 前缀,让 LiteLLM 把 EZAT 当作 OpenAI 兼容端点,并把 base URL 作为 api_base 传入:
import os
from litellm import completion
response = completion(
model="openai/anthropic/claude-sonnet-5-5",
api_base="https://api.router.ezat.io/openai/v1",
api_key=os.environ["EZAT_API_KEY"],
messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(response.choices[0].message.content)在 LiteLLM proxy 的 config.yaml 中,os.environ/… 会从环境变量读取 key:
model_list:
- model_name: ezat-default
litellm_params:
model: openai/anthropic/claude-sonnet-5-5
api_base: https://api.router.ezat.io/openai/v1
api_key: os.environ/EZAT_API_KEYapi_base 保持原样,以 /v1 结尾;LiteLLM 会补上路径的其余部分。
未列出的工具
任何允许设置自定义 OpenAI base URL、API key 和模型名称,并调用 Chat Completions 的工具,用上面三个值应该都能使用。如果某个工具还提供可以自定义 base URL 的 Anthropic provider,你也可以改用它,配合 https://api.router.ezat.io 使用(见 Anthropic Messages API)。
给 AI agent 的说明
- Base URL 为
https://api.router.ezat.io/openai/v1,key 来自EZAT_API_KEY,模型 id 来自GET https://api.router.ezat.io/openai/v1/models。 - 把工具配置为使用 Chat Completions。不要选择 Responses API 模式;只支持 Responses API 的工具(包括 OpenAI 的 Codex CLI)无法使用。
- 不要把 key 写进会被提交的文件。工具支持环境变量或 secret 引用时,优先使用它们。
- 先用上面的 curl 请求确认,再怀疑工具本身。