集成指南
用 OpenAI SDK 接入
在 OpenAI 官方 Python 和 Node.js SDK 里把 base_url 设为 https://open.tutujin.com/v1、api_key 换成土土金 Key,就能调用对话、流式、向量等接口,以及 GPT、Claude、Gemini、DeepSeek 等模型。
OpenAI 官方 SDK 只要改两个参数就能用:base_url 设为 https://open.tutujin.com/v1,api_key 换成土土金的 Key。同一个 client 可以调用对话、Responses、向量、图像和语音接口;换模型只改 model 参数,GPT 以外的 Claude、Gemini、DeepSeek 等目录里支持 Chat Completions 的模型也能这样调用。
安装
pip install openainpm install openai创建 client
import os
from openai import OpenAI
client = OpenAI(
base_url="https://open.tutujin.com/v1",
api_key=os.environ["TUTUJIN_API_KEY"],
)import OpenAI from 'openai'
const client = new OpenAI({
baseURL: 'https://open.tutujin.com/v1',
apiKey: process.env.TUTUJIN_API_KEY,
})也可以不改代码,只设置环境变量:SDK 默认会读取 OPENAI_BASE_URL 和 OPENAI_API_KEY。
export OPENAI_BASE_URL="https://open.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) # 本次的输入、输出 tokensconst resp = await client.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [
{ role: 'system', content: '你是一名简洁的助理。' },
{ role: 'user', content: '用三句话解释什么是 RAG。' },
],
})
console.log(resp.choices[0].message.content)
console.log(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)const stream = await client.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [{ role: 'user', content: '写一段 100 字的产品介绍' }],
stream: true,
})
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '')
}向量
emb = client.embeddings.create(
model="text-embedding-3-small",
input=["退货政策是什么?", "多久发货?"],
)
print(len(emb.data), len(emb.data[0].embedding))const emb = await client.embeddings.create({
model: 'text-embedding-3-small',
input: ['退货政策是什么?', '多久发货?'],
})
console.log(emb.data.length, emb.data[0].embedding.length)input 传数组可以一次处理多条文本,比逐条请求更快,也不容易触发限流。
调用其他厂商的模型
client 不用变,只换 model。目录里标注支持 Chat Completions 的模型都可以这样调用:
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://open.tutujin.com/v1",
api_key=os.environ["TUTUJIN_API_KEY"],
max_retries=4,
timeout=60.0, # 秒
)const client = new OpenAI({
baseURL: 'https://open.tutujin.com/v1',
apiKey: process.env.TUTUJIN_API_KEY,
maxRetries: 4,
timeout: 60_000, // 毫秒
})注意:余额不足返回 403,SDK 不会重试它,需要你在代码里单独提醒。完整说明见错误码与重试。
异步调用(Python)
并发处理大量请求时用 AsyncOpenAI,参数和同步版一样:
import asyncio
import os
from openai import AsyncOpenAI
client = AsyncOpenAI(base_url="https://open.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())并发上限怎么设,见限流说明。
常见问题
| 现象 | 原因与处理 |
|---|---|
| 404 | base_url 少了 /v1,应为 https://open.tutujin.com/v1 |
| 401 | Key 填错或已失效,确认读取的环境变量里是完整的 Key |
503 并提示 model_not_found | Key 所在分组没有这个模型,换分组或核对模型名,见选择分组 |
| 返回很慢或超时 | 长输出开启流式,并适当调大 timeout |
没找到答案?加客服微信 JsnonoChat,发送报错信息里的 request id,我们帮你排查。