DeepSeek API 接入 ECAIX:OpenAI 兼容接口完整指南
DeepSeek API 接入 ECAIX:OpenAI 兼容接口完整指南
本文介绍如何通过 ECAIX 的 OpenAI 兼容接口调用当前目录中的 DeepSeek model ID。内容覆盖最小请求、Python 和 Node.js SDK、curl 调试、模型 ID 验证、流式输出、JSON、工具调用和常见错误排查。
本文描述的是通过 ECAIX 网关访问 ECAIX 模型目录中公开的 model ID。这不代表 ECAIX 是 DeepSeek 官方 API endpoint,也不代表 DeepSeek 的全部能力都能在每个网关路径上使用。进入生产环境前,请同时检查 ECAIX 实时模型页和 DeepSeek 官方文档。
本文的事实范围
示例使用 ECAIX 的 OpenAI 兼容路径,以及文章发布时公开目录中可见的模型 ID。模型可用性、路由、限额、价格和功能支持可能变化,当前目录与 API 文档是事实来源。
快速开始
如果你的应用已经使用 OpenAI SDK,可以按以下顺序操作:
- 打开 DeepSeek v4.1 Flash 模型页,确认 ID 仍然可用。
- 创建 ECAIX API Key。
- 将 OpenAI 兼容 base URL 设置为
https://ecaix.com/api/ai/v1。 - 尽量保持现有 SDK 和业务代码不变。
- 先运行下面的最小请求。
- 基础请求成功后,再逐项增加 streaming、JSON 或 tools。
Endpoint 和 model ID
OpenAI 兼容客户端使用:
Base URL: https://ecaix.com/api/ai/v1
Model: deepseek-v4.1-flash
文章中的 model ID 不是永久承诺。每次新接入或部署前,都应打开实时模型目录确认。如果需要其他 DeepSeek 系列模型,请从模型详情页复制准确 ID,不要自行猜测后缀。
Endpoint 路径也很重要。SDK 的 base_url 应该停在 /v1,由 SDK 自己拼接 /chat/completions 或其他操作路径。如果 SDK 已经自动拼接,就不要把 /chat/completions 再写进 base_url。
使用 Python OpenAI SDK
在虚拟环境中安装或升级 OpenAI Python SDK:
python -m pip install --upgrade openai
示例:
const client = new OpenAI({
apiKey: process.env.ECAIX_API_KEY,
baseURL: "https://ecaix.com/api/ai/v1",
});
const response = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [
{ role: "user", content: "用一句话说明 API 测试的重要性。" },
],
max_tokens: 128,
});
console.log(response.choices[0].message.content);
API 请求应该运行在服务端。浏览器应用应调用自己的后端,不要把 ECAIX Key 暴露在客户端 JavaScript 中。
使用 curl 做诊断
如果 SDK 报错,先去掉 SDK,直接测试 endpoint。把响应 header 和 body 分开保存,便于区分 HTTP 错误和响应格式错误。
curl -sS -D /tmp/ecaix-deepseek-headers.txt \
-o /tmp/ecaix-deepseek-response.json \
-w '\nHTTP %{http_code}\n' \
"https://ecaix.com/api/ai/v1/chat/completions" \
-H "Authorization: Bearer ${ECAIX_API_KEY}" \
-H "content-type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Reply with one short sentence."}
],
"max_tokens": 128
}'
不要在公开工单中直接粘贴保存的 header 或 response。发布前要移除 API Key、request ID、prompt、仓库路径和客户数据。
响应排查顺序
建议按以下顺序检查:
- HTTP 状态码:请求是否到达有效 endpoint。
- 响应 body:读取网关或供应商返回的 error code。
- Model ID:从当前模型目录复制准确 ID。
- 认证:检查 Key header、账户和权限。
- 请求结构:缩减到
model、messages和较小的输出限制。 - 功能字段:逐项增加 streaming、JSON 或 tools。
- SDK 行为:将 SDK 请求与直接 curl 请求进行比较。
这样可以避免把客户端库问题误判成模型路由或账户权限问题。
流式输出
普通请求成功后,再逐步增加 streaming:
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "用三点总结 API 重试策略。"}],
stream=True,
max_tokens=256,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
具体事件行为取决于 endpoint 和 SDK。要检查 empty delta、最终 usage event、连接中断和 stream 结束方式。在测试断线和 retry 之前,不要把 streaming 直接视为生产就绪。
结构化输出和 JSON
如果应用需要机器可读的结果,先运行普通请求,再增加 endpoint 和模型实际支持的 structured-output 选项。返回内容必须用真实 JSON parser 校验。提示词中写“请返回 JSON”,不等于 schema-enforced response。
import json
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{"role": "user", "content": "返回一个包含 title 和 priority 字段的 JSON 对象。"}
],
response_format={"type": "json_object"},
max_tokens=128,
)
payload = json.loads(response.choices[0].message.content)
print(payload["title"])
response_format 是否被接受,取决于模型和路由。如果收到 unsupported-parameter 错误,应移除该字段,并先查看当前 route 文档。
Function Calling 和 Tools
工具调用需要和文本生成分开测试。先使用一个无害函数,检查返回的 name 和 arguments,再考虑执行真实操作。
tools = [
{
"type": "function",
"function": {
"name": "get_demo_status",
"description": "Return a fixed status for a local compatibility test.",
"parameters": {
"type": "object",
"properties": {},
"additionalProperties": False,
},
},
}
]
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "检查演示状态。"}],
tools=tools,
tool_choice="auto",
max_tokens=128,
)
print(response.choices[0].message.tool_calls)
模型可能可以正常生成文本,但因为 schema 转换、参数不支持或客户端行为差异导致 tools 失败。没有完成 schema 校验和权限控制前,不要在生产系统中执行返回的工具参数。
OpenAI 兼容路径与 Anthropic 兼容路径
ECAIX 针对不同客户端提供不同的兼容 API surface:
| 客户端或工作流 | 文档路径 | 需要验证 |
|---|---|---|
| OpenAI Python/Node SDK | /api/ai/v1 | Chat Completions、Responses、streaming、tools |
| Anthropic 风格客户端 | /api/ai/v1/anthropic | Messages 字段、header、content blocks |
| Claude Code 第三方工作流 | /api/ai/v1/anthropic | 供应商特定行为,不是 Anthropic 官方支持 |
选择路径前,请阅读 Chat Completions 文档、Responses 文档 和 Anthropic Messages 文档。同一个 model ID 在不同兼容面上可能不支持完全相同的字段和行为。
当前模型详情页
请通过模型详情页检查能力和可用性:
模型详情页比静态文章更适合确认当前 model ID、上下文信息和定价入口。
常见错误
| 状态或现象 | 可能原因 | 诊断动作 |
|---|---|---|
401 | Bearer token 缺失或无效 | 检查 Authorization、环境变量和 Key 状态 |
403 | Key 或账户没有权限 | 检查账户访问权限和模型可用性 |
404 | base URL 或 route suffix 错误 | 直接 curl 使用 /api/ai/v1/chat/completions |
400 | body 无效或字段不支持 | 删除可选字段,重试最小 body |
429 | rate 或 quota 限制 | 记录 response headers,降低速率并查看账户限制 |
5xx | 网关或上游故障 | 保存时间和 response ID,按策略 retry |
| Model not found | 拼写、模型下架或路由不匹配 | 从 /zh/models 复制准确 model ID |
| 文本成功、tools 失败 | 工具 schema 或模型能力不匹配 | 测试一个无害函数并检查 arguments |
| SDK 与 curl 不同 | SDK 默认值或路径拼接差异 | 打印 SDK 配置并比较 URL |
生产前安全清单
离开测试项目之前,确认:
- API Key 只在服务端保存,并且可以轮换。
- Prompt 和 response 不包含未经批准的 secret 或客户数据。
- 你了解网关是否记录请求,以及日志保存多久。
- 模型可用性和价格来自实时页面。
- 应用处理 timeout、retry、幂等性和 rate limit。
- Streaming 断线不会创建重复任务。
- Tool calls 有 allowlist、校验、授权和审计日志。
- Provider 和 gateway 条款允许你发送计划中的 workload。
FAQ
这是 DeepSeek 官方 API endpoint 吗?
不是。本文描述的是通过 ECAIX 网关访问 ECAIX 目录中的 model ID。DeepSeek 原生 endpoint、账户规则和供应商能力请查看 DeepSeek 官方 API 文档。
可以不改业务代码直接使用 OpenAI SDK 吗?
很多 OpenAI SDK 应用可以先修改 base URL、API Key 和 model ID。但仍然要测试字段、streaming、tools、response format 和错误处理。
应该选择哪个 DeepSeek 模型?
从模型目录开始,根据 coding、reasoning、上下文长度、多模态和成本要求选择。不要只复制旧文章中的模型名,先确认当前 ID,再用自己的 prompt 测试。
可以用于 Claude Code 吗?
Anthropic 兼容路径可以作为第三方 provider workflow 进行测试,但 Anthropic 不支持通过 gateway 将 Claude Code 路由到非 Claude 模型。不要将它描述成 Anthropic 官方支持,也不要承诺完整 Claude Code 兼容性。
当前价格和限制在哪里查看?
查看 ECAIX 定价页、模型目录 和账户控制台。不要把本文中的价格写死到应用中。
下一步
- 在当前 DeepSeek 模型页确认 model ID。
- 创建 ECAIX API Key。
- 阅读 Chat Completions 文档。
- 先运行直接 curl 诊断。
- 直接请求成功后再使用 SDK。
- 一次只增加一个功能:streaming、JSON 或 tools。