这是一个将火山引擎 DeepSeek 接口转换为 OpenAI 标准接口的代理服务。
- ✅ 支持 OpenAI 标准接口格式
- ✅ 实现了
/v1/models接口 - ✅ 实现了
/v1/chat/completions接口 - ✅ 支持流式响应 (SSE)
- ✅ 支持模型映射
- ✅ 自动请求头生成,避免风控
- ✅ VOLCENGINE_X_WEB_ID 持久化存储
- ✅ 服务重启后自动恢复数据
- ✅ 多进程/并发访问数据同步
- ✅ 异常终止时的数据恢复
| 模型ID | 显示名称 | 火山引擎模型名 |
|---|---|---|
| deepseek-v3-1 | DeepSeek-V3-1 | deepseek-v3-1 |
| deepseek-r1 | DeepSeek-R1 | deepseek-r1-1 |
npm install复制 .env.example 为 .env 并填入你的火山引擎 API 配置:
cp .env.example .env编辑 .env 文件:
# 火山引擎API配置
VOLCENGINE_API_URL=https://ml-platform-api.console.volcengine.com/ark/bff/api/cn-beijing/2024-01-29/Chat
VOLCENGINE_X_WEB_ID=your_x_web_id_here
VOLCENGINE_AUTHORIZATION=your_authorization_here
# 服务器配置
PORT=3000- 打开火山引擎控制台 https://exp.volcengine.com/
- 打开浏览器开发者工具 (F12)
- 发送一个聊天请求
- 在网络请求中找到
Chat接口的请求 - 复制以下信息:
x-web-id请求头的值authorization请求头的值- 请求 URL (通常为
https://ml-platform-api.console.volcengine.com/ark/bff/api/cn-beijing/2024-01-29/Chat)
注意:所有环境变量都必须正确设置,否则服务无法正常工作。
# 生产环境
npm start
# 开发环境(自动重启)
npm run dev服务将在 http://localhost:3000 启动。
curl -X GET http://localhost:3000/v1/models \
-H "Authorization: Bearer your-api-key"响应示例:
{
"object": "list",
"data": [
{
"id": "deepseek-v3-1",
"object": "model",
"created": 1712601600,
"owned_by": "volcengine"
},
{
"id": "deepseek-r1",
"object": "model",
"created": 1712601600,
"owned_by": "volcengine"
}
]
}curl -X POST http://localhost:3000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "deepseek-v3-1",
"messages": [
{
"role": "user",
"content": "你好,介绍一下你自己"
}
],
"stream": true
}'响应示例(SSE格式):
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1712601600,"model":"deepseek-v3-1","choices":[{"index":0,"delta":{"role":"assistant","content":"你好"},"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1712601600,"model":"deepseek-v3-1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1712601600,"model":"deepseek-v3-1","choices":[{"index":0,"delta":{"content":"很高兴见到你"},"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1712601600,"model":"deepseek-v3-1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
本服务提供了完整的 VOLCENGINE_X_WEB_ID 管理功能,包括持久化存储、自动恢复和多进程访问同步。
- 持久化存储:所有 ID 及其使用次数、状态等信息会自动保存到本地文件
- 自动恢复:服务重启后会自动加载之前保存的 ID 数据
- 多进程同步:使用文件锁机制确保多进程并发访问时的数据一致性
- 异常恢复:支持从备份文件和临时文件恢复数据,防止数据丢失
- 自动备份:定期创建数据备份,最多保留 5 个历史备份
- 自动保存:每 5 分钟自动保存一次数据,确保数据不丢失
访问 http://localhost:3000 可以使用 Web 管理界面管理 VOLCENGINE_X_WEB_ID:
- 查看所有 ID 及其状态
- 添加新 ID
- 批量导入 ID
- 删除 ID
- 重置 ID 使用计数
- 查看 ID 使用统计
- 设置最大使用次数
curl -X GET http://localhost:3000/api/webidscurl -X POST http://localhost:3000/api/webids \
-H "Content-Type: application/json" \
-d '{
"id": "your-web-id-here"
}'curl -X POST http://localhost:3000/api/webids/batch \
-H "Content-Type: application/json" \
-d '{
"ids": [
"web-id-1",
"web-id-2",
"web-id-3"
]
}'curl -X DELETE http://localhost:3000/api/webids \
-H "Content-Type: application/json" \
-d '{
"id": "web-id-to-delete"
}'curl -X POST http://localhost:3000/api/webids/reset \
-H "Content-Type: application/json" \
-d '{
"id": "web-id-to-reset"
}'curl -X GET http://localhost:3000/api/webids/statscurl -X POST http://localhost:3000/api/webids/config \
-H "Content-Type: application/json" \
-d '{
"maxUsage": 20
}'curl -X POST http://localhost:3000/api/webids/save数据默认存储在项目根目录的 data 文件夹中:
data/webids.json:主数据文件data/backups/:备份文件目录data/webids.lock:文件锁,用于多进程同步
运行以下命令测试持久化功能:
npm run test:persistence适合开发和测试,按照上述快速开始步骤即可。
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]可以部署到以下平台:
- Vercel
- Railway
- Render
- Heroku
- 阿里云/腾讯云等
- API 密钥安全:妥善保管你的火山引擎 API 密钥,不要提交到版本控制系统。
- 速率限制:火山引擎 API 可能有速率限制,请合理使用。
- 流式响应:目前主要支持流式响应,非流式响应可能不被上游支持。
- 错误处理:服务会自动处理上游错误并转换为 OpenAI 格式的错误响应。
-
获取 x-web-id 和 authorization
- 在火山引擎控制台打开开发者工具
- 发送一个聊天请求
- 在请求头中找到
x-web-id和authorization字段
-
模型未找到
- 检查模型名称是否正确
- 确认火山引擎是否支持该模型
-
认证失败
- 检查
.env文件中的配置是否正确 - 确认 API 密钥是否有效
- 检查
-
流式响应中断
- 检查网络连接
- 确认上游服务是否正常
欢迎提交 Issue 和 Pull Request!
MIT License