Gemini SDK直连DeepSeek:DS2API generateContent流式接口全支持实测指南
【免费下载链接】ds2apiDeepSeek-Compatible Middleware Interface: A technical exploration project in Go, focusing on high-concurrency protocol adaptation. It serves as a reference implementation for converting diverse web protocols into standardized formats.项目地址: https://gitcode.com/GitHub_Trending/ds/ds2api
DS2API 是一个 DeepSeek 兼容的中间件接口(Go 语言实现,专注高并发协议适配),内置完整的 Gemini 兼容协议层——generateContent与streamGenerateContent均开箱即用。本文带你把 Gemini SDK 指向 DS2API,实测非流式、流式、工具调用与思考模式,看看 DeepSeek 如何"伪装"成 Gemini 供任意 Google 生态客户端使用。
📌 为什么值得接入 Gemini 协议
ds2api 把 OpenAI、Claude、Gemini 三套协议统一挂在同一路由树上,由 router.go 负责装配。对使用者来说这意味着:
- 零改造迁移:原本调用 Gemini 的 SDK / 脚本,只需改 base URL 和 key
- 双版本路径:同时支持
/v1beta官方路径与/v1兼容路径 - 协议保真:响应严格遵循 Gemini 结构,SDK 的
candidate、usageMetadata、SSE chunk 解析逻辑全部可复用
🚀 快速部署 DS2API
克隆仓库并启动(仓库地址:https://gitcode.com/GitHub_Trending/ds/ds2api):
git clone https://gitcode.com/GitHub_Trending/ds/ds2api cd ds2api docker compose up -d服务默认监听5001端口。详细的开发部署说明见 docs/DEVELOPMENT.md 与 docs/DEPLOY.md。
🔗 支持的 Gemini 接口一览
路由注册见 handler_routes.go:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1beta/models/{model}:generateContent | 官方路径,非流式 |
| POST | /v1beta/models/{model}:streamGenerateContent | 官方路径,流式 |
| POST | /v1/models/{model}:generateContent | 兼容路径 |
| POST | /v1/models/{model}:streamGenerateContent | 兼容路径 |
💡鉴权三选一:Authorization: Bearer <token>、x-goog-api-key: <token>,或查询参数?key=/?api_key=——Gemini SDK 惯用的x-goog-api-key完全可用。
🧪 实测一:非流式 generateContent
以 curl 模拟 Gemini SDK 的一次generateContent调用(完整示例见 API.md):
curl "http://localhost:5001/v1beta/models/gemini-2.5-pro:generateContent" \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{"contents":[{"role":"user","parts":[{"text":"用三句话介绍 Go 语言"}]}]}'响应是标准 Gemini 结构(组装逻辑见 handler_generate.go):
candidates[0].content.parts[].text:正文parts[].thought=true:思考内容(thinking 开启时)parts[].functionCall:工具调用usageMetadata:promptTokenCount/candidatesTokenCount/totalTokenCountmodelVersion:回显你请求的模型名
请求归一化在 convert_request.go 完成:模型别名自动映射到 DeepSeek 模型,generationConfig中的temperature、topP、maxOutputTokens、stopSequences会被透传(见 convert_passthrough.go)。
⚡ 实测二:流式 streamGenerateContent
curl "http://localhost:5001/v1beta/models/gemini-2.5-flash:streamGenerateContent" \ -H "x-goog-api-key: your-api-key" \ -H "Content-Type: application/json" \ -d '{"contents":[{"role":"user","parts":[{"text":"写一个简短摘要"}]}]}'流式运行时会话与重试见 handler_stream_runtime.go,实测行为:
- 响应头为
text/event-stream,每个事件形如data: <json> - 常规文本:持续返回增量 chunk,SDK 端
streamGenerateContent逐块拼接无压力 - 思考模式:
thought=true的增量 chunk 先行推送 - 工具场景:内容会被缓冲,结束时一次性输出完整
functionCall结构,避免参数 JSON 被截断 - 结束 chunk:携带
finishReason: "STOP"与usageMetadata,token 计数优先透传上游,缺失时回退本地估算
🛡️ 稳定性方面,流式链路内置最多 3 次自动重试(completionruntime.ExecuteStreamWithRetry),上游偶发空响应时对客户端完全透明。
🪄 深度解析:请求与响应如何互转
消息转换(convert_messages.go):
systemInstruction→ system 消息role: model→assistant,role: user→user- assistant 的
thought标记 part →reasoning_content,思考历史不丢失 functionCall/functionResponse→ 标准tool_calls/tool消息,call ID 自动补齐
工具转换(convert_tools.go):functionDeclarations自动转成 function 工具,同时兼容 OpenAI 风格的tools直通写法。
思考开关:支持在generationConfig.thinkingConfig.thinkingBudget中显式控制,-nothinking后缀模型名会强制映射到无思考模型。
模型别名:gemini-2.5-pro、gemini-2.5-flash、gemini-3.1-pro、gemini-pro-vision等别名均可直接写入 URL(见 API.md),实际映射到哪个 DeepSeek 模型由配置决定。
⚠️ 错误处理与排坑
Gemini 路由采用 Google 风格错误结构(见 handler_errors.go 与 API.md):
{"error": {"code": 401, "message": "...", "status": "UNAUTHENTICATED"}}常见status值:UNAUTHENTICATED(key 错误)、PERMISSION_DENIED、RESOURCE_EXHAUSTED(限流)、NOT_FOUND(模型别名未配置)。流式请求出错时也会以errorchunk 形式发出,SDK 端可按标准错误分支处理。
✅ 小结
| 能力 | 支持情况 |
|---|---|
| generateContent 非流式 | ✅ 完整 Gemini 响应结构 |
| streamGenerateContent 流式 | ✅ SSE 增量 + 结束 chunk |
| thinking 思考内容 | ✅thought=true独立通道 |
| functionCall 工具调用 | ✅ 流式缓冲完整输出 |
| 模型别名 / thinkingBudget | ✅ 自动映射与透传 |
| 鉴权 | ✅ Bearer / x-goog-api-key / 查询参数 |
一句话总结:只要你的代码是面向 Gemini 协议写的,把 base URL 换成 DS2API,DeepSeek 立刻变成你的"Gemini"。更多接口细节与测试脚本参考 tests/scripts/run-live.sh 和 docs/ARCHITECTURE.md。
【免费下载链接】ds2apiDeepSeek-Compatible Middleware Interface: A technical exploration project in Go, focusing on high-concurrency protocol adaptation. It serves as a reference implementation for converting diverse web protocols into standardized formats.项目地址: https://gitcode.com/GitHub_Trending/ds/ds2api
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考