feat: 添加 XMind 模型供应商支持

- 添加 XMind OpenAI 兼容模型(11个模型)
- 添加 XMind Anthropic 兼容模型(5个模型)
- 添加 XMind Vertex AI 兼容模型(3个模型,使用 OpenAI 格式)
- 更新 deploy.sh 支持 XMind API 密钥环境变量
- 添加 build-and-push.sh 脚本用于构建和推送 Docker 镜像
- 更新 README.md 文档说明
This commit is contained in:
zhanggangyong
2026-01-13 08:49:39 +00:00
parent 120b395863
commit d25f43e25b
4 changed files with 336 additions and 22 deletions
+55 -3
View File
@@ -1,6 +1,6 @@
# LiteLLM Azure Container Apps 部署
本项目用于在 Azure Container Apps 上部署 LiteLLM 代理服务器,支持 Taiji AI Cloud 和 OpenRouter 两个模型供应商。
本项目用于在 Azure Container Apps 上部署 LiteLLM 代理服务器,支持 Taiji AI Cloud、OpenRouter 和 XMind 三个模型供应商。
## 架构概览
@@ -25,12 +25,13 @@
│ Cache (SSL) │ │ (SSL) │ │ │
│ Port 10000 │ │ Port 5432 │ │ • Taiji AI Cloud│
└─────────────────┘ └─────────────────┘ │ • OpenRouter │
│ • XMind │
└─────────────────┘
```
## 功能特性
- ✅ **多模型供应商支持**: Taiji AI Cloud 和 OpenRouter
- ✅ **多模型供应商支持**: Taiji AI Cloud、OpenRouter 和 XMind
- ✅ **通配符路由**: 支持 `taiji/*` 和 `openrouter/*` 动态模型路由
- ✅ **Redis SSL 连接**: 安全连接 Azure Redis Cache
- ✅ **PostgreSQL 数据库**: 持久化存储 API 密钥和使用记录
@@ -67,6 +68,21 @@ vim .env
### 2. 构建并推送镜像
#### 方法一:使用快速脚本(推荐)
```bash
# 赋予脚本执行权限
chmod +x build-and-push.sh
# 构建并推送到 ACR(使用 latest 标签)
./build-and-push.sh
# 或指定标签
./build-and-push.sh v1.0.0
```
#### 方法二:使用完整部署脚本
```bash
# 赋予脚本执行权限
chmod +x deploy.sh
@@ -140,6 +156,37 @@ curl -X POST https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps
}'
```
#### 使用 XMind 模型
```bash
# OpenAI 兼容模型
curl -X POST https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps.io/chat/completions \
-H "Authorization: Bearer sk-litellm-master-key" \
-H "Content-Type: application/json" \
-d '{
"model": "xmind/gpt-4o",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# Anthropic 兼容模型
curl -X POST https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps.io/chat/completions \
-H "Authorization: Bearer sk-litellm-master-key" \
-H "Content-Type: application/json" \
-d '{
"model": "xmind/claude-3.7-sonnet",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# Vertex AI 兼容模型
curl -X POST https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps.io/chat/completions \
-H "Authorization: Bearer sk-litellm-master-key" \
-H "Content-Type: application/json" \
-d '{
"model": "xmind/gemini-2.5-pro",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 环境变量说明
| 变量 | 说明 | 必需 |
@@ -153,6 +200,10 @@ curl -X POST https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps
| `REDIS_SSL` | 启用 Redis SSL(true/false) | ✅ |
| `TAIJI_API_KEY` | Taiji AI Cloud API 密钥 | ✅ |
| `OPENROUTER_API_KEY` | OpenRouter API 密钥 | ✅ |
| `XMIND_API_KEY_OPENAI` | XMind OpenAI 兼容 API 密钥(有默认值) | ❌ |
| `XMIND_API_KEY_ANTHROPIC` | XMind Anthropic 兼容 API 密钥(有默认值) | ❌ |
| `XMIND_API_KEY_VERTEX_AI` | XMind Vertex AI 兼容 API 密钥(有默认值) | ❌ |
| `ACR_PASSWORD` | Azure Container Registry 密码(用于推送镜像) | ✅ |
| `UI_USERNAME` | Admin UI 用户名 | ❌ |
| `UI_PASSWORD` | Admin UI 密码 | ❌ |
@@ -238,7 +289,8 @@ litellm/
├── config.yaml # LiteLLM 主配置文件
├── Dockerfile # Docker 构建文件
├── .env.example # 环境变量示例
├── deploy.sh # 部署脚本
├── deploy.sh # 完整部署脚本(构建、推送、部署)
├── build-and-push.sh # 快速构建并推送镜像脚本
└── README.md # 本文档
```
+64
View File
@@ -0,0 +1,64 @@
#!/bin/bash
# 快速构建并推送镜像到 Azure Container Registry
# 使用方法: ./build-and-push.sh [tag]
set -e
# 加载环境变量
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
# 配置
ACR_SERVER="${ACR_SERVER:-agnettaiji.azurecr.io}"
ACR_USERNAME="${ACR_USERNAME:-agnettaiji}"
IMAGE_NAME="${IMAGE_NAME:-litellm}"
# 如果没有提供标签,使用时间戳格式: vYYYYMMDDHHMMSS
if [ -z "$1" ]; then
IMAGE_TAG="v$(date +%Y%m%d%H%M%S)"
else
IMAGE_TAG="$1"
fi
FULL_IMAGE_NAME="${ACR_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}"
echo "=========================================="
echo "构建并推送 Docker 镜像到 ACR"
echo "=========================================="
echo "镜像名称: ${FULL_IMAGE_NAME}"
echo ""
# 检查 ACR 密码
if [ -z "$ACR_PASSWORD" ]; then
echo "错误: 未设置 ACR_PASSWORD 环境变量"
echo "请设置 ACR_PASSWORD 或创建 .env 文件"
exit 1
fi
# 构建镜像(同时打 latest 标签,方便快速引用)
echo "步骤 1/2: 构建 Docker 镜像..."
docker build -t "${FULL_IMAGE_NAME}" -t "${ACR_SERVER}/${IMAGE_NAME}:latest" .
# 登录 ACR
echo ""
echo "步骤 2/2: 推送镜像到 ACR..."
echo "${ACR_PASSWORD}" | docker login "${ACR_SERVER}" -u "${ACR_USERNAME}" --password-stdin
# 推送镜像(推送带版本号的标签和 latest 标签)
docker push "${FULL_IMAGE_NAME}"
docker push "${ACR_SERVER}/${IMAGE_NAME}:latest"
echo ""
echo "=========================================="
echo "完成!镜像已推送到: ${FULL_IMAGE_NAME}"
echo "同时更新了 latest 标签: ${ACR_SERVER}/${IMAGE_NAME}:latest"
echo "=========================================="
echo ""
echo "镜像标签: ${IMAGE_TAG}"
echo ""
echo "下一步: 运行以下命令部署应用:"
echo " ./deploy.sh update"
echo ""
echo "或者运行完整部署:"
echo " ./deploy.sh deploy"
+206 -19
View File
@@ -25,6 +25,37 @@ general_settings:
# VPC 内允许请求继续处理(即使数据库不可用)
allow_requests_on_db_unavailable: true
# ==========================================================================
# 健康检查设置 - 完全禁用
# ==========================================================================
# 禁用所有后台健康检查(不对模型供应商发起健康检测请求)
background_health_checks: false
# 健康检查间隔设置为 0 完全禁用
health_check_interval: 0
# =============================================================================
# 回调设置 - 计费 Webhook
# =============================================================================
litellm_settings:
# 启用回调 - 使用 custom_callback_api 发送到 GENERIC_LOGGER_ENDPOINT
success_callback: ["custom_callback_api"]
failure_callback: ["custom_callback_api"]
# 请求超时(秒)
request_timeout: 600
# 日志设置
set_verbose: false
json_logs: true
# 缓存配置
cache: true
cache_params:
type: redis
host: os.environ/REDIS_HOST
port: os.environ/REDIS_PORT
password: os.environ/REDIS_PASSWORD
# =============================================================================
# 模型列表配置
@@ -4491,6 +4522,178 @@ model_list:
model_info:
disable_background_health_check: true
# -------------------------------------------------------------------------
# XMind 模型(OpenAI 兼容)
# 总计: 12 个模型
# -------------------------------------------------------------------------
- model_name: xmind/gpt-4o-mini
litellm_params:
model: openai/gpt-4o-mini
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-4o
litellm_params:
model: openai/gpt-4o
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-4.1
litellm_params:
model: openai/gpt-4.1
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-image-1
litellm_params:
model: openai/gpt-image-1
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5-nano
litellm_params:
model: openai/gpt-5-nano
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5-mini
litellm_params:
model: openai/gpt-5-mini
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5
litellm_params:
model: openai/gpt-5
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5.1-chat
litellm_params:
model: openai/gpt-5.1-chat
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5.1
litellm_params:
model: openai/gpt-5.1
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5.2
litellm_params:
model: openai/gpt-5.2
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
- model_name: xmind/gpt-5.2-chat
litellm_params:
model: openai/gpt-5.2-chat
api_base: https://apis.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_OPENAI
model_info:
disable_background_health_check: true
# -------------------------------------------------------------------------
# XMind 模型(Anthropic 兼容)
# 总计: 5 个模型
# 端点: https://anthropic.openroutex.com/v1/messages
# 请求头: x-api-key (API 密钥), anthropic-version (API 版本,例如 2023-06-01)
# 注意: 使用 anthropic provider,api_base 设置为完整端点路径
# 模型名称必须使用完整的模型 ID,包括日期后缀
# -------------------------------------------------------------------------
- model_name: xmind/claude-3.7-sonnet
litellm_params:
model: anthropic/claude-3-7-sonnet-20250219
api_base: https://anthropic.openroutex.com/v1/messages
api_key: os.environ/XMIND_API_KEY_ANTHROPIC
model_info:
disable_background_health_check: true
- model_name: xmind/claude-opus-4.1
litellm_params:
model: anthropic/claude-opus-4-1-20250805
api_base: https://anthropic.openroutex.com/v1/messages
api_key: os.environ/XMIND_API_KEY_ANTHROPIC
model_info:
disable_background_health_check: true
- model_name: xmind/claude-sonnet-4.5
litellm_params:
model: anthropic/claude-sonnet-4-5-20250929
api_base: https://anthropic.openroutex.com/v1/messages
api_key: os.environ/XMIND_API_KEY_ANTHROPIC
model_info:
disable_background_health_check: true
- model_name: xmind/claude-haiku-4.5
litellm_params:
model: anthropic/claude-haiku-4-5-20251001
api_base: https://anthropic.openroutex.com/v1/messages
api_key: os.environ/XMIND_API_KEY_ANTHROPIC
model_info:
disable_background_health_check: true
- model_name: xmind/claude-opus-4.5
litellm_params:
model: anthropic/claude-opus-4-5-20251101
api_base: https://anthropic.openroutex.com/v1/messages
api_key: os.environ/XMIND_API_KEY_ANTHROPIC
model_info:
disable_background_health_check: true
# -------------------------------------------------------------------------
# XMind 模型(Google Vertex AI 兼容 - OpenAI 格式)
# 总计: 3 个模型
# 端点: https://vertexai.openroutex.com/oai/v1/chat/completions
# 请求头: Authorization: Bearer {api_key}
# 注意: 使用标准的 OpenAI 兼容 API 格式,使用 openai provider
# 模型名称直接使用模型 ID(如 gemini-2.5-pro)
# -------------------------------------------------------------------------
- model_name: xmind/gemini-2.5-pro
litellm_params:
model: openai/gemini-2.5-pro
api_base: https://vertexai.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_VERTEX_AI
model_info:
disable_background_health_check: true
- model_name: xmind/gemini-2.5-flash
litellm_params:
model: openai/gemini-2.5-flash
api_base: https://vertexai.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_VERTEX_AI
model_info:
disable_background_health_check: true
- model_name: xmind/gemini-3-pro-preview
litellm_params:
model: openai/gemini-3-pro-preview
api_base: https://vertexai.openroutex.com/oai/v1
api_key: os.environ/XMIND_API_KEY_VERTEX_AI
model_info:
disable_background_health_check: true
# =============================================================================
# 路由器设置
# =============================================================================
@@ -4508,25 +4711,6 @@ router_settings:
cooldown_time: 30
retry_after: 10
# =============================================================================
# LiteLLM 设置
# =============================================================================
litellm_settings:
# 请求超时(秒)
request_timeout: 600
# 日志设置
set_verbose: false
json_logs: true
# 缓存配置
cache: true
cache_params:
type: redis
host: os.environ/REDIS_HOST
port: os.environ/REDIS_PORT
password: os.environ/REDIS_PASSWORD
# =============================================================================
# 环境变量说明
# =============================================================================
@@ -4540,3 +4724,6 @@ litellm_settings:
# - REDIS_SSL: 是否启用 Redis SSL(true/false)
# - TAIJI_API_KEY: Taiji AI Cloud API 密钥
# - OPENROUTER_API_KEY: OpenRouter API 密钥
# - XMIND_API_KEY_OPENAI: XMind OpenAI 兼容 API 密钥(默认: 6b761f38b4bf4c829390d82a43f8f32f)
# - XMIND_API_KEY_ANTHROPIC: XMind Anthropic 兼容 API 密钥(默认: 9b123e68b3734856a6983fa229a1f94d)
# - XMIND_API_KEY_VERTEX_AI: XMind Vertex AI 兼容 API 密钥(默认: 854a5b589db44fb0a08c988dd2dd57f8)
+11
View File
@@ -26,6 +26,11 @@ IMAGE_TAG="${IMAGE_TAG:-latest}"
# 完整镜像名称
FULL_IMAGE_NAME="${ACR_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}"
# XMind API 密钥(可选,有默认值)
XMIND_API_KEY_OPENAI="${XMIND_API_KEY_OPENAI:-6b761f38b4bf4c829390d82a43f8f32f}"
XMIND_API_KEY_ANTHROPIC="${XMIND_API_KEY_ANTHROPIC:-9b123e68b3734856a6983fa229a1f94d}"
XMIND_API_KEY_VERTEX_AI="${XMIND_API_KEY_VERTEX_AI:-854a5b589db44fb0a08c988dd2dd57f8}"
# =============================================================================
# 辅助函数
# =============================================================================
@@ -102,6 +107,9 @@ cmd_update() {
"REDIS_SSL=true" \
"TAIJI_API_KEY=secretref:taiji-api-key" \
"OPENROUTER_API_KEY=secretref:openrouter-api-key" \
"XMIND_API_KEY_OPENAI=secretref:xmind-api-key-openai" \
"XMIND_API_KEY_ANTHROPIC=secretref:xmind-api-key-anthropic" \
"XMIND_API_KEY_VERTEX_AI=secretref:xmind-api-key-vertex-ai" \
"LITELLM_MODE=PRODUCTION" \
"LITELLM_LOG=ERROR" \
"UI_USERNAME=${UI_USERNAME:-admin}" \
@@ -127,6 +135,9 @@ cmd_secrets() {
"redis-password=${REDIS_PASSWORD}" \
"taiji-api-key=${TAIJI_API_KEY}" \
"openrouter-api-key=${OPENROUTER_API_KEY}" \
"xmind-api-key-openai=${XMIND_API_KEY_OPENAI}" \
"xmind-api-key-anthropic=${XMIND_API_KEY_ANTHROPIC}" \
"xmind-api-key-vertex-ai=${XMIND_API_KEY_VERTEX_AI}" \
"ui-password=${UI_PASSWORD:-TaijiLiteLLM@2026!}"
log_info "Secrets 更新完成"