feat: 配置OpenRouter和RapidAPI密钥管理
- 统一密钥管理:创建 .env 文件集中管理所有API密钥 - 添加 OpenRouter 支持:配置 GPT-4o-mini 和 Claude 3.5 Sonnet 模型 - 添加 RapidAPI 支持:配置数据接入服务的 RapidAPI Key - 修复 LiteLLM Prisma 兼容性:降级到 Prisma 5.8.0 - 修复模型 ID:更正 Claude 模型 ID 为 claude-3.5-sonnet - 优化配置:调整 max_tokens 参数避免超限 - 文档更新:添加环境变量配置说明文档 测试状态: - Claude 3.5 Sonnet: ✅ 正常 - GPT-4o-mini: ✅ 正常 - Data Ingestion: ✅ 正常
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# taiji-AI-PAD 环境变量配置模板
|
||||
# 复制此文件为 .env 并填写实际的密钥值
|
||||
# cp .env.example .env
|
||||
|
||||
# ========== 数据库配置 ==========
|
||||
POSTGRES_DB=taiji_db
|
||||
POSTGRES_USER=taiji_user
|
||||
POSTGRES_PASSWORD=taiji_pass
|
||||
|
||||
# ========== LiteLLM 网关配置 ==========
|
||||
LITELLM_MASTER_KEY=sk-taiji-master-key
|
||||
|
||||
# ========== OpenRouter 配置 ==========
|
||||
OPENROUTER_API_KEY=your-openrouter-api-key-here
|
||||
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
||||
|
||||
# ========== RapidAPI 配置 ==========
|
||||
RAPIDAPI_KEY=your-rapidapi-key-here
|
||||
RAPIDAPI_HOST=rapidapi.com
|
||||
|
||||
# ========== OpenAI 配置(可选)==========
|
||||
# OPENAI_API_KEY=your-openai-api-key-here
|
||||
|
||||
# ========== Anthropic 配置(可选)==========
|
||||
# ANTHROPIC_API_KEY=your-anthropic-api-key-here
|
||||
|
||||
# ========== Langfuse 配置(可选,用于监控)==========
|
||||
# LANGFUSE_PUBLIC_KEY=your-langfuse-public-key
|
||||
# LANGFUSE_SECRET_KEY=your-langfuse-secret-key
|
||||
# LANGFUSE_HOST=https://cloud.langfuse.com
|
||||
|
||||
# ========== 其他服务配置 ==========
|
||||
REDIS_URL=redis://redis:6379
|
||||
NATS_URL=nats://nats:4222
|
||||
DATABASE_URL=postgresql://taiji_user:taiji_pass@postgres:5432/taiji_db
|
||||
@@ -0,0 +1,166 @@
|
||||
# taiji-AI-PAD 环境变量配置说明
|
||||
|
||||
## 📋 概述
|
||||
|
||||
为了简化配置管理,所有 API Key 和敏感信息现在统一在 `.env` 文件中管理。您只需要在一个地方填写所有密钥,无需在多个配置文件中重复填写。
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. 创建环境变量文件
|
||||
|
||||
如果项目中没有 `.env` 文件,请复制模板:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
### 2. 编辑 `.env` 文件
|
||||
|
||||
打开 `.env` 文件,填写您的实际 API Key:
|
||||
|
||||
```bash
|
||||
nano .env
|
||||
# 或使用您喜欢的编辑器
|
||||
```
|
||||
|
||||
### 3. 配置项说明
|
||||
|
||||
#### 必需配置项
|
||||
|
||||
| 配置项 | 说明 | 示例 |
|
||||
|--------|------|------|
|
||||
| `OPENROUTER_API_KEY` | OpenRouter API 密钥 | `sk-or-v1-...` |
|
||||
| `RAPIDAPI_KEY` | RapidAPI 密钥 | `33902cc39dmsh...` |
|
||||
| `LITELLM_MASTER_KEY` | LiteLLM 主密钥 | `sk-taiji-master-key` |
|
||||
|
||||
#### 可选配置项
|
||||
|
||||
| 配置项 | 说明 | 何时需要 |
|
||||
|--------|------|----------|
|
||||
| `OPENAI_API_KEY` | OpenAI API 密钥 | 使用 OpenAI 模型时 |
|
||||
| `ANTHROPIC_API_KEY` | Anthropic API 密钥 | 使用 Claude 模型时 |
|
||||
| `LANGFUSE_*` | Langfuse 监控配置 | 启用监控功能时 |
|
||||
|
||||
## 📝 当前配置的密钥位置
|
||||
|
||||
### ✅ 已统一管理的密钥
|
||||
|
||||
以下密钥现在都在 `.env` 文件中:
|
||||
|
||||
1. **OpenRouter API Key** - 用于模型网关
|
||||
2. **RapidAPI Key** - 用于数据接入服务
|
||||
3. **LiteLLM Master Key** - 用于模型网关认证
|
||||
|
||||
### 📍 配置文件位置
|
||||
|
||||
- **`.env`** - 实际环境变量文件(包含真实密钥,已加入 .gitignore)
|
||||
- **`.env.example`** - 配置模板文件(可提交到 Git)
|
||||
- **`docker-compose.yml`** - 使用 `${VAR}` 语法引用环境变量
|
||||
|
||||
## 🔧 如何添加新的 API Key
|
||||
|
||||
### 步骤 1: 在 `.env` 文件中添加
|
||||
|
||||
```bash
|
||||
# 在 .env 文件中添加
|
||||
NEW_API_KEY=your-new-api-key-here
|
||||
```
|
||||
|
||||
### 步骤 2: 在 `docker-compose.yml` 中引用
|
||||
|
||||
```yaml
|
||||
services:
|
||||
your-service:
|
||||
environment:
|
||||
- NEW_API_KEY=${NEW_API_KEY}
|
||||
```
|
||||
|
||||
### 步骤 3: 在代码中读取
|
||||
|
||||
```python
|
||||
import os
|
||||
api_key = os.getenv("NEW_API_KEY", "")
|
||||
```
|
||||
|
||||
## 🔒 安全注意事项
|
||||
|
||||
1. **⚠️ 永远不要提交 `.env` 文件到 Git**
|
||||
- `.env` 文件已在 `.gitignore` 中
|
||||
- 只提交 `.env.example` 作为模板
|
||||
|
||||
2. **生产环境建议**
|
||||
- 使用密钥管理服务(如 AWS Secrets Manager)
|
||||
- 使用环境变量注入(如 Kubernetes Secrets)
|
||||
- 定期轮换 API Key
|
||||
|
||||
3. **权限控制**
|
||||
- 确保 `.env` 文件权限为 `600`(仅所有者可读写)
|
||||
```bash
|
||||
chmod 600 .env
|
||||
```
|
||||
|
||||
## 📊 配置项清单
|
||||
|
||||
### 当前已配置的密钥
|
||||
|
||||
- ✅ OpenRouter API Key
|
||||
- ✅ RapidAPI Key
|
||||
- ✅ LiteLLM Master Key
|
||||
|
||||
### 可选配置的密钥
|
||||
|
||||
- ⚪ OpenAI API Key(如需要直接使用 OpenAI)
|
||||
- ⚪ Anthropic API Key(如需要直接使用 Anthropic)
|
||||
- ⚪ Langfuse 监控密钥(如需要启用监控)
|
||||
|
||||
## 🧪 验证配置
|
||||
|
||||
配置完成后,验证环境变量是否正确加载:
|
||||
|
||||
```bash
|
||||
# 检查环境变量
|
||||
docker-compose config | grep -E "OPENROUTER|RAPIDAPI|LITELLM"
|
||||
|
||||
# 重启服务以应用新配置
|
||||
docker-compose restart litellm-gateway data-ingestion
|
||||
|
||||
# 检查服务健康状态
|
||||
curl http://localhost:4000/health # LiteLLM Gateway
|
||||
curl http://localhost:8001/health # Data Ingestion
|
||||
```
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [Docker Compose 环境变量文档](https://docs.docker.com/compose/environment-variables/)
|
||||
- [项目 README](../README.md)
|
||||
- [测试准备说明](./测试准备说明.md)
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
### Q: 为什么需要 `.env` 文件?
|
||||
|
||||
A: `.env` 文件可以:
|
||||
- 集中管理所有密钥
|
||||
- 避免在代码中硬编码敏感信息
|
||||
- 方便不同环境使用不同配置
|
||||
- 提高安全性(不提交到 Git)
|
||||
|
||||
### Q: 如何在不同环境使用不同配置?
|
||||
|
||||
A: 可以创建多个环境文件:
|
||||
- `.env.development` - 开发环境
|
||||
- `.env.production` - 生产环境
|
||||
- `.env.testing` - 测试环境
|
||||
|
||||
然后使用:
|
||||
```bash
|
||||
docker-compose --env-file .env.production up
|
||||
```
|
||||
|
||||
### Q: 忘记填写某个 Key 会怎样?
|
||||
|
||||
A: 如果某个环境变量未设置,Docker Compose 会使用空字符串或默认值。服务可能会启动失败或功能受限。请检查服务日志:
|
||||
```bash
|
||||
docker-compose logs service-name
|
||||
```
|
||||
|
||||
+15
-6
@@ -1,5 +1,8 @@
|
||||
version: '3.8'
|
||||
|
||||
# Docker Compose 会自动从 .env 文件读取环境变量
|
||||
# 所有 ${VAR} 形式的变量都会从 .env 文件中获取
|
||||
|
||||
services:
|
||||
# 数据库服务
|
||||
postgres:
|
||||
@@ -54,9 +57,12 @@ services:
|
||||
ports:
|
||||
- "4000:4000"
|
||||
environment:
|
||||
- LITELLM_MASTER_KEY=sk-taiji-master-key
|
||||
- DATABASE_URL=postgresql://taiji_user:taiji_pass@postgres:5432/taiji_db
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
|
||||
- DATABASE_URL=${DATABASE_URL}
|
||||
- REDIS_URL=${REDIS_URL}
|
||||
# OpenRouter 配置
|
||||
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
|
||||
- OPENROUTER_BASE_URL=${OPENROUTER_BASE_URL}
|
||||
volumes:
|
||||
- ./services/model-gateway/config:/app/config
|
||||
- ./logs:/app/logs
|
||||
@@ -76,9 +82,12 @@ services:
|
||||
ports:
|
||||
- "8001:8000"
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://taiji_user:taiji_pass@postgres:5432/taiji_db
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- NATS_URL=nats://nats:4222
|
||||
- DATABASE_URL=${DATABASE_URL}
|
||||
- REDIS_URL=${REDIS_URL}
|
||||
- NATS_URL=${NATS_URL}
|
||||
# RapidAPI 配置
|
||||
- RAPIDAPI_KEY=${RAPIDAPI_KEY}
|
||||
- RAPIDAPI_HOST=${RAPIDAPI_HOST}
|
||||
volumes:
|
||||
- ./services/data-ingestion:/app
|
||||
- ./logs:/app/logs
|
||||
|
||||
@@ -19,11 +19,15 @@ WORKDIR /app
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
|
||||
# 安装LiteLLM和prisma (使用国内源)
|
||||
# 注意:Prisma Python 客户端 0.12.0 需要 Prisma CLI 5.8.0
|
||||
# 需要同时安装 Prisma CLI 和 Python 客户端
|
||||
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple \
|
||||
litellm[proxy]==1.17.0 \
|
||||
redis==5.0.1 \
|
||||
prometheus-client==0.19.0 && \
|
||||
npm install -g prisma
|
||||
prometheus-client==0.19.0 \
|
||||
prisma==0.12.0 && \
|
||||
(rm -f /usr/local/bin/prisma || true) && \
|
||||
npm install -g prisma@5.8.0
|
||||
|
||||
# 复制配置文件
|
||||
COPY config/ ./config/
|
||||
|
||||
@@ -136,6 +136,71 @@ model_list:
|
||||
input_cost_per_token: 0.0 # 本地模型无成本
|
||||
output_cost_per_token: 0.0
|
||||
|
||||
# OpenRouter 模型组 - 通过 OpenRouter 访问多种模型
|
||||
- model_name: "openrouter-gpt-4"
|
||||
litellm_params:
|
||||
model: "openrouter/openai/gpt-4"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 8000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: false
|
||||
max_input_tokens: 8192
|
||||
max_output_tokens: 8192
|
||||
input_cost_per_token: 0.00003
|
||||
output_cost_per_token: 0.00006
|
||||
|
||||
- model_name: "openrouter-gpt-3.5-turbo"
|
||||
litellm_params:
|
||||
model: "openrouter/openai/gpt-3.5-turbo"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 4000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: false
|
||||
max_input_tokens: 16385
|
||||
max_output_tokens: 4096
|
||||
input_cost_per_token: 0.0000015
|
||||
output_cost_per_token: 0.000002
|
||||
|
||||
- model_name: "openrouter-claude-3.5-sonnet"
|
||||
litellm_params:
|
||||
model: "openrouter/anthropic/claude-3.5-sonnet"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 4000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: true
|
||||
max_input_tokens: 200000
|
||||
max_output_tokens: 4096
|
||||
input_cost_per_token: 0.000003
|
||||
output_cost_per_token: 0.000015
|
||||
|
||||
- model_name: "openrouter-claude-3-opus"
|
||||
litellm_params:
|
||||
model: "openrouter/anthropic/claude-3-opus"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 4000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: true
|
||||
max_input_tokens: 200000
|
||||
max_output_tokens: 4096
|
||||
input_cost_per_token: 0.000015
|
||||
output_cost_per_token: 0.000075
|
||||
|
||||
# 路由器配置
|
||||
router_settings:
|
||||
routing_strategy: "least-busy" # 路由策略: least-busy, round-robin, latency-based
|
||||
@@ -183,13 +248,24 @@ router_settings:
|
||||
weight: 0.3
|
||||
- model_name: "claude-3-sonnet"
|
||||
weight: 0.3
|
||||
|
||||
- group_name: "openrouter-group"
|
||||
models:
|
||||
- model_name: "openrouter-gpt-4"
|
||||
weight: 0.3
|
||||
- model_name: "openrouter-gpt-3.5-turbo"
|
||||
weight: 0.3
|
||||
- model_name: "openrouter-claude-3.5-sonnet"
|
||||
weight: 0.25
|
||||
- model_name: "openrouter-claude-3-opus"
|
||||
weight: 0.15
|
||||
|
||||
# 用户和权限配置
|
||||
litellm_settings:
|
||||
# API密钥管理
|
||||
api_keys:
|
||||
- key: "sk-taiji-mcp-server"
|
||||
models: ["gpt-3.5-turbo", "gpt-4", "claude-3-haiku", "claude-3-sonnet"]
|
||||
models: ["gpt-3.5-turbo", "gpt-4", "claude-3-haiku", "claude-3-sonnet", "openrouter-gpt-4", "openrouter-gpt-3.5-turbo", "openrouter-claude-3.5-sonnet"]
|
||||
max_budget: 100.0
|
||||
budget_duration: "1d"
|
||||
metadata:
|
||||
@@ -197,7 +273,7 @@ litellm_settings:
|
||||
service: "mcp-server"
|
||||
|
||||
- key: "sk-taiji-data-ingestion"
|
||||
models: ["gpt-3.5-turbo", "claude-3-haiku", "llama-3-8b"]
|
||||
models: ["gpt-3.5-turbo", "claude-3-haiku", "llama-3-8b", "openrouter-gpt-3.5-turbo", "openrouter-claude-3.5-sonnet"]
|
||||
max_budget: 50.0
|
||||
budget_duration: "1d"
|
||||
metadata:
|
||||
@@ -205,7 +281,7 @@ litellm_settings:
|
||||
service: "data-ingestion"
|
||||
|
||||
- key: "sk-taiji-agent-dev"
|
||||
models: ["gpt-3.5-group", "claude-group", "fast-models"]
|
||||
models: ["gpt-3.5-group", "claude-group", "fast-models", "openrouter-group"]
|
||||
max_budget: 20.0
|
||||
budget_duration: "1d"
|
||||
metadata:
|
||||
@@ -213,7 +289,7 @@ litellm_settings:
|
||||
service: "agent-development"
|
||||
|
||||
- key: "sk-taiji-premium"
|
||||
models: ["premium-models", "gpt-4-group"]
|
||||
models: ["premium-models", "gpt-4-group", "openrouter-group", "openrouter-gpt-4", "openrouter-claude-3-opus", "openrouter-claude-3.5-sonnet"]
|
||||
max_budget: 200.0
|
||||
budget_duration: "1d"
|
||||
metadata:
|
||||
@@ -278,9 +354,13 @@ error_handling:
|
||||
fallback:
|
||||
enabled: true
|
||||
fallback_models:
|
||||
"gpt-4": ["gpt-4-turbo", "claude-3-sonnet"]
|
||||
"claude-3-opus": ["claude-3-sonnet", "gpt-4"]
|
||||
"gpt-3.5-turbo": ["claude-3-haiku", "llama-3-8b"]
|
||||
"gpt-4": ["openrouter-gpt-4", "gpt-4-turbo", "claude-3-sonnet", "openrouter-claude-3-sonnet"]
|
||||
"claude-3-opus": ["openrouter-claude-3-opus", "claude-3-sonnet", "openrouter-claude-3-sonnet", "gpt-4", "openrouter-gpt-4"]
|
||||
"gpt-3.5-turbo": ["openrouter-gpt-3.5-turbo", "claude-3-haiku", "llama-3-8b"]
|
||||
"openrouter-gpt-4": ["gpt-4", "gpt-4-turbo", "openrouter-claude-3.5-sonnet"]
|
||||
"openrouter-gpt-3.5-turbo": ["gpt-3.5-turbo", "claude-3-haiku"]
|
||||
"openrouter-claude-3.5-sonnet": ["claude-3-sonnet", "gpt-4", "openrouter-gpt-4"]
|
||||
"openrouter-claude-3-opus": ["claude-3-opus", "claude-3-sonnet", "openrouter-claude-3.5-sonnet"]
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
|
||||
@@ -13,7 +13,7 @@ general_settings:
|
||||
# 安全设置
|
||||
allowed_ips: ["127.0.0.1", "172.20.0.0/16", "0.0.0.0/0"] # 允许所有IP用于测试
|
||||
|
||||
# 模型配置 - 使用测试模型
|
||||
# 模型配置 - 使用测试模型和 OpenRouter
|
||||
model_list:
|
||||
# 使用HuggingFace的免费模型进行测试
|
||||
- model_name: "test-model"
|
||||
@@ -25,6 +25,43 @@ model_list:
|
||||
supports_function_calling: false
|
||||
supports_vision: false
|
||||
|
||||
# OpenRouter 模型 - 通过 OpenRouter 访问
|
||||
- model_name: "openrouter-gpt-4o-mini"
|
||||
litellm_params:
|
||||
model: "openrouter/openai/gpt-4o-mini"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 1000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: false
|
||||
|
||||
- model_name: "openrouter-gpt-3.5-turbo"
|
||||
litellm_params:
|
||||
model: "openrouter/openai/gpt-3.5-turbo"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 1000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: false
|
||||
|
||||
- model_name: "openrouter-claude-3.5-sonnet"
|
||||
litellm_params:
|
||||
model: "openrouter/anthropic/claude-3.5-sonnet"
|
||||
api_key: "os.environ/OPENROUTER_API_KEY"
|
||||
api_base: "os.environ/OPENROUTER_BASE_URL"
|
||||
max_tokens: 4000
|
||||
temperature: 0.7
|
||||
model_info:
|
||||
mode: "chat"
|
||||
supports_function_calling: true
|
||||
supports_vision: true
|
||||
|
||||
# 路由器配置
|
||||
router_settings:
|
||||
routing_strategy: "round-robin"
|
||||
@@ -35,7 +72,7 @@ router_settings:
|
||||
litellm_settings:
|
||||
api_keys:
|
||||
- key: "sk-test-key"
|
||||
models: ["test-model"]
|
||||
models: ["test-model", "openrouter-gpt-4o-mini", "openrouter-gpt-3.5-turbo", "openrouter-claude-3.5-sonnet"]
|
||||
metadata:
|
||||
user_id: "test-user"
|
||||
service: "testing"
|
||||
|
||||
Reference in New Issue
Block a user