OpenAI SDK 接入
226-ai 对 OpenAI Python / Node SDK 是完全透明替换——改两个参数即可。
Python
安装
bash
pip install openai初始化
python
from openai import OpenAI
client = OpenAI(
base_url="https://api.226-ai.com/v1",
api_key="sk-你的token",
)一次对话
python
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "system", "content": "你是简洁的编程助手。"},
{"role": "user", "content": "用 Python 写个快速排序。"},
],
max_tokens=800,
temperature=0.3,
)
print(resp.choices[0].message.content)
print(f"usage: {resp.usage}")流式
python
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "从 1 数到 10"}],
stream=True,
max_tokens=100,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)
print()工具调用(function calling)
python
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "北京今天天气?"}],
tools=tools,
tool_choice="auto",
)
# 如果模型决定调工具
tool_calls = resp.choices[0].message.tool_calls
if tool_calls:
call = tool_calls[0]
print(f"模型想调: {call.function.name}({call.function.arguments})")
# 你实际执行工具,然后把结果塞回消息继续对话Embeddings(等 OpenAI 渠道上线)
python
emb = client.embeddings.create(
model="text-embedding-3-small",
input="一段文字"
)
vec = emb.data[0].embedding # 1536 维向量Node.js
安装
bash
npm install openai基础使用
javascript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.226-ai.com/v1",
apiKey: process.env.RELAY_TOKEN, // 存环境变量,不要硬编码
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [
{ role: "user", content: "介绍下 Promise" }
],
max_tokens: 500,
});
console.log(resp.choices[0].message.content);流式(Node)
javascript
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "讲个故事" }],
stream: true,
max_tokens: 300,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}异步 Python(asyncio)
python
from openai import AsyncOpenAI
import asyncio
async def main():
client = AsyncOpenAI(
base_url="https://api.226-ai.com/v1",
api_key="sk-xxx",
)
resp = await client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "hi"}],
max_tokens=20,
)
print(resp.choices[0].message.content)
asyncio.run(main())生产环境建议
1. 重试 + 超时
python
client = OpenAI(
base_url="https://api.226-ai.com/v1",
api_key="sk-xxx",
timeout=60.0, # 总超时 60s
max_retries=2, # 429/5xx 自动重试 2 次
)2. 请求 ID 便于排错
python
resp = client.chat.completions.with_raw_response.create(...)
print("x-request-id:", resp.headers.get("x-request-id"))贴这个 ID 问管理员,能精确定位到 console.226-ai.com 日志里那条记录。
3. Base URL 切换策略
封装一层让你随时切入口:
python
BASE = os.getenv("RELAY_BASE_URL", "https://api.226-ai.com/v1")遇到长推理 CF 100s 问题,环境变量改成 https://api-direct.226-ai.com:10443/v1,代码不动。
4. 不要把 token 提交 git
- 用环境变量(上面示例已演示)
- 或者
direnv按目录自动加载 - 或者云厂商的 secrets manager
和 OpenAI 官方的差异
| 项 | OpenAI 官方 | 226-ai |
|---|---|---|
| Base URL | https://api.openai.com/v1 | https://api.226-ai.com/v1 |
| 认证头 | Authorization: Bearer sk-xxx | 完全一样 |
| 支持模型 | 只 OpenAI 家 | OpenAI 格式 + Claude 全系 + Gemini(用模型名区分) |
/v1/chat/completions | ✅ | ✅ |
/v1/responses (新版) | ✅ | ✅ 兼容(路由到对应上游) |
/v1/embeddings | ✅ | ⏳ 等 OpenAI 渠道上线 |
/v1/images/* (DALL-E) | ✅ | ⏳ 暂不支持 |
/v1/audio/* (TTS/STT) | ✅ | ⏳ 暂不支持 |
/v1/files、/v1/assistants | ✅ | ❌ 不支持(不是中转常见诉求) |
用 chat completions + embeddings 的项目 100% 能平移过来。