ThklumiThklumi文档
文档快速开始接入教程
OpenAI & Anthropic 双协议网关

把 OpenAI 或 Anthropic SDK 接到 Thklumi

已经在用 OpenAI 或 Claude?接入 Thklumi 通常只动两处:把 base_url 指向本站,把 api_key 换成控制台里 sk- 开头的密钥。模型名沿用模型页上的别名,例如 deepseek-v4-flash、gpt-5.5、claude-sonnet-4-6。

记住这一点就够了

SDK 与业务代码基本不动。把 base URL 指向 https://api.thklumi.com/v1,再带上你的 Thklumi 密钥即可发起请求。

1

鉴权与请求地址

所有请求发往同一站点,并在请求头带上密钥。我们同时提供两套主流协议:OpenAI 兼容(Bearer 鉴权)与 Anthropic 原生(x-api-key 鉴权),按你手里的 SDK 选一套即可,业务代码几乎不用改。

配置项
值
Base URL (OpenAI)
https://api.thklumi.com/v1
Base URL (Anthropic)
https://api.thklumi.com (SDK 自动补 /v1/messages)
OpenAI 鉴权
Authorization: Bearer sk-你的密钥
Anthropic 鉴权
x-api-key: sk-你的密钥
密钥格式
以 sk- 开头,在控制台「API 密钥」页创建
留意地址差异:OpenAI SDK 的 base_url 要带 /v1;而 Anthropic SDK 与 Claude Code 用根地址(不带 /v1),由 SDK 自己补 /v1/messages。用 cURL 时始终写完整路径。
2

创建 API 密钥

进入 API 密钥页面,点击 新建密钥。复制后请放到环境变量里,不要写死在前端或公开仓库中。建议生产、测试各用一把密钥,后续方便单独停用。
3

第一次调用(Chat Completions)

这是最推荐的接入方式。把 OpenAI SDK 的 base_url 指向 Thklumi,model 填模型别名,messages 按 OpenAI 原格式传入即可。下面给出 Python、Node.js、cURL 三种写法。

Python
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的密钥",
    base_url="https://api.thklumi.com/v1",
)

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "user", "content": "用一句话介绍你自己"}
    ],
)

print(response.choices[0].message.content)
Node.js
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-你的密钥",
  baseURL: "https://api.thklumi.com/v1",
});

const response = await client.chat.completions.create({
  model: "deepseek-v4-flash",
  messages: [
    { role: "user", content: "用一句话介绍你自己" },
  ],
});

console.log(response.choices[0].message.content);
cURL
curl https://api.thklumi.com/v1/chat/completions \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "user", "content": "用一句话介绍你自己"}
    ]
  }'

流式返回

如果希望像 ChatGPT 一样边生成边显示,把 stream 设为 true。服务端返回标准 SSE 数据流(data: {...} 分片,以 data: [DONE] 结束),按 chunk 逐段读取即可。

Python · stream=True
stream = client.chat.completions.create(
    model="deepseek-v4-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="")
cURL · stream
curl https://api.thklumi.com/v1/chat/completions \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "stream": true,
    "messages": [
      {"role": "user", "content": "写一首五言绝句"}
    ]
  }'

Responses API

Responses 是 OpenAI 新接口。Thklumi 会优先调用上游原生 Responses;如果上游暂不支持,会自动转换到 chat.completions,再把结果包装回 Responses 格式。

Python · responses.create
response = client.responses.create(
    model="gpt-5.5",
    input="请用三句话解释什么是 API 网关",
)

print(response.output_text)

Anthropic 原生协议

除 OpenAI 兼容格式外,我们还提供 Anthropic 原生 Messages 接口(/v1/messages)。anthropic 官方 SDK、Claude Code 无需改代码,只要把 Base URL 指向本站、密钥用 sk- 开头即可;鉴权走 x-api-key(也兼容 Authorization: Bearer),model 填 claude-* 别名。网关会在内部把 Anthropic 请求与流式事件与上游 OpenAI 渠道互相转换。

cURL · /v1/messages
curl https://api.thklumi.com/v1/messages \
  -H "x-api-key: sk-你的密钥" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "用一句话介绍你自己"}
    ]
  }'
Python · anthropic SDK
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-你的密钥",
    base_url="https://api.thklumi.com",
)

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}],
)

print(resp.content[0].text)
记住:Anthropic SDK / Claude Code 用根地址 https://api.thklumi.com(不带 /v1),SDK 会自动补上 /v1/messages;这点和 OpenAI SDK 需要带 /v1 不一样。

在 Claude Code 中接入

bash · Claude Code
export ANTHROPIC_BASE_URL="https://api.thklumi.com"
export ANTHROPIC_API_KEY="sk-你的密钥"

该用哪个接口

两个接口都跑在同一个 Base URL 上,按项目情况选择即可:老项目继续用 chat.completions,新项目也可以用 responses.create。

大多数场景:client.chat.completions.create()

DeepSeek、GLM、Kimi 以及绝大多数 OpenAI 兼容模型都支持。普通聊天、流式输出、生产业务优先选它,兼容性最高。

新 OpenAI 模型:client.responses.create()

新版 OpenAI SDK 可继续使用 responses.create。即使上游只支持 chat.completions,Thklumi 也会在网关层自动完成协议转换。

可用模型

用下面的接口实时拉取当前账号可调用的完整模型列表;请求时 model 字段直接填返回里的 id(全小写)。也可以在模型页查看别名、价格与能力。

cURL · GET /models
curl https://api.thklumi.com/v1/models \
  -H "Authorization: Bearer sk-你的密钥"

已覆盖 Anthropic Claude、OpenAI GPT、Google Gemini、DeepSeek、GLM、Kimi 等 40+ 主流模型,全部通过一套 OpenAI 兼容协议直连。

打开模型页

在 Agent 工具中接入

Codex、Cline、Cherry Studio 等支持 OpenAI 协议的客户端,只需把 Base URL 和 API Key 指向 Thklumi,无需改动工具本身。设置以下环境变量即可:

bash · 环境变量
export OPENAI_BASE_URL="https://api.thklumi.com/v1"
export OPENAI_API_KEY="sk-你的密钥"

凡是支持自定义 OpenAI Base URL 的客户端都可这样接入。如果工具是在界面里填写,把「API 地址 / Base URL」填 https://api.thklumi.com/v1,「密钥」填 sk- 开头的 Key 即可。

常见错误怎么排查

状态码
含义
处理方式
401
密钥不对,或没有带 Authorization
确认请求头是 Authorization: Bearer sk-...,不要拿 OpenAI 的 sk-proj 密钥调用 Thklumi。
402
余额不足
到控制台充值或降低模型成本。测试环境建议先用便宜模型确认链路。
404
模型名不存在,或接口路径写错
检查 base_url 是否以 /v1 结尾,模型名是否和模型页展示的一致。
429
请求太频繁
给客户端加退避重试。生产环境不要无限重试,避免把余额打空。
502
上游模型服务暂时不可用
先重试一次;如果固定某个模型一直 502,换模型或检查该模型的供应商渠道配置。

常见问题

调用返回 401 怎么办?

先看协议对不对:OpenAI 格式用 Authorization: Bearer sk-...,Anthropic 格式用 x-api-key: sk-...。再确认密钥复制完整、没有多余空格,且没有在控制台被停用。

模型报 not found?

模型名以模型页或 GET /v1/models 返回的 id 为准(全小写,注意 - 和 . 的区别)。Claude 系列请用 claude-* 别名,并确认该模型当前有可用渠道。

第一个字迟迟不出来?

大模型在思考阶段有几秒到几十秒延迟是正常现象,不代表失败。建议开启流式(stream),并把客户端读超时放宽到数百秒,别用默认的十几秒。

密钥怎么放才安全?

只放在服务端的环境变量或密钥托管里,别硬编码、别提交 Git、别打进前端包。一旦怀疑外泄,先去控制台删掉旧 Key 再建新的。

上线前检查清单

密钥只放后端

不要把 sk-lumi 密钥写到浏览器代码、App 客户端或公开 Git 仓库。前端应请求你自己的后端。

默认使用 chat.completions

除非模型明确要求 Responses API,否则优先接 chat.completions,兼容性最高。

给 429/502 加重试

推荐最多重试 2 到 3 次,并使用指数退避;用户取消请求时要及时停止流式连接。

上线后看请求日志

通过日志页检查模型、状态码、token 和花费。出现异常时用 request_id 快速定位。