API知识站学习、对比与使用指南
地址配置错误Endpoint / SDK Base URL

Base URL 配置错误:API 地址、路径和兼容模式怎么排查

Base URL 错了会伪装成 401、404、timeout、JSON 解析失败或 HTML 响应。先确认协议、域名、/v1 路径和平台兼容模式。

排查结论

先用最小请求隔离问题:只保留 API Key、Base URL、模型名和一条 ping 消息。最小请求失败,先修配置;最小请求成功,再回到业务代码排查并发、上下文和部署环境。

1. 问题现象

  • 返回 404、HTML 页面、Cannot GET /v1/chat/completions、JSON parse error 或连接超时。
  • Key 和模型名确认无误,但请求始终打不到正确 API。
  • 浏览器能打开官网,代码调用 API 却失败,因为官网域名不是 API endpoint。
  • 把 /v1 写了两次,或 SDK 自动拼接路径后变成 /v1/v1/chat/completions。

2. 最可能原因

使用了官网、控制台或文档页面地址,而不是 API 接入地址。
OpenAI SDK 的 base_url 少了 /v1,或平台要求不要手动加 /chat/completions。
通义千问等平台需要 compatible-mode/v1,不能只写控制台域名。
Claude、Gemini 直连 API 不是 OpenAI 兼容路径,却被当作 OpenAI Base URL 使用。
代理、中转或网关要求自定义路径,和官方 SDK 默认路径冲突。

3. 快速排查清单

1

打印最终请求 URL

确认最终请求是 https://域名/.../chat/completions,而不是官网页面或重复路径。

2

确认是否 OpenAI 兼容

只有明确支持 OpenAI 兼容的服务,才使用 OpenAI SDK 的 chat.completions.create。

3

用 /models 或最小聊天请求探测

平台支持 /v1/models 时先测模型列表,不支持时按控制台给出的完整示例测试。

4

Base URL 和模型名一起切换

换供应商时不要只换 Key;Base URL、模型名、Key 必须成套。

5

检查部署环境变量

本地 .env 正确不代表线上 Secret 正确;线上常见问题是漏了路径或多了斜杠。

4. 对应 API 的特殊情况

DeepSeek

OpenAI SDK 示例常用 base_url=https://api.deepseek.com,SDK 会拼接 /v1/chat/completions。

通义千问 DashScope

OpenAI 兼容模式常用 https://dashscope.aliyuncs.com/compatible-mode/v1,少了 compatible-mode/v1 会请求到错误接口。

Kimi

OpenAI 兼容地址是 https://api.moonshot.cn/v1,模型名用 moonshot-v1-* 或控制台可见模型。

腾讯混元

OpenAI 兼容地址可用 https://api.hunyuan.cloud.tencent.com/v1,密钥和模型名按控制台说明填写。

豆包火山方舟

常见地址是 https://ark.cn-beijing.volces.com/api/v3,但不同区域和接入点可能不同,复制控制台参数最稳。

Claude / Gemini

直连官方 API 不等于 OpenAI 兼容 Base URL。使用官方 SDK,或确认你使用的网关明确支持 OpenAI 兼容。

5. 可复制的修复示例

常见 OpenAI 兼容 Base URL 模板
bash
# DeepSeek
export BASE_URL="https://api.deepseek.com"
export MODEL_ID="deepseek-chat"

# 通义千问 DashScope 兼容模式
# export BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
# export MODEL_ID="qwen-plus"

# Kimi
# export BASE_URL="https://api.moonshot.cn/v1"
# export MODEL_ID="moonshot-v1-8k"

# 豆包火山方舟:以控制台实际区域和接入点为准
# export BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
# export MODEL_ID="你的推理接入点ID"
同一组配置里,Base URL、模型名和 Key 必须来自同一平台。
避免重复拼接 /v1/chat/completions
python
from openai import OpenAI
import os

# 正确:base_url 只写平台要求的根路径
client = OpenAI(
    api_key=os.environ["API_KEY"],
    base_url=os.environ["BASE_URL"].rstrip("/"),
)

response = client.chat.completions.create(
    model=os.environ["MODEL_ID"],
    messages=[{"role": "user", "content": "ping"}],
)
print(response.choices[0].message.content)
不要把完整 /chat/completions URL 填进 base_url,SDK 会自己拼接接口路径。