跳到正文
土土金API

集成指南

用 OpenAI SDK 接入

在 OpenAI 官方 Python 和 Node.js SDK 里把 base_url 设为 https://www.tutujin.com/v1、api_key 换成土土金 Key,就能调用对话、流式、向量等接口,以及 GPT、Claude、Gemini、DeepSeek 等模型。

OpenAI 官方 SDK 只要改两个参数就能用:base_url 设为 https://www.tutujin.com/v1,api_key 换成土土金的 Key。同一个 client 可以调用对话、Responses、向量、图像和语音接口;换模型只改 model 参数,GPT 以外的 Claude、Gemini、DeepSeek 等目录里支持 Chat Completions 的模型也能这样调用。

安装

pip install openai

创建 client

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://www.tutujin.com/v1",
    api_key=os.environ["TUTUJIN_API_KEY"],
)

也可以不改代码,只设置环境变量:SDK 默认会读取 OPENAI_BASE_URL 和 OPENAI_API_KEY。

cURL
export OPENAI_BASE_URL="https://www.tutujin.com/v1"
export OPENAI_API_KEY="sk-你的Key"

对话

resp = client.chat.completions.create(
    model="gpt-5.4-mini",
    messages=[
        {"role": "system", "content": "你是一名简洁的助理。"},
        {"role": "user", "content": "用三句话解释什么是 RAG。"},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage)  # 本次的输入、输出 tokens

参数说明见 Chat Completions。

流式输出

stream = client.chat.completions.create(
    model="gpt-5.4-mini",
    messages=[{"role": "user", "content": "写一段 100 字的产品介绍"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

向量

emb = client.embeddings.create(
    model="text-embedding-3-small",
    input=["退货政策是什么?", "多久发货?"],
)
print(len(emb.data), len(emb.data[0].embedding))

input 传数组可以一次处理多条文本,比逐条请求更快,也不容易触发限流。

调用其他厂商的模型

client 不用变,只换 model。目录里标注支持 Chat Completions 的模型都可以这样调用:

Python
for model in ["claude-sonnet-5-5", "deepseek-v4.1-flash"]:
    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": "你好"}],
    )
    print(model, resp.choices[0].message.content)

不同厂商对可选参数的支持不完全一样。需要 Claude 原生功能时,改用 Anthropic SDK 调用原生 Messages 接口。

超时与重试

SDK 遇到 429、5xx 和网络错误会自动重试,默认 2 次。生产环境建议按业务调整重试次数和超时:

client = OpenAI(
    base_url="https://www.tutujin.com/v1",
    api_key=os.environ["TUTUJIN_API_KEY"],
    max_retries=4,
    timeout=60.0,  # 秒
)

注意:余额不足返回 403,SDK 不会重试它,需要你在代码里单独提醒。完整说明见错误码与重试。

异步调用(Python)

并发处理大量请求时用 AsyncOpenAI,参数和同步版一样:

Python
import asyncio
import os

from openai import AsyncOpenAI

client = AsyncOpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])


async def main():
    resp = await client.chat.completions.create(
        model="gpt-5.4-mini",
        messages=[{"role": "user", "content": "你好"}],
    )
    print(resp.choices[0].message.content)


asyncio.run(main())

并发上限怎么设,见限流说明。

常见问题

现象原因与处理
404base_url 少了 /v1,应为 https://www.tutujin.com/v1
401Key 填错或已失效,确认读取的环境变量里是完整的 Key
503 并提示 model_not_foundKey 所在分组没有这个模型,换分组或核对模型名,见选择分组
返回很慢或超时长输出开启流式,并适当调大 timeout

没找到答案?加客服微信 JsnonoChat,发送报错信息里的 request id,我们帮你排查。