baseURL代码示例实战教程
开发者必读:AI API 中转 baseURL 切换实战与代码示例大全
2026-08-25 · 约 8 分钟阅读
绝大多数 AI API 中转站都兼容 OpenAI 或 Anthropic 的官方 API 格式,切换过程本质上只需修改两个参数:base_url 和 api_key。本文提供四种主流语言/工具的完整示例。
一、Python(OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="你的中转站Key",
base_url="https://中转站域名/v1" # 替换为中转站的 base_url
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}],
stream=False
)
print(response.choices[0].message.content)
流式输出
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "写一首诗"}],
stream=True
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
二、Python(Anthropic SDK)
import anthropic
client = anthropic.Anthropic(
api_key="你的中转站Key",
base_url="https://中转站域名" # 注意:通常不带 /v1 后缀,具体看平台文档
)
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello Claude"}]
)
print(message.content)
三、Node.js(OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "你的中转站Key",
baseURL: "https://中转站域名/v1",
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);
流式输出(Node.js)
const stream = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "写一首诗" }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
四、Go(使用官方兼容库或直接HTTP请求)
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
url := "https://中转站域名/v1/chat/completions"
payload := map[string]interface{}{
"model": "gpt-4o",
"messages": []map[string]string{
{"role": "user", "content": "Hello"},
},
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer 你的中转站Key")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
result, _ := io.ReadAll(resp.Body)
fmt.Println(string(result))
}
五、curl(快速测试用)
curl https://中转站域名/v1/chat/completions \
-H "Authorization: Bearer 你的中转站Key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "Hello"}]
}'
六、常见报错排查
| 报错 | 可能原因 | 解决方法 |
|---|---|---|
| 401 Unauthorized | Key错误或已过期 | 检查Key是否正确复制,是否有多余空格 |
| 404 Not Found | base_url路径拼接错误 | 确认平台要求的路径格式(是否需要/v1后缀) |
| 429 Too Many Requests | 触发限流 | 降低并发,实现指数退避重试 |
| 模型返回内容异常/格式不对 | 模型名称不匹配 | 核对平台模型列表页的确切model字段名 |
| SSL/TLS握手失败 | 平台域名网络异常 | 检查是否需要更换网络环境或DNS |
七、多环境配置技巧
生产环境建议用环境变量管理base_url和key,方便不同环境(开发/测试/生产)快速切换供应商:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AI_API_KEY"],
base_url=os.environ.get("AI_API_BASE_URL", "https://api.openai.com/v1")
)
# .env 文件
AI_API_KEY=你的中转站Key
AI_API_BASE_URL=https://中转站域名/v1
这样切换中转站或者供应商时,只需修改环境变量,无需改动业务代码。