EZAT RouterDocs

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 ProviderOpenAI Compatible
Base URLhttps://api.router.ezat.io/openai/v1
API Key你的 EZAT key
Model IDanthropic/claude-sonnet-5-5,或模型中的其他 id

在 Model Configuration 下,根据模型页面设置 Context Window 和 Max Output Tokens;如果要发送图片,打开 Image Support。

Continue

在 Continue 的 config.yaml 中添加一个模型:

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: false

useResponsesApi: 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:

config.yaml
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_KEY

api_base 保持原样,以 /v1 结尾;LiteLLM 会补上路径的其余部分。

未列出的工具

任何允许设置自定义 OpenAI base URL、API key 和模型名称,并调用 Chat Completions 的工具,用上面三个值应该都能使用。如果某个工具还提供可以自定义 base URL 的 Anthropic provider,你也可以改用它,配合 https://api.router.ezat.io 使用(见 Anthropic Messages API)。

给 AI agent 的说明

  1. Base URL 为 https://api.router.ezat.io/openai/v1,key 来自 EZAT_API_KEY,模型 id 来自 GET https://api.router.ezat.io/openai/v1/models。
  2. 把工具配置为使用 Chat Completions。不要选择 Responses API 模式;只支持 Responses API 的工具(包括 OpenAI 的 Codex CLI)无法使用。
  3. 不要把 key 写进会被提交的文件。工具支持环境变量或 secret 引用时,优先使用它们。
  4. 先用上面的 curl 请求确认,再怀疑工具本身。

本页内容