ModelSiteAPI

SDK、框架与客户端

用官方 SDK、常见框架、编程助手和聊天客户端调用 ModelSite:配置项、对应端点和每一项的验证状态

ModelSite 提供两个入口,用对应的官方 SDK 即可,无需专用客户端:

格式SDKbase_url实际请求路径鉴权头
OpenAIopenaihttps://api.modelsite.ai/v1/v1/chat/completions、/v1/responses、/v1/embeddingsAuthorization: Bearer
Anthropicanthropic / @anthropic-ai/sdkhttps://api.modelsite.ai(不带 /v1)/v1/messagesAuthorization: Bearer

文本模型入口只从 Authorization: Bearer 读取 Key,不读 x-api-key。这决定了 Anthropic 协议的客户端必须走 Bearer(auth_token、ANTHROPIC_AUTH_TOKEN),见下文。以 /api/v1、/api/v3、/v2 开头的视频和图像入口还额外接受 X-API-KEY,这是 ComfyUI 自带 API 节点发送的头;同时带了两种头时以 Authorization: Bearer 为准。见在 ComfyUI 中使用 ModelSite。

验证状态说明

下面每个条目都标一档验证状态,只有这三档:

状态含义
已核对官方文档该工具官方文档里有自定义 base URL 或 OpenAI 兼容服务商的配置项,条目里附文档地址。我们没有运行过该工具。
已用桩服务实测请求在隔离环境装了该工具,让它请求本机的桩服务(不是 ModelSite,不产生费用),记录它实际发出的路径、鉴权头和请求体字段。条目里写明测试的版本。
未验证只有间接依据,或平台一侧是否满足该工具的协议要求无法从代码判断。条目里写明原因。

桩服务只能证明客户端发出了什么,不能证明 ModelSite 的每个上游模型都能处理这些请求。条目里的「限制」一栏写的是我们读代码或官方文档得到的、使用时要注意的差异。没有依据的工具不收录,见未收录的工具。

API Key

新 Key 格式为 sk-ms- 加 64 位十六进制字符,共 70 个字符;早期的 sk-relay- 开头旧 Key 仍可用。下面所有示例都从环境变量 MODELSITE_API_KEY 读取,不要把真实 Key 写进源码:

export MODELSITE_API_KEY="sk-ms-xxxxxxxx"   # 换成控制台里复制的完整 Key

OpenAI SDK 只读环境变量 OPENAI_API_KEY,Anthropic SDK 读 ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN,都不会自动读取 MODELSITE_API_KEY。下面的示例因此都显式把它传给 SDK 或工具。

官方 SDK

OpenAI SDK

  • 做什么:用官方 OpenAI SDK 调用 Chat Completions、Responses、Embeddings。
  • 需要填:base_url = https://api.modelsite.ai/v1;Key = Authorization: Bearer;模型 = 平台模型 ID,如 glm-5.3-flash。
  • 对应端点:/v1/chat/completions、/v1/responses、/v1/embeddings。
  • 验证状态:已用桩服务实测请求(OpenAI Python 2.54.0、Node 6.49.0)。
  • 限制:/v1/responses 在模型的上游不原生支持 Responses 时走转换路径,与 OpenAI 官方存在差异,详见 Codex CLI 条目的限制。
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.modelsite.ai/v1",
    api_key=os.environ["MODELSITE_API_KEY"],
)

# 非流式
resp = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

# 流式
stream = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[{"role": "user", "content": "你好"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

同一个 client 还可以调用 client.responses.create(...)(/v1/responses)和 client.embeddings.create(...)(/v1/embeddings),参数见 Responses 与 Embeddings。

Anthropic SDK

  • 做什么:用官方 Anthropic SDK 调用 Messages。
  • 需要填:base_url = https://api.modelsite.ai(不带 /v1);Key 传给 auth_token / authToken,不是 api_key;模型 = 平台模型 ID。
  • 对应端点:/v1/messages。
  • 验证状态:已用桩服务实测请求(Anthropic Python 1.15.0、Node 0.135.0)。用 api_key 时 Key 只出现在 x-api-key 头里,平台返回 401。
import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.modelsite.ai",            # 不带 /v1,SDK 自己拼 /v1/messages
    auth_token=os.environ["MODELSITE_API_KEY"],     # 发 Authorization: Bearer
)

# 非流式
msg = client.messages.create(
    model="glm-5.3-flash",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}],
)
print(msg.content[0].text)

# 流式
with client.messages.stream(
    model="glm-5.3-flash",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="")

SDK 会自动带上 anthropic-version: 2023-06-01;如果你自己设置了 anthropic-beta,平台会转发给上游。

框架

LangChain(Python)

  • 做什么:用 langchain-openai 的 ChatOpenAI 调用 Chat Completions。
  • 需要填:base_url = https://api.modelsite.ai/v1;api_key = Key;model = 平台模型 ID。
  • 对应端点:/v1/chat/completions(非流式与流式)。
  • 验证状态:已用桩服务实测请求(langchain-openai 1.7.2)。base_url 与 api_key 参数见 LangChain 官方文档,未传 base_url 时依次读 OPENAI_API_BASE、OPENAI_BASE_URL。
  • 限制:官方文档说明 ChatOpenAI 只面向 OpenAI 官方规范,第三方模型返回的非标准字段(例如 reasoning_content)不会被提取或保留。需要读取思考内容时,直接用 OpenAI SDK,或改用该模型的专用集成包。
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://api.modelsite.ai/v1",
    api_key=os.environ["MODELSITE_API_KEY"],
    model="glm-5.3-flash",
)
print(llm.invoke("你好").content)

LlamaIndex(Python)

  • 做什么:用 llama-index-llms-openai-like 的 OpenAILike 调用任意 OpenAI 兼容的 Chat Completions 服务。
  • 需要填:api_base = https://api.modelsite.ai/v1;api_key = Key;model = 平台模型 ID;is_chat_model=True。
  • 对应端点:/v1/chat/completions(chat 与 stream_chat)。
  • 验证状态:已用桩服务实测请求(llama-index-llms-openai-like 0.8.1)。
  • 限制:我们只测了 chat 与 stream_chat 两个调用;Embedding、工具调用等没有测。
import os
from llama_index.llms.openai_like import OpenAILike
from llama_index.core.llms import ChatMessage

llm = OpenAILike(
    model="glm-5.3-flash",
    api_base="https://api.modelsite.ai/v1",
    api_key=os.environ["MODELSITE_API_KEY"],
    is_chat_model=True,
)
print(llm.chat([ChatMessage(role="user", content="你好")]).message.content)

Vercel AI SDK(TypeScript)

  • 做什么:用 ai 加 @ai-sdk/openai-compatible(或 @ai-sdk/anthropic)调用。
  • 需要填:baseURL = https://api.modelsite.ai/v1;apiKey(OpenAI 兼容)或 authToken(Anthropic)= Key;模型 = 平台模型 ID。
  • 对应端点:createOpenAICompatible(...).chatModel() 与 createOpenAI(...).chat() 走 /v1/chat/completions;@ai-sdk/anthropic 走 /v1/messages。
  • 验证状态:已用桩服务实测请求(ai 6.0.309、@ai-sdk/openai-compatible 2.0.85、@ai-sdk/openai 3.0.130、@ai-sdk/anthropic 3.0.133)。
  • 限制:
    • createOpenAI(...)(model) 默认请求的是 /v1/responses,不是 Chat Completions。要走 Chat Completions,用 .chat(model)。
    • @ai-sdk/anthropic 的 baseURL 要带 /v1(和 Anthropic 官方 SDK 相反,实测它直接拼 /messages)。
    • @ai-sdk/anthropic 传 apiKey 时 Key 在 x-api-key 头里,平台不读,必须传 authToken。
import { generateText } from 'ai'
import { createOpenAICompatible } from '@ai-sdk/openai-compatible'

const modelsite = createOpenAICompatible({
  name: 'modelsite',
  baseURL: 'https://api.modelsite.ai/v1',
  apiKey: process.env.MODELSITE_API_KEY,
})

const { text } = await generateText({
  model: modelsite.chatModel('glm-5.3-flash'),
  prompt: '你好',
})

编程助手

Claude Code

  • 做什么:Anthropic 的终端编程助手,走 Anthropic Messages 协议。
  • 需要填:ANTHROPIC_BASE_URL = https://api.modelsite.ai;ANTHROPIC_AUTH_TOKEN = Key;ANTHROPIC_MODEL = 平台模型 ID。
  • 对应端点:/v1/messages(流式)。
  • 验证状态:已用桩服务实测请求(Claude Code 2.1.303)。配置项见 Claude Code 官方网关文档。
export ANTHROPIC_BASE_URL="https://api.modelsite.ai"
export ANTHROPIC_AUTH_TOKEN="$MODELSITE_API_KEY"
export ANTHROPIC_MODEL="glm-5.3-flash"
claude

实测它发出的请求:

  • POST /v1/messages?beta=true,Authorization: Bearer,stream: true,带 20 个工具定义。网关只按路径转发,会忽略 ?beta=true。
  • 请求体里有 thinking(实测值 {"type":"adaptive","display":"omitted"})、context_management(clear_thinking_20251015)、output_config(effort)。请求头带多个 anthropic-beta 值。
  • 这次只发出了一个 /v1/messages 请求,没有请求 count_tokens。

限制:

  • 必须用 ANTHROPIC_AUTH_TOKEN。官方文档说明 ANTHROPIC_API_KEY 以 x-api-key 发送,平台不读,返回 401;apiKeyHelper 会同时发两个头,也可用。
  • GLM 模型与 medium 强度。 glm-5.3 和 glm-5.3-flash 支持的强度是 low、high、max;当强度设为 medium 时,请求按 high 执行。其他对话模型按你发送的强度执行。细节和一次实测见 Claude Code。
  • 对不认识的模型 ID,Claude Code 会提示并按 200k 上下文窗口处理,修正方法见 官方 model-config 页面。
  • 官方文档说明 opus / sonnet / haiku 别名默认解析为 Anthropic 官方模型 ID,可以用 ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL 改指向平台模型 ID。
  • 平台在解析请求时不会因为不认识的顶层字段拒绝请求,这些字段会被保留;对不走 Anthropic 原生端点的模型,它们会被带到上游。各模型的上游是否接受 context_management 等字段,我们没有逐个验证。 如果返回 400 且提示 Extra inputs are not permitted 之类,按官方排障表设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。
  • 工具调用与多轮对话没有端到端实测(桩服务只返回文本)。

Codex CLI

  • 做什么:OpenAI 的终端编程助手,只走 Responses 协议。
  • 需要填:~/.codex/config.toml 里自定义 model_providers:base_url = https://api.modelsite.ai/v1,env_key 指向放 Key 的环境变量,wire_api = "responses";model = 平台模型 ID。
  • 对应端点:/v1/responses(流式)。
  • 验证状态:已用桩服务实测请求(codex-cli 0.142.2)。model_providers 字段见 Codex 官方配置文档。平台一侧有已知差异,见下方限制。
model = "glm-5.3-flash"
model_provider = "modelsite"

[model_providers.modelsite]
name = "ModelSite"
base_url = "https://api.modelsite.ai/v1"
env_key = "MODELSITE_API_KEY"
wire_api = "responses"

实测它发出的请求:

  • POST /v1/responses,Authorization: Bearer,stream: true,store: false。
  • 工具类型有 function、namespace、web_search;请求体里还有 include、prompt_cache_key、client_metadata。
  • MODELSITE_API_KEY 没设置时,Codex 本地直接报 Missing environment variable,不会发请求。
  • 对平台模型 ID,Codex 提示 Model metadata ... not found 并使用兜底元数据。OpenRouter 的 Codex 指南也记录了同样的提示。

限制:

  • Codex 只走 /v1/responses。当模型的上游不原生支持 Responses 时,平台走转换路径,与 OpenAI 官方不一致:转换路径已按官方对齐:流式事件带 sequence_number,response.created / in_progress / completed 回显请求字段,reasoning 用官方的 summary 结构(流式与非流式一致),output 里 reasoning 在前,流式与非流式的 id 都以 resp_ 开头。仍有差异:function_call 项的 id 与 call_id 相同;拒答内容块用 text 而不是 refusal;回显的 store、truncation、previous_response_id 等只是回显,转换路径不执行。这些对齐有单元测试(官方事件序列)覆盖,Codex 是否能正确解析,我们仍没有对真实平台做端到端验证。
  • 转换路径下,请求里的 store、include、previous_response_id 等 Responses 专有字段没有 Chat Completions 对应项,会被丢弃。
  • 按代码,转换路径把 function 和 custom 工具转成 Chat Completions 的函数工具,把 web_search 转成 web_search_options,对 namespace 类型没有转换分支。web_search_options 上游是否接受,我们没有验证;实测在 config.toml 里设 web_search = "disabled"(DeepSeek 的 Codex 指南也用这个键)后,请求里不再带 web_search 工具。

OpenCode

  • 做什么:开源终端编程助手,通过 opencode.json 的自定义服务商接入 OpenAI 兼容端点。
  • 需要填:npm = @ai-sdk/openai-compatible;options.baseURL = https://api.modelsite.ai/v1;options.apiKey = Key;models 里列出平台模型 ID。
  • 对应端点:/v1/chat/completions(流式,带 tools)。
  • 验证状态:已用桩服务实测请求(OpenCode 1.2.27)。配置项见 OpenCode 官方服务商文档。
  • 限制:官方文档说明 @ai-sdk/openai-compatible 用于 /v1/chat/completions;模型走 /v1/responses 时要换 @ai-sdk/openai,此时适用 Codex 条目里关于 Responses 的限制。
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "modelsite": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "ModelSite",
      "options": {
        "baseURL": "https://api.modelsite.ai/v1",
        "apiKey": "{env:MODELSITE_API_KEY}"
      },
      "models": {
        "glm-5.3-flash": { "name": "GLM 5.3 Flash" }
      }
    }
  }
}

运行时用 opencode run -m modelsite/glm-5.3-flash "你好"。

Aider

  • 做什么:终端里的 git 结对编程工具。
  • 需要填:OPENAI_API_BASE = https://api.modelsite.ai/v1;OPENAI_API_KEY = Key;--model openai/ 加平台模型 ID。
  • 对应端点:/v1/chat/completions(流式)。
  • 验证状态:已用桩服务实测请求(Aider 0.86.2)。配置项见 Aider 官方文档。
  • 限制:模型名必须加 openai/ 前缀;官方文档说明 Aider 对不认识的模型会给出警告。Aider 读的是 OPENAI_API_KEY,所以这里要把 Key 导出到这个变量。
export OPENAI_API_BASE="https://api.modelsite.ai/v1"
export OPENAI_API_KEY="$MODELSITE_API_KEY"
aider --model openai/glm-5.3-flash

Cline

  • 做什么:VS Code 里的编程助手,用 OpenAI Compatible 服务商接入。
  • 需要填:API Provider = OpenAI Compatible;Base URL = https://api.modelsite.ai/v1;API Key = Key;Model ID = 平台模型 ID。
  • 对应端点:OpenAI 兼容的 Chat Completions,即 /v1/chat/completions。
  • 验证状态:已核对官方文档:Cline OpenAI Compatible 配置,其中 Base URL、API Key、Model ID 三项与上面一致;我们没有运行过 Cline,它具体请求哪个路径没有实测。
  • 限制:官方文档提示 Base URL 不能是 https://api.openai.com/v1,模型 ID 各服务商不同;上下文窗口、最大输出、是否支持工具调用等是可选的「Model Configuration」,需要按平台模型的实际能力自己填。

Continue

  • 做什么:VS Code / JetBrains 的编程助手与 CLI。
  • 需要填:config.yaml 里 models 的一项:provider: openai,apiBase: https://api.modelsite.ai/v1,apiKey = Key,model = 平台模型 ID。
  • 对应端点:provider: openai 默认走 Chat Completions,即 /v1/chat/completions。
  • 验证状态:已核对官方文档:Continue OpenAI provider,其中 OpenAI 兼容服务改 apiBase 的示例与上面一致;我们没有运行过 Continue。
  • 限制:官方文档说明 Continue 对 o 系列和 gpt-5 模型默认走 /responses,可用 useResponsesApi: false 关闭;平台模型 ID 不属于这两类,我们没有验证它对其他模型名的路径选择。
models:
  - name: glm-5.3-flash
    provider: openai
    model: glm-5.3-flash
    apiBase: https://api.modelsite.ai/v1
    apiKey: sk-ms-xxxxxxxx

聊天客户端

Cherry Studio

  • 做什么:桌面聊天客户端,在「自定义服务商」里接入 OpenAI 兼容端点。
  • 需要填:提供商类型 = OpenAI;API 地址 = https://api.modelsite.ai(客户端自动补 /v1/chat/completions),或 https://api.modelsite.ai/v1/chat/completions#;API 密钥 = Key;模型 = 手动添加模型列表里的模型 ID。
  • 对应端点:/v1/chat/completions。
  • 验证状态:已核对官方文档:Cherry Studio 服务商配置,其中「填根地址会自动补 /v1/chat/completions」「以 # 结尾则只用你填的地址」两条与上面一致;我们没有在客户端里实机点过。

Open WebUI

  • 做什么:自托管的网页聊天界面,在「连接」里添加 OpenAI 兼容服务。
  • 需要填:设置 > 管理员 > 连接 > 添加连接:URL = https://api.modelsite.ai/v1;API Key = Key;模型 ID 白名单按需填。
  • 对应端点:/v1/chat/completions;「验证连接」会请求 GET /v1/models。
  • 验证状态:已核对官方文档:Open WebUI 的 OpenAI 兼容服务商页,其中字段与上面一致;我们没有运行过 Open WebUI。平台的 GET /v1/models 由网关直接返回(见网关路由代码),需要带 Authorization: Bearer。
  • 限制:官方文档说明保存连接时不会自动测试,「验证连接」失败不等于聊天不可用;如果 /models 返回的列表不符合预期,可以在模型 ID 白名单里手动填。

工作流平台

暂无收录条目:Dify、n8n 等没有取到官方文档里自定义 OpenAI 兼容端点的配置页,也没有实测。

未收录的工具

下面的工具没有收录,原因是缺少依据,不代表它们不能用:

  • Cursor:官方文档站没取到「覆盖 OpenAI Base URL」那一页,目前只有第三方网关文档和论坛帖子,其中提到该功能只覆盖对话面板、需要付费计划、与 Cursor 自带模型互相影响,这些我们都没有验证。
  • Chatbox、LobeChat、Roo Code、Kilo Code、GitHub Copilot、Gemini CLI、Qwen Code、Goose、Zed 等:没有查到官方文档里的配置项,也没有实测。
  • Dify、n8n、Flowise 等工作流平台:同上。

其中凡是支持「OpenAI 兼容服务商 + 自定义 Base URL」的,可参考上面 Cline、Continue、OpenCode 的字段:Base URL 填 https://api.modelsite.ai/v1,模型填平台模型 ID;但这只是类比,不是验证过的结论。

常见错误

现象原因处理
OpenAI SDK 返回 404 page not foundbase_url 漏了 /v1,SDK 请求的是 /chat/completions改成 https://api.modelsite.ai/v1
Anthropic SDK 返回 404base_url 多写了 /v1,SDK 拼出 /v1/v1/messages,平台没有这个路由改成 https://api.modelsite.ai(@ai-sdk/anthropic 例外,要带 /v1)
401,missing or invalid authorization headerAnthropic 协议的客户端用了 api_key / apiKey / ANTHROPIC_API_KEY,Key 在 x-api-key 头里,平台不读改用 auth_token / authToken / ANTHROPIC_AUTH_TOKEN
401,invalid key formatKey 不以 sk-ms- 或 sk-relay- 开头,或长度不足 20回控制台复制完整 Key
401,invalid API keyKey 已撤销、过期或复制不全在控制台检查 Key 状态与有效期
报缺少 API Key以为 SDK 会读 MODELSITE_API_KEY显式把它传给 api_key / auth_token,或改用工具自己的环境变量名
Codex 报 Missing environment variableenv_key 指向的环境变量没有设置先 export MODELSITE_API_KEY=... 再启动 Codex
模型不存在用了上游官方模型名(如 DeepSeek 官方的 deepseek-flash)使用平台模型 ID,见 模型列表

测试方法

「已用桩服务实测请求」的做法:在隔离目录安装工具并使用独立的 HOME 与配置目录,让它请求监听在 127.0.0.1 的桩服务,桩服务记录路径、鉴权头和请求体字段后返回固定的最小响应。过程中没有使用真实 Key,也没有调用任何付费 API。404 与 401 的响应来自对 api.modelsite.ai 的无 Key 请求。

本页内容