File size: 4,626 Bytes
a86303a 59731a8 5217381 59731a8 5217381 c0139c7 5217381 59731a8 5217381 59731a8 c0139c7 59731a8 c0139c7 59731a8 5217381 c0139c7 59731a8 5217381 59731a8 c0139c7 5217381 c0139c7 59731a8 5217381 59731a8 5217381 59731a8 5217381 59731a8 5217381 59731a8 5217381 59731a8 5217381 c0139c7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | ---
title: NVIDIA NIM 响应网关
sdk: docker
app_port: 7860
pinned: false
---
# NVIDIA NIM 响应网关
这是一个面向公开使用的 NVIDIA NIM 兼容网关,同时支持 OpenAI `/v1/responses` 和 Anthropic `/v1/messages` 风格请求。
它不在本地保存任何用户的 NIM API Key。用户调用本项目时,需要自己通过请求头携带 NIM Key,网关只负责协议转换、性能优化、聚合统计和官方模型目录展示。
## 主要能力
- 将 NVIDIA 官方 `POST /v1/chat/completions` 转换为 OpenAI 风格的 `POST /v1/responses`
- 将 NVIDIA 官方 `POST /v1/chat/completions` 转换为 Anthropic 风格的 `POST /v1/messages`
- 支持 tool calling / function calling
- 支持 Anthropic `tools` / `tool_choice` / `tool_result` 以及 Claude Code 常见的客户端工具调用形态
- 支持 `function_call_output` 回灌
- 支持 `previous_response_id` 对话续写
- 对 `/v1/responses` 和 `/v1/responses/{response_id}` 使用用户自带的 NIM Key 做鉴权与上游转发
- 对 `/v1/messages` 使用用户自带的 NIM Key 做鉴权与上游转发,并支持 Anthropic SSE 风格流式事件
- `/v1/models` 直接返回来自 NVIDIA 官方 `/v1/models` 的同步结果,保持 OpenAI 风格结构
- `/` 为白色主题的模型健康度页面,按 10 分钟成功率矩阵展示 MODEL_LIST 中的模型
- `/model_list` 为独立的白色主题官方模型列表页面,支持按提供商筛选模型
- 模型提供商卡片为固定高度,避免模型较多时卡片过长
- 使用共享 HTTP 连接池、SQLite WAL 和异步线程化落库来增强高并发场景下的转发性能
## 用户如何调用
对于 `POST /v1/responses` 和 `POST /v1/messages`,请通过下面任意一种方式传入你自己的 NVIDIA NIM Key:
- `Authorization: Bearer <你的 NIM Key>`
- `X-API-Key: <你的 NIM Key>`
网关不会把原始 Key 持久化到数据库中,只会在内存中用于当前请求,并对响应链路使用 Key 哈希做隔离。
## 官方模型目录同步
项目会定时从官方接口拉取模型列表:
`https://integrate.api.nvidia.com/v1/models`
同步后的模型目录同时用于:
- `GET /v1/models`
- `GET /models`
- `GET /api/catalog`
## 页面与接口
页面:
- `GET /`:模型健康度页面
- `GET /model_list`:官方模型列表页面
前端数据接口:
- `GET /api/dashboard`
- `GET /api/catalog`
兼容接口:
- `POST /v1/responses`
- `POST /v1/messages`
- `GET /v1/responses/{response_id}`
- `GET /v1/models`
- `GET /models`
## 环境变量
- `NVIDIA_API_BASE`:默认 `https://integrate.api.nvidia.com/v1`
- `MODEL_LIST`:健康度页面监控模型列表,逗号分隔
- `MODEL_SYNC_INTERVAL_MINUTES`:官方模型目录同步周期,默认 `30`
- `PUBLIC_HISTORY_BUCKETS`:健康页展示最近多少个 10 分钟时间片,默认 `6`
- `REQUEST_TIMEOUT_SECONDS`:上游请求超时,默认 `90`
- `MAX_UPSTREAM_CONNECTIONS`:共享连接池最大连接数,默认 `512`
- `MAX_KEEPALIVE_CONNECTIONS`:共享连接池最大 keep-alive 连接数,默认 `128`
- `DATABASE_PATH`:默认 `./data.sqlite3`
## 本地验证
我已经完成两层本地联调:
1. Mock 联调:
- 通过 `scripts/local_smoke_test.py` 验证了协议转换、官方模型同步、用户 Key 鉴权、`previous_response_id`、tool call、健康页数据接口、模型页数据接口和两个独立页面路由。
2. 真实上游联调:
- 通过 `scripts/live_e2e_validation.py` 使用提供的测试 NIM Key,真实调用了 NVIDIA 官方模型目录和实际模型响应。
- 实测结果:`live_gateway_ok`,并成功通过 `z-ai/glm5` 得到 `OK`。
## 部署到 Hugging Face Space
1. 新建 Hugging Face Space,SDK 选择 `Docker`
2. 将 `hf_space` 目录内的内容作为 Space 根目录上传
3. 按需配置 `MODEL_LIST` 等环境变量
4. 启动后即可直接公开使用
## 参考资料
- OpenAI Responses API: https://platform.openai.com/docs/guides/responses-vs-chat-completions
- OpenAI Function Calling: https://platform.openai.com/docs/guides/function-calling
- Anthropic Messages API: https://docs.anthropic.com/en/api/messages
- Anthropic Tool Use: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview
- NVIDIA Build: https://build.nvidia.com/
- NVIDIA NIM API 文档: https://docs.api.nvidia.com/
- NVIDIA NIM + Claude Code 集成: https://docs.nvidia.com/nim/large-language-models/latest/ai-assistant-integrations/claude-code.html
|