# 环境配置指南

> **文档版本：** v1.0  
> **创建日期：** 2025-11-09  
> **维护者：** 技术团队  
> **最后更新：** 2025-11-09

---

## 📋 文档说明

本文档记录系统运行所需的全部环境变量配置，包括：
- 数据库连接信息
- LLM API密钥配置
- 第三方服务配置
- 安全相关配置

---

## 🗄️ 数据库配置

### PostgreSQL连接信息

**当前配置：**
```env
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research
```

**连接参数说明：**
| 参数 | 当前值 | 说明 |
|------|--------|------|
| 用户名 | postgres | PostgreSQL默认用户 |
| 密码 | postgres | 本地开发密码 |
| 主机 | localhost | 本地数据库 |
| 端口 | 5432 | PostgreSQL默认端口 |
| 数据库名 | ai_clinical_research | 项目数据库 |

**Schema信息：**
- **当前Schema：** `public`（所有13个表）
- **计划Schema：** 10个隔离Schema（Week 1实施）
  - platform_schema
  - common_schema
  - asl_schema
  - aia_schema
  - pkb_schema
  - dc_schema
  - rvw_schema
  - admin_schema
  - ssa_schema
  - st_schema

---

## 🤖 LLM API配置

### 1. DeepSeek API

**用途：** 主力大模型（推理、对话、批处理）

**配置：**
```env
DEEPSEEK_API_KEY=sk-your-deepseek-key
```

**获取方式：**
1. 访问：https://platform.deepseek.com
2. 注册/登录账号
3. 进入API Keys页面
4. 创建新的API Key

**使用场景：**
- AI智能问答（选题评价、PICO梳理等）
- 批处理任务
- 标题摘要初筛
- 全文复筛

**定价：**
- DeepSeek-V3: ¥1/M tokens（输入），¥2/M tokens（输出）

---

### 2. 通义千问（Qwen）API

**用途：** 备用模型、特定场景优化

**配置：**
```env
DASHSCOPE_API_KEY=sk-your-qwen-key
```

**获取方式：**
1. 访问：https://dashscope.console.aliyun.com
2. 开通DashScope服务
3. 创建API Key

**使用场景：**
- 长文本处理（Qwen-Long）
- 特定领域任务
- 模型对比筛选

**定价：**
- Qwen-Max: ¥0.04/1K tokens
- Qwen-Long: ¥0.005/1K tokens

---

### 3. CloseAI配置（代理OpenAI和Claude）⭐⭐⭐

**用途：** 通过代理平台稳定访问OpenAI和Claude API

**为什么使用CloseAI？**
- ✅ 国内稳定访问，无需科学上网
- ✅ 一个账号同时使用OpenAI和Claude
- ✅ 兼容OpenAI SDK标准接口
- ✅ 最新模型支持：GPT-5-Pro、Claude-Sonnet-4.5

**配置：**
```env
# CloseAI统一API Key
CLOSEAI_API_KEY=sk-cu0iepbXYGGx2jc7BqP6ogtSWmP6fk918qV3RUdtGC3Edlpo

# OpenAI端点（通过CloseAI代理）
CLOSEAI_OPENAI_BASE_URL=https://api.openai-proxy.org/v1

# Claude端点（通过CloseAI代理）
CLOSEAI_CLAUDE_BASE_URL=https://api.openai-proxy.org/anthropic
```

**支持的模型：**

| 模型系列 | 最新模型 | 说明 |
|---------|---------|------|
| **OpenAI** | `gpt-5-pro` | 最新GPT-5模型 ⭐ |
| OpenAI | `gpt-4-turbo-preview` | GPT-4高性能版本 |
| OpenAI | `gpt-3.5-turbo` | 快速经济版本 |
| **Claude** | `claude-sonnet-4-5-20250929` | 最新Claude-4.5 ⭐ |
| Claude | `claude-3-5-sonnet-20241022` | Claude-3.5稳定版 |
| Claude | `claude-3-opus-20240229` | Claude-3最强版本 |

**获取方式：**
1. 访问：https://platform.openai-proxy.org
2. 注册账号并充值
3. 在控制台获取API Key
4. 一个API Key可同时调用OpenAI和Claude

**代码示例（TypeScript）：**
```typescript
import OpenAI from 'openai';

// OpenAI (通过CloseAI)
const openaiClient = new OpenAI({
  apiKey: process.env.CLOSEAI_API_KEY,
  baseURL: 'https://api.openai-proxy.org/v1',
});

const gptResponse = await openaiClient.chat.completions.create({
  model: 'gpt-5-pro',
  messages: [{ role: 'user', content: '你好' }],
});

// Claude (通过CloseAI)
const claudeClient = new OpenAI({
  apiKey: process.env.CLOSEAI_API_KEY,
  baseURL: 'https://api.openai-proxy.org/anthropic',
});

const claudeResponse = await claudeClient.chat.completions.create({
  model: 'claude-sonnet-4-5-20250929',
  messages: [{ role: 'user', content: '你好' }],
});
```

**使用场景（AI智能文献 ⭐）：**
- **GPT-5-Pro：** 文献精准筛选、质量控制
- **Claude-4.5：** 第三方仲裁、结构化输出
- **双模型对比：** DeepSeek + GPT-5-Pro 快速+高质量
- **三模型共识：** 冲突时启用Claude仲裁

**定价（参考）：**
- GPT-5-Pro: ~¥0.10/1K tokens（输入），~¥0.20/1K tokens（输出）
- Claude-4.5-Sonnet: ~¥0.021/1K tokens（输入），~¥0.105/1K tokens（输出）

**注意事项：**
- ⚠️ API Key包含敏感信息，不要提交到Git
- ⚠️ 建议定期更换API Key
- ⚠️ 生产环境使用独立的API Key

---

## 🔧 Dify配置（RAG引擎）

**用途：** 知识库向量检索、RAG问答

**配置：**
```env
DIFY_API_KEY=app-your-dify-key
DIFY_API_URL=http://localhost/v1
```

**部署信息：**
- **本地部署：** Docker Compose
- **访问地址：** http://localhost
- **管理后台：** http://localhost/install
- **向量数据库：** Qdrant（内置）

**获取API Key：**
1. 访问 Dify 管理后台
2. 进入"应用"页面
3. 创建"知识库应用"
4. 复制API Key

**使用场景：**
- 个人知识库文档上传
- @知识库问答
- 智能引用功能

---

## 🔐 安全配置

### JWT密钥

**配置：**
```env
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=7d
```

**说明：**
- 用于用户认证Token签名
- 建议使用32位以上随机字符串
- 过期时间：7天

**生成强密钥（可选）：**
```bash
# Node.js生成
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

# OpenSSL生成
openssl rand -hex 32
```

---

## 🌐 服务配置

### 后端服务

**配置：**
```env
PORT=3001
HOST=0.0.0.0
NODE_ENV=development
LOG_LEVEL=info
```

**说明：**
| 参数 | 值 | 说明 |
|------|-----|------|
| PORT | 3001 | 后端服务端口 |
| HOST | 0.0.0.0 | 监听所有网卡 |
| NODE_ENV | development | 开发环境 |
| LOG_LEVEL | info | 日志级别 |

---

### CORS配置

**配置：**
```env
CORS_ORIGIN=http://localhost:5173
```

**说明：**
- 允许前端跨域访问
- 前端开发服务器：http://localhost:5173

---

### Redis配置（可选）

**配置：**
```env
REDIS_URL=redis://localhost:6379
```

**说明：**
- 用于缓存和会话管理
- 当前未强制要求

---

## 📁 文件上传配置

**配置：**
```env
UPLOAD_MAX_SIZE=10485760
UPLOAD_DIR=./uploads
```

**说明：**
| 参数 | 值 | 说明 |
|------|-----|------|
| UPLOAD_MAX_SIZE | 10485760 | 10MB（字节） |
| UPLOAD_DIR | ./uploads | 上传文件存储目录 |

---

## 🚀 配置步骤

### 1. 检查环境变量文件

**位置：** `backend/.env`

如果文件不存在，参考以下模板创建：

```env
# ==================== 服务器配置 ====================
PORT=3001
HOST=0.0.0.0
NODE_ENV=development
LOG_LEVEL=info

# ==================== 数据库配置 ====================
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research

# ==================== Redis配置 ====================
REDIS_URL=redis://localhost:6379

# ==================== JWT配置 ====================
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=7d

# ==================== LLM API配置 ====================
# DeepSeek
DEEPSEEK_API_KEY=sk-your-deepseek-key

# 通义千问（阿里云DashScope）
DASHSCOPE_API_KEY=sk-your-qwen-key

# Gemini（可选）
GEMINI_API_KEY=your-gemini-key

# ==================== Dify配置 ====================
DIFY_API_KEY=app-your-dify-key
DIFY_API_URL=http://localhost/v1

# ==================== 文件上传配置 ====================
UPLOAD_MAX_SIZE=10485760
UPLOAD_DIR=./uploads

# ==================== CORS配置 ====================
CORS_ORIGIN=http://localhost:5173
```

---

### 2. 验证配置

**启动后端服务：**
```bash
cd backend
npm run dev
```

**检查启动日志：**
```
✓ Prisma schema loaded
✓ Environment variables loaded from .env
✓ Datasource "db": PostgreSQL database "ai_clinical_research"
✓ Server running on http://0.0.0.0:3001
```

**验证数据库连接：**
```bash
cd backend
npx prisma migrate status
```

**预期输出：**
```
Environment variables loaded from .env
Datasource "db": PostgreSQL database "ai_clinical_research", schema "public" at "localhost:5432"
Database schema is up to date!
```

---

### 3. 常见问题排查

#### 问题1：数据库连接失败

**错误信息：**
```
Error: Can't reach database server at localhost:5432
```

**解决方案：**
1. 检查PostgreSQL是否启动
2. 验证端口5432是否被占用
3. 确认用户名密码是否正确

**检查PostgreSQL状态（Windows）：**
```bash
# 查看服务状态
Get-Service postgresql*

# 启动服务
Start-Service postgresql-x64-15
```

---

#### 问题2：LLM API调用失败

**错误信息：**
```
Error: Invalid API key
```

**解决方案：**
1. 检查API Key是否正确复制
2. 确认API Key是否已激活
3. 检查账户余额是否充足

---

#### 问题3：Dify连接失败

**错误信息：**
```
Error: connect ECONNREFUSED 127.0.0.1:80
```

**解决方案：**
1. 检查Dify是否启动：`docker-compose ps`
2. 启动Dify：`docker-compose up -d`
3. 验证访问：浏览器打开 http://localhost

---

## 🌟 平台基础设施配置（2025-11-16 新增）

> **⭐ 重要更新**：为支持云原生部署，新增平台基础设施环境变量  
> **详细文档**：[平台基础设施规划](../09-架构实施/04-平台基础设施规划.md)

---

### 1. 存储服务配置

#### **本地开发环境**

```bash
# backend/.env.development
STORAGE_TYPE=local
BASE_URL=http://localhost:3001
```

#### **生产环境（阿里云OSS）**

```bash
# SAE控制台 -> 环境变量配置
STORAGE_TYPE=oss
OSS_REGION=oss-cn-hangzhou
OSS_BUCKET=aiclinical-prod
OSS_ACCESS_KEY_ID=LTAI5t***
OSS_ACCESS_KEY_SECRET=***
OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com
```

#### **配置说明**

| 变量名 | 必需 | 默认值 | 说明 |
|--------|------|--------|------|
| `STORAGE_TYPE` | ✅ | `local` | 存储类型：`local` 或 `oss` |
| `BASE_URL` | 本地 | `http://localhost:3001` | 本地存储访问URL |
| `OSS_REGION` | 生产 | - | OSS区域（如：oss-cn-hangzhou） |
| `OSS_BUCKET` | 生产 | - | OSS Bucket名称 |
| `OSS_ACCESS_KEY_ID` | 生产 | - | 阿里云AccessKey ID |
| `OSS_ACCESS_KEY_SECRET` | 生产 | - | 阿里云AccessKey Secret |

---

### 2. 缓存服务配置

#### **本地开发环境**

```bash
# backend/.env.development
CACHE_TYPE=memory
```

#### **生产环境（阿里云Redis）**

```bash
# SAE控制台 -> 环境变量配置
CACHE_TYPE=redis
REDIS_HOST=r-***.redis.aliyuncs.com
REDIS_PORT=6379
REDIS_PASSWORD=***
REDIS_DB=0
```

#### **配置说明**

| 变量名 | 必需 | 默认值 | 说明 |
|--------|------|--------|------|
| `CACHE_TYPE` | ✅ | `memory` | 缓存类型：`memory` 或 `redis` |
| `REDIS_HOST` | Redis | - | Redis主机地址 |
| `REDIS_PORT` | Redis | `6379` | Redis端口 |
| `REDIS_PASSWORD` | Redis | - | Redis密码 |
| `REDIS_DB` | Redis | `0` | Redis数据库编号 |

---

### 3. 数据库连接池配置

#### **本地开发环境**

```bash
# backend/.env.development
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research

# 本地开发无需配置连接池
```

#### **生产环境（阿里云RDS）**

```bash
# SAE控制台 -> 环境变量配置
DATABASE_URL=postgresql://user:password@rm-xxx.aliyuncs.com:5432/prod_db
DB_MAX_CONNECTIONS=400        # RDS最大连接数
MAX_INSTANCES=20              # SAE最大实例数
```

#### **配置说明**

| 变量名 | 必需 | 默认值 | 说明 |
|--------|------|--------|------|
| `DATABASE_URL` | ✅ | - | PostgreSQL连接字符串 |
| `DB_MAX_CONNECTIONS` | 生产 | `400` | RDS最大连接数 |
| `MAX_INSTANCES` | 生产 | `20` | SAE最大实例数 |

**连接数计算**：
```
每实例连接数 = DB_MAX_CONNECTIONS / MAX_INSTANCES
示例：400 / 20 = 20连接/实例
```

---

### 4. 日志配置

```bash
# 通用配置
LOG_LEVEL=info                # debug | info | warn | error
NODE_ENV=development          # development | production | test
```

#### **配置说明**

| 变量名 | 必需 | 默认值 | 说明 |
|--------|------|--------|------|
| `LOG_LEVEL` | ✅ | `info` | 日志级别 |
| `NODE_ENV` | ✅ | `development` | 运行环境 |

---

### 5. 功能开关配置

```bash
# 启用的业务模块（逗号分隔）
ENABLED_MODULES=ASL,AIA,PKB,DC,SSA,ST

# 或启用全部
ENABLED_MODULES=*
```

#### **配置说明**

| 模块代码 | 模块名称 | 状态 |
|---------|---------|------|
| `ASL` | AI智能文献 | 开发中 |
| `AIA` | AI智能问答 | 已完成 |
| `PKB` | 个人知识库 | 已完成 |
| `DC` | 数据清洗 | 计划中 |
| `SSA` | 智能统计分析 | 计划中 |
| `ST` | 统计工具 | 计划中 |

---

### 6. 应用配置

```bash
# 应用基础配置
PORT=3001                     # 应用端口
BASE_URL=http://localhost:3001

# JWT配置
JWT_SECRET=your-secret-key-here
JWT_EXPIRES_IN=7d

# CORS配置
CORS_ORIGIN=http://localhost:5173
```

---

## 📋 完整环境变量模板

### **backend/.env.development（本地开发）**

```bash
# ==================== 应用配置 ====================
NODE_ENV=development
PORT=3001
BASE_URL=http://localhost:3001

# ==================== 数据库配置 ====================
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research

# ==================== 存储服务 ====================
STORAGE_TYPE=local

# ==================== 缓存服务 ====================
CACHE_TYPE=memory

# ==================== 日志配置 ====================
LOG_LEVEL=debug

# ==================== LLM配置 ====================
DEEPSEEK_API_KEY=sk-***
QWEN_API_KEY=sk-***

# ==================== RAG配置 ====================
DIFY_API_BASE_URL=http://localhost/v1
DIFY_API_KEY=app-***

# ==================== JWT配置 ====================
JWT_SECRET=dev-secret-key-change-in-production
JWT_EXPIRES_IN=7d

# ==================== CORS配置 ====================
CORS_ORIGIN=http://localhost:5173

# ==================== 功能开关 ====================
ENABLED_MODULES=*
```

### **backend/.env.production（生产环境）**

```bash
# ==================== 应用配置 ====================
NODE_ENV=production
PORT=3001

# ==================== 数据库配置 ====================
DATABASE_URL=postgresql://user:password@rm-xxx.aliyuncs.com:5432/prod_db
DB_MAX_CONNECTIONS=400
MAX_INSTANCES=20

# ==================== 存储服务 ====================
STORAGE_TYPE=oss
OSS_REGION=oss-cn-hangzhou
OSS_BUCKET=aiclinical-prod
OSS_ACCESS_KEY_ID=LTAI5t***
OSS_ACCESS_KEY_SECRET=***

# ==================== 缓存服务 ====================
CACHE_TYPE=redis
REDIS_HOST=r-***.redis.aliyuncs.com
REDIS_PORT=6379
REDIS_PASSWORD=***
REDIS_DB=0

# ==================== 日志配置 ====================
LOG_LEVEL=info

# ==================== LLM配置 ====================
DEEPSEEK_API_KEY=sk-***
QWEN_API_KEY=sk-***

# ==================== RAG配置 ====================
DIFY_API_BASE_URL=https://api.dify.ai/v1
DIFY_API_KEY=app-***

# ==================== JWT配置 ====================
JWT_SECRET=<生产环境强密钥>
JWT_EXPIRES_IN=7d

# ==================== CORS配置 ====================
CORS_ORIGIN=https://app.yourdomain.com

# ==================== 功能开关 ====================
ENABLED_MODULES=ASL,AIA,PKB,DC,SSA,ST
```

---

## 📊 配置检查清单

使用以下清单验证配置完整性：

### **基础配置（必需）**
- [ ] ✅ 数据库连接成功（`npx prisma migrate status`）
- [ ] ✅ 存储类型已配置（`STORAGE_TYPE`）
- [ ] ✅ 日志级别已配置（`LOG_LEVEL`）
- [ ] ✅ JWT密钥已配置

### **LLM配置（必需）**
- [ ] ✅ DeepSeek API Key配置且可用
- [ ] ✅ Qwen API Key配置且可用
- [ ] ✅ Dify服务运行中（`docker-compose ps`）
- [ ] ✅ Dify API Key已配置

### **平台基础设施（云原生）**
- [ ] ✅ 存储服务配置正确（本地/OSS）
- [ ] ✅ 缓存服务配置正确（Memory/Redis）
- [ ] ✅ 连接池参数已配置（生产环境）
- [ ] ✅ 功能开关已配置（ENABLED_MODULES）

### **应用运行（必需）**
- [ ] ✅ 后端服务启动成功（端口3001）
- [ ] ✅ 前端服务启动成功（端口5173）
- [ ] ✅ CORS配置正确（前端可访问后端API）
- [ ] ✅ 可正常使用平台服务（storage/logger/cache等）

---

## 🔄 配置更新记录

| 日期 | 更新内容 | 更新人 |
|------|---------|--------|
| 2025-11-09 | 初始配置文档创建 | 技术团队 |
| 2025-11-16 | 新增平台基础设施配置章节 | 技术团队 |

---

## 📚 相关文档

- [数据库连接配置](../09-架构实施/02-数据库连接配置.md)
- [部署架构设计](../05-部署文档/01-部署架构设计.md)
- [系统架构总览](../00-项目概述/技术架构总览.md)

---

**文档版本：** v1.0  
**最后更新：** 2025-11-09  
**维护者：** 技术团队

