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:
@@ -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 # 本文档
|
||||
```
|
||||
|
||||
|
||||
Executable
+64
@@ -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
@@ -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)
|
||||
@@ -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 更新完成"
|
||||
|
||||
Reference in New Issue
Block a user