Skip to content

Commit 4d56e82

Browse files
committed
feat(litellm): 支持 Claude Anthropic 原生模型与 OpenAI 兼容入口
添加了对 Claude Anthropic 原生模型的支持,包括: - 新增 NEWAPI_ANTHROPIC_API_BASE 和 NEWAPI_ANTHROPIC_KEY 环境变量 用于配置独立的 Anthropic 兼容上游入口 - 新增 LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX 开关选项, 用于控制是否禁用 LiteLLM 自动追加 URL 后缀功能 - 在配置中添加 claude-opus-4-6 和 claude-opus-4-7 两个原生模型 - 为 OpenAI 兼容客户端提供 compat/claude-opus-* 别名入口 - 更新文档说明 Claude 模型的使用方式和配置要求 - 修改 compose.yaml 以支持新的环境变量注入机制
1 parent 8e2e1c1 commit 4d56e82

5 files changed

Lines changed: 74 additions & 10 deletions

File tree

ai/gateway/litellm/.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ LITELLM_HOST_PORT=34000
66
NEWAPI_API_BASE=http://new-api.example.com/v1
77
# NewAPI 上游鉴权密钥;LiteLLM 会透传它请求 `/chat/completions`、`/models` 等接口。
88
NEWAPI_KEY=sk-newapi-dev-xxxx
9+
# 可选:如果 Claude 需要走独立 Anthropic 兼容入口,再单独覆盖这两个变量。
10+
# 不配置时,Claude 默认继承 `NEWAPI_API_BASE` 与 `NEWAPI_KEY`。
11+
# NEWAPI_ANTHROPIC_API_BASE=http://anthropic-api.example.com
12+
# NEWAPI_ANTHROPIC_KEY=sk-anthropic-dev-xxxx
13+
# 如果上游地址已经包含完整 Anthropic API 路径,可取消注释以禁止 LiteLLM 自动追加 URL 后缀。
14+
# LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true
915
# 智谱 GLM Coding Plan OpenAI 兼容端点;默认建议使用官方专属地址。
1016
Z_AI_CODING_API_BASE=https://open.bigmodel.cn/api/coding/paas/v4
1117
# 智谱 GLM Coding Plan 上游密钥;LiteLLM 会用它转发 `GLM-*` 请求。

ai/gateway/litellm/.env.production.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ LITELLM_HOST_PORT=34000
66
NEWAPI_API_BASE=https://new-api.internal.example.com/v1
77
# 生产环境 NewAPI 密钥;建议由密钥管理系统注入。
88
NEWAPI_KEY=sk-newapi-prod-change-me
9+
# 可选:如果生产环境要把 Claude 拆到独立 Anthropic 兼容入口,再单独覆盖这两个变量。
10+
# 不配置时,Claude 默认继承 `NEWAPI_API_BASE` 与 `NEWAPI_KEY`。
11+
# NEWAPI_ANTHROPIC_API_BASE=https://anthropic.internal.example.com
12+
# NEWAPI_ANTHROPIC_KEY=sk-anthropic-prod-change-me
13+
# 如果生产环境入口已包含完整 Anthropic API 路径,可取消注释以禁止 LiteLLM 自动追加 URL 后缀。
14+
# LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true
915
# 生产环境智谱 Coding Plan 端点;如需代理或专线可在此覆盖。
1016
Z_AI_CODING_API_BASE=https://open.bigmodel.cn/api/coding/paas/v4
1117
# 生产环境智谱密钥;建议由密钥管理系统注入。

ai/gateway/litellm/compose.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ services:
1818
# 当前本地配置同时走 NewAPI 与智谱 OpenAI 兼容接口;变量必须显式注入容器,LiteLLM 才能解析 os.environ/...。
1919
NEWAPI_API_BASE: ${NEWAPI_API_BASE:-}
2020
NEWAPI_KEY: ${NEWAPI_KEY:-}
21+
# Claude 优先走专用 Anthropic 兼容上游;若未单独配置,则自动复用通用 NewAPI 地址。
22+
NEWAPI_ANTHROPIC_API_BASE: ${NEWAPI_ANTHROPIC_API_BASE:-${NEWAPI_API_BASE:-}}
23+
NEWAPI_ANTHROPIC_KEY: ${NEWAPI_ANTHROPIC_KEY:-${NEWAPI_KEY:-}}
24+
# 某些 Anthropic 兼容网关已自带完整路径时,可通过这个开关禁止 LiteLLM 自动补后缀。
25+
LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX: ${LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX:-}
2126
# 智谱 GLM Coding Plan 走独立 OpenAI 兼容端点,默认指向官方专属地址。
2227
Z_AI_CODING_API_BASE: ${Z_AI_CODING_API_BASE:-https://open.bigmodel.cn/api/coding/paas/v4}
2328
Z_AI_API_KEY: ${Z_AI_API_KEY:-}

ai/gateway/litellm/litellm.md

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# LiteLLM 网关说明
22

3-
这个目录用于启动一个基于 LiteLLM Proxy 的 OpenAI 兼容网关,当前默认同时支持 NewAPI 与智谱 GLM Coding Plan 两类上游
3+
这个目录用于启动一个基于 LiteLLM Proxy 的多上游网关,当前默认同时支持 NewAPI OpenAI 兼容模型、Claude Anthropic 原生模型与智谱 GLM Coding Plan。
44

55
相关文件职责如下:
66

@@ -10,7 +10,7 @@
1010
- `start.ps1`:统一入口,封装常用 `docker compose` 操作。
1111
- `.env.example`:开发环境变量示例。
1212
- `.env.production.example`:生产环境变量示例。
13-
- `.env.local`:本地私有环境变量,保存 `NEWAPI_API_BASE``NEWAPI_KEY``Z_AI_CODING_API_BASE``Z_AI_API_KEY``LITELLM_MASTER_KEY`、可选 `DATABASE_URL`
13+
- `.env.local`:本地私有环境变量,保存 `NEWAPI_API_BASE``NEWAPI_KEY`可选的 `NEWAPI_ANTHROPIC_API_BASE` / `NEWAPI_ANTHROPIC_KEY``Z_AI_CODING_API_BASE``Z_AI_API_KEY``LITELLM_MASTER_KEY`、可选 `DATABASE_URL`
1414

1515
固定常量如 `PORT=4000``CONFIG_FILE_PATH=/app/config.yaml` 保留在 `compose.yaml` 内部;环境差异值建议集中在 `.env.local`,再通过 `start.ps1` 追加的 `--env-file``compose.yaml``environment` 白名单注入到容器。
1616

@@ -23,10 +23,14 @@ LITELLM_IMAGE=docker.litellm.ai/berriai/litellm:main-latest
2323
LITELLM_HOST_PORT=34000
2424
NEWAPI_API_BASE=http://new-api.example.com/v1
2525
NEWAPI_KEY=sk-newapi-dev-xxxx
26+
# 可选:只有 Claude 需要单独上游时才覆盖;否则默认复用 NEWAPI_API_BASE / NEWAPI_KEY
27+
# NEWAPI_ANTHROPIC_API_BASE=http://anthropic-api.example.com
28+
# NEWAPI_ANTHROPIC_KEY=sk-anthropic-dev-xxxx
2629
Z_AI_CODING_API_BASE=https://open.bigmodel.cn/api/coding/paas/v4
2730
Z_AI_API_KEY=sk-zai-dev-xxxx
2831
LITELLM_MASTER_KEY=sk-litellm-123456
2932
DATABASE_URL=postgresql://postgres:12345678@host.docker.internal:5432/litellm
33+
# LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true
3034
```
3135

3236
说明:
@@ -35,6 +39,9 @@ DATABASE_URL=postgresql://postgres:12345678@host.docker.internal:5432/litellm
3539
- `LITELLM_HOST_PORT`:宿主机暴露端口,默认 `34000`
3640
- `NEWAPI_API_BASE`:NewAPI 的 OpenAI 兼容接口地址,建议带上 `/v1`
3741
- `NEWAPI_KEY`:LiteLLM 转发到 NewAPI 时使用的上游密钥。
42+
- `NEWAPI_ANTHROPIC_API_BASE`:可选覆盖项;如果 Claude 需要走独立 Anthropic 兼容入口,可填写已被 Claude Code 验证可用的地址。不配置时,Claude 默认复用 `NEWAPI_API_BASE`
43+
- `NEWAPI_ANTHROPIC_KEY`:可选覆盖项;如果 Claude 需要独立上游密钥可单独提供。不配置时,Claude 默认复用 `NEWAPI_KEY`
44+
- `LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX`:可选开关;如果 Claude 实际使用的 Anthropic 上游地址已经包含完整 API 路径,可设置为 `true` 禁止 LiteLLM 自动追加后缀。
3845
- `Z_AI_CODING_API_BASE`:智谱 GLM Coding Plan 的 OpenAI 兼容接口地址,默认建议使用官方专属端点。
3946
- `Z_AI_API_KEY`:LiteLLM 转发 `GLM-*` 请求到智谱 Coding Plan 时使用的上游密钥。
4047
- `LITELLM_MASTER_KEY`:LiteLLM Proxy 对外暴露的网关密钥。
@@ -116,6 +123,20 @@ curl http://127.0.0.1:34000/v1/chat/completions `
116123
-d "{\"model\":\"gemini-2.5-flash\",\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]}"
117124
```
118125

126+
如果你使用的是 OpenAI 兼容客户端,但想访问 Claude,请显式传 `compat/...` 别名,例如:
127+
128+
```powershell
129+
curl http://127.0.0.1:34000/v1/chat/completions `
130+
-H "Content-Type: application/json" `
131+
-H "Authorization: Bearer sk-litellm-123456" `
132+
-d "{\"model\":\"compat/claude-opus-4-6\",\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]}"
133+
```
134+
135+
说明:
136+
137+
- 默认 `claude-opus-*` 设计给 Anthropic 兼容客户端优先使用。
138+
- `compat/claude-opus-*` 只是在 LiteLLM 内表达“这是给 OpenAI 兼容客户端保留的 Claude 入口”,底层仍然走同一个 Anthropic 原生上游。
139+
119140
如果你想通过 LiteLLM 调用 GLM Coding Plan,可直接传官方模型名,例如:
120141

121142
```powershell
@@ -134,14 +155,17 @@ curl "http://127.0.0.1:34000/models?return_wildcard_routes=true" `
134155
-H "x-litellm-api-key: sk-litellm-123456"
135156
```
136157

137-
当前 `litellm.local.yaml` 默认显式注册了 `gpt-5.4``gemini-3.1-pro``claude-opus-4-6``GLM-5.1` 四个主模型,并在末尾保留 `GLM-*``*` 两条 fallback 路由。因此 `/models` 会返回显式模型加上两条通配兜底路由。默认会看到类似下面的结果:
158+
当前 `litellm.local.yaml` 默认显式注册了 `gpt-5.4``gemini-3.1-pro``claude-opus-4-6``claude-opus-4-7``compat/claude-opus-4-6``compat/claude-opus-4-7``GLM-5.1` 七个主模型,并在末尾保留 `GLM-*``*` 两条 fallback 路由。因此 `/models` 会返回显式模型加上两条通配兜底路由。默认会看到类似下面的结果:
138159

139160
```json
140161
{
141162
"data": [
142163
{"id": "gpt-5.4", "object": "model"},
143164
{"id": "gemini-3.1-pro", "object": "model"},
144165
{"id": "claude-opus-4-6", "object": "model"},
166+
{"id": "claude-opus-4-7", "object": "model"},
167+
{"id": "compat/claude-opus-4-6", "object": "model"},
168+
{"id": "compat/claude-opus-4-7", "object": "model"},
145169
{"id": "GLM-5.1", "object": "model"},
146170
{"id": "GLM-*", "object": "model"},
147171
{"id": "*", "object": "model"}
@@ -168,6 +192,7 @@ curl "$env:Z_AI_CODING_API_BASE/models" `
168192

169193
- 不要在当前配置下使用 `only_model_access_groups=true`,因为默认没有配置 model access groups,请求结果会是空数组。
170194
- 如果客户端直接传 `model=qwen-plus` 之类的名称,前提是该名称必须真实存在于 NewAPI 的 `/models` 返回结果中。
195+
- 如果客户端使用 OpenAI 兼容接口访问 Claude,建议显式传 `compat/claude-opus-*`,不要再把默认 `claude-opus-*` 当作 OpenAI 上游模型名理解。
171196
- 如果客户端直接传 `model=GLM-4.7` 之类的官方名称,前提是该名称必须真实存在于智谱 Coding Plan 的 `/models` 返回结果中。
172197
- 显式注册之外的 GLM 模型不会自动展开进 LiteLLM 的 `/models` 列表;它们会优先通过 `GLM-*` fallback 转发到智谱上游。
173198
- 其它显式注册之外的非 GLM 模型,仍然通过最后的 `*` fallback 透传到 NewAPI。
@@ -176,10 +201,12 @@ curl "$env:Z_AI_CODING_API_BASE/models" `
176201

177202
当前 `litellm.local.yaml` 的关键点:
178203

179-
- `model_list`:显式注册 `gpt-5.4``gemini-3.1-pro``claude-opus-4-6``GLM-5.1` 四个主模型,并追加 `GLM-*``*` 两层兜底。
204+
- `model_list`:显式注册 `gpt-5.4``gemini-3.1-pro`两条默认 Claude 原生模型、两条 Claude 兼容别名、`GLM-5.1`,并追加 `GLM-*``*` 两层兜底。
180205
- 显式模型优先:常用模型可以稳定出现在 `/models` 里,也方便客户端按固定名称接入。
206+
- `claude-opus-*`:默认映射到 LiteLLM 的 Anthropic provider,优先服务 Anthropic 兼容客户端。
207+
- `compat/claude-opus-*`:为 OpenAI 兼容客户端保留显式 Claude 别名,但底层仍然走同一个 Anthropic 原生上游。
181208
- `GLM-*` fallback:对智谱 Coding Plan 已存在但未显式注册的 GLM 官方模型保留透传能力,同时避免误落到 NewAPI。
182209
- `*` fallback:对 NewAPI 已存在但未显式注册的非 GLM 模型保留透传能力,减少频繁改本地配置的成本。
183-
- `litellm_params.model`显式模型和通配规则都映射到 `openai/<模型名>` 形式,继续通过 OpenAI 兼容接口转发到各自上游
210+
- `litellm_params.model`OpenAI / Gemini / GLM 继续映射到 `openai/<模型名>`;Claude 显式模型与兼容别名映射到 `anthropic/<模型名>`
184211
- `master_key`:开启 LiteLLM 网关鉴权,避免任何能访问端口的客户端都直接调用上游。
185212
- `Codex` 直连:当前 `ai/coding/codex/config.toml` 里的 `z.ai` provider 保持不变;本目录改动只补充 LiteLLM 网关入口。

ai/gateway/litellm/newapi.yaml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,33 @@ model_list:
1414
<<: *newapi_openai_params
1515
# 继续走 OpenAI 兼容入口,由 NewAPI 负责实际模型分发。
1616
model: "openai/gemini-3.1-pro"
17-
# 显式注册 Claude 系列模型,便于 LiteLLM 直接暴露固定模型列表
17+
# Claude 默认走 Anthropic 原生上游,避免再依赖上游做 OpenAI -> Claude 转换
1818
- model_name: "claude-opus-4-6"
19+
litellm_params: &newapi_anthropic_params
20+
# 这里单独声明 Claude 原生上游入口,避免和 OpenAI 兼容入口混用。
21+
api_base: "os.environ/NEWAPI_ANTHROPIC_API_BASE" # 从环境变量读 Anthropic 兼容地址
22+
api_key: "os.environ/NEWAPI_ANTHROPIC_KEY" # 从环境变量读 Anthropic 上游密钥
23+
# 使用 LiteLLM 的 Anthropic provider,把 Claude 请求按原生协议发给上游。
24+
model: "anthropic/claude-opus-4-6"
25+
- model_name: "claude-opus-4-7"
1926
litellm_params:
20-
# 复用同一个 NewAPI OpenAI 兼容入口,只覆盖具体模型名。
21-
<<: *newapi_openai_params
22-
# 使用上游真实模型 id,避免代理别名与 NewAPI 模型名脱节。
23-
model: "openai/claude-opus-4-6"
27+
# 复用同一个 Claude 原生上游入口,只覆盖具体模型名。
28+
<<: *newapi_anthropic_params
29+
# 保持官方模型名,避免 LiteLLM 对外别名与上游模型脱节。
30+
model: "anthropic/claude-opus-4-7"
31+
# 为 OpenAI 兼容客户端保留显式别名,但底层仍走同一个 Anthropic 原生上游。
32+
- model_name: "compat/claude-opus-4-6"
33+
litellm_params:
34+
# 复用 Claude 原生上游,只通过模型名表达“兼容入口”的使用语义。
35+
<<: *newapi_anthropic_params
36+
# 兼容别名与默认模型共享同一上游,避免行为分叉。
37+
model: "anthropic/claude-opus-4-6"
38+
- model_name: "compat/claude-opus-4-7"
39+
litellm_params:
40+
# 复用 Claude 原生上游,只通过模型名表达“兼容入口”的使用语义。
41+
<<: *newapi_anthropic_params
42+
# 兼容别名与默认模型共享同一上游,避免行为分叉。
43+
model: "anthropic/claude-opus-4-7"
2444
# 显式注册 GLM Coding Plan 主模型,便于 `/models` 稳定暴露官方模型名。
2545
- model_name: "GLM-5.1"
2646
litellm_params: &zai_openai_params

0 commit comments

Comments
 (0)