TokenHub 已提供 Docker 镜像、Linux 安装包与离线安装包 立即下载
开发者中心

几行代码,接入所有大模型

TokenHub 完全兼容 OpenAI 接口规范。只需替换 base_url 与 API Key,现有代码、SDK 与框架即可调用云端大厂模型、本地私有模型和企业知识库。

快速开始

5 分钟完成第一次调用

先在自己的服务器上部署 TokenHub,再用 OpenAI 官方 SDK 发起调用。任何兼容 OpenAI 协议的客户端都可以同样方式接入。

  1. 部署 TokenHub

    从下载页获取 Docker 镜像或安装包,部署到你自己的服务器,默认监听 8080 端口。首次打开 http://localhost:8080 时创建管理员账号。

    # 以 Docker 为例(镜像地址将在正式发布时公布)
    docker run -d --name tokenhub \
      -p 8080:8080 \
      -v $(pwd)/tokenhub-data:/data \
      <镜像地址待发布>:2.3.0
  2. 获取 API Key

    在你自己部署的 TokenHub 管理后台中添加模型(云端厂商 Key 或本地模型地址),然后进入「API Keys」新建密钥,可为密钥绑定项目、可用模型与 Token 配额。密钥以 th- 开头,仅在创建时完整显示一次。

    # 建议通过环境变量管理密钥,不要写入代码仓库
    export TOKENHUB_API_KEY="th-your-api-key"
    # 替换为你部署的 TokenHub 地址
    export TOKENHUB_BASE_URL="http://localhost:8080/v1"
  3. 安装 SDK

    直接使用 OpenAI 官方 SDK,无需安装额外依赖;也可以使用任意 HTTP 客户端。

    # Python
    pip install openai
    
    # Node.js
    npm install openai
  4. 发起第一次调用

    model 可填写具体模型名(如 deepseek-chat、qwen-plus、ollama/qwen2.5:7b),或填写 auto 由路由策略自动选择。

    # 替换为你部署的 TokenHub 地址
    curl http://localhost:8080/v1/chat/completions \
      -H "Authorization: Bearer $TOKENHUB_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "system", "content": "你是一名专业的企业助理"},
          {"role": "user", "content": "用三句话介绍 TokenHub"}
        ],
        "temperature": 0.7
      }'
    import os
    from openai import OpenAI
    
    client = OpenAI(
        base_url="http://localhost:8080/v1",  # 替换为你部署的 TokenHub 地址
        api_key=os.environ["TOKENHUB_API_KEY"],
    )
    
    resp = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role": "system", "content": "你是一名专业的企业助理"},
            {"role": "user", "content": "用三句话介绍 TokenHub"},
        ],
        temperature=0.7,
    )
    print(resp.choices[0].message.content)
    print(resp.usage)  # prompt / completion / total tokens
    import OpenAI from "openai";
    
    const client = new OpenAI({
      baseURL: "http://localhost:8080/v1", // 替换为你部署的 TokenHub 地址
      apiKey: process.env.TOKENHUB_API_KEY,
    });
    
    const resp = await client.chat.completions.create({
      model: "deepseek-chat",
      messages: [
        { role: "system", content: "你是一名专业的企业助理" },
        { role: "user", content: "用三句话介绍 TokenHub" },
      ],
      temperature: 0.7,
    });
    
    console.log(resp.choices[0].message.content);
  5. 开启流式输出

    设置 stream: true,以 SSE(Server-Sent Events)逐段返回内容,首字更快出现,适合对话类界面。最后一条消息为 data: [DONE]。

    curl -N http://localhost:8080/v1/chat/completions \
      -H "Authorization: Bearer $TOKENHUB_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "qwen-plus",
        "stream": true,
        "messages": [
          {"role": "user", "content": "写一段产品发布会开场白"}
        ]
      }'
    
    # 返回(节选):
    # data: {"choices":[{"index":0,"delta":{"content":"各位"}}]}
    # data: {"choices":[{"index":0,"delta":{"content":"来宾"}}]}
    # data: [DONE]
    stream = client.chat.completions.create(
        model="qwen-plus",
        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="", flush=True)
    const stream = await client.chat.completions.create({
      model: "qwen-plus",
      messages: [{ role: "user", content: "写一段产品发布会开场白" }],
      stream: true,
    });
    
    for await (const chunk of stream) {
      process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
    }
  6. 查看用量与日志

    每次调用的模型、耗时、Token 与费用都会实时记录,可在管理后台「调用日志」中检索,或在数据大屏中按部门、项目查看汇总。

API 概览

与 OpenAI 一致的接口设计

所有接口均以 JSON 交互,使用 Bearer Token 鉴权。Base URL 请替换为你部署的 TokenHub 地址。

Base URL http://localhost:8080/v1
鉴权 Authorization: Bearer th-…
格式 application/json · SSE
TokenHub API 接口列表
能力方法路径说明
模型调用(OpenAI 兼容)
Chat CompletionsPOST/chat/completions对话补全,支持流式输出、工具调用、多模态输入(取决于模型)
EmbeddingsPOST/embeddings文本向量化,可调用云端或本地 Embedding 模型
RerankPOST/rerank对候选文档按相关性重新排序,常用于 RAG 检索后处理
ModelsGET/models列出当前 Key 有权限调用的全部模型
GET/models/{model_id}查询单个模型的详情、上下文长度与单价
TokenHub 扩展
Knowledge BasesGET/knowledge_bases列出可访问的知识库
POST/knowledge_bases/{kb_id}/documents上传文档,自动解析、切片与向量化
POST/knowledge_bases/{kb_id}/search混合检索,返回片段与原文出处
DELETE/knowledge_bases/{kb_id}/documents/{doc_id}删除文档及其向量数据
UsageGET/usage按时间、项目、模型查询 Token 用量与费用

* 扩展接口的字段与路径以正式 API 文档为准;在对话接口中传入 knowledge_base 参数即可直接启用 RAG。

本地模型接入指南

把内网推理服务注册到 TokenHub

任何提供 OpenAI 兼容接口的推理服务都可以接入。注册后,本地模型与云端模型使用同一套 API、权限与计量。

  1. 在推理服务器上拉取模型以 Qwen2.5 7B 与 bge-m3 Embedding 模型为例。
  2. 允许内网访问Ollama 默认只监听本机,设置 OLLAMA_HOST 后启动服务。
  3. 在 TokenHub 中添加模型管理后台「模型接入 → 添加本地模型」,选择 Ollama 并填写地址,平台会自动探测可用模型。
  4. 按统一方式调用使用 名称/模型 格式的模型名,与云端模型调用方式完全一致。
# ① 拉取模型
ollama pull qwen2.5:7b
ollama pull bge-m3

# ② 监听内网地址并启动
OLLAMA_HOST=0.0.0.0:11434 ollama serve

# ③ TokenHub 本地模型配置(等价 YAML 示例)
provider: ollama
name: local-qwen
base_url: http://10.0.0.21:11434
models:
  - qwen2.5:7b
  - bge-m3          # 同时作为知识库 Embedding 模型

# ④ 调用时使用 model="local-qwen/qwen2.5:7b"

* 命令与配置为示意,IP、模型与字段名请以实际环境和正式版本为准。Xinference、LM Studio、SGLang 等同样可按「OpenAI 兼容服务」方式接入。

SDK 与工具

兼容你正在使用的开发生态

基于 OpenAI 兼容协议,主流 SDK、开发框架与 AI 应用平台只需修改 Base URL 和 Key 即可接入。

SDK

OpenAI 官方 SDK

Python · Node.js · Go · Java 等

设置 base_url / baseURL 与 API Key 即可,无需更换依赖。

LC

LangChain

Python · JS

使用 ChatOpenAI 与 OpenAIEmbeddings,指定 TokenHub 地址即可构建链与 Agent。

LI

LlamaIndex

Python

通过 OpenAI-Like LLM 与 Embedding 接口接入,便于复用现有索引与检索流程。

Di

Dify

AI 应用平台

在模型供应商中添加「OpenAI-API-compatible」,统一由 TokenHub 管理权限与计量。

OW

Open WebUI 等对话客户端

自托管对话界面

配置 OpenAI 兼容连接,为员工提供统一入口,额度与审计由 TokenHub 管控。

{ }

任意 HTTP 客户端

curl · requests · fetch

标准 REST + SSE 接口,任何语言都可直接调用,无需专用 SDK。

* 以上工具均通过 OpenAI 兼容协议接入,TokenHub 与相关项目不存在官方合作关系,名称及商标归各自所有者所有。

错误码

错误码与处理建议

错误响应沿用 OpenAI 的格式,便于复用现有的异常处理逻辑。

TokenHub API 错误码
HTTP错误码含义建议处理
400invalid_request参数缺失或格式错误检查请求体与字段类型
400context_length_exceeded输入超出模型上下文长度精简消息或换用长上下文模型
401invalid_api_keyAPI Key 无效、过期或已禁用在管理后台确认密钥状态
403permission_denied无权调用该模型或知识库联系管理员授予对应权限
404model_not_found模型不存在或未启用调用 /models 获取可用列表
429rate_limit_exceeded触发每分钟请求或 Token 限流指数退避后重试
429quota_exceeded项目或密钥配额已用尽申请提升配额,重试无效
500internal_error网关内部错误携带 request_id 联系支持
502upstream_error上游模型服务返回错误可重试,或配置备用模型
503model_unavailable模型暂不可用(含本地服务离线)启用故障自动切换
504upstream_timeout上游响应超时调整超时或改用流式输出

错误响应示例

{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "项目请求频率超出限制",
    "request_id": "req_8f2c…"
  }
}
  • 仅对 429(限流)与 5xx 进行重试
  • 使用指数退避,并读取 Retry-After 响应头
  • 记录 request_id,便于在调用日志中定位

开始构建你的第一个 AI 应用

免费下载 TokenHub,部署到你自己的服务器,几分钟内即可通过统一 API 调用云端与本地模型。