# 环境变量

## 环境变量文件

项目根目录下的 `.env` 文件包含所有配置。

## 基础配置

### 数据库

| 变量 | 说明 | 示例 |
|------|------|------|
| `DATABASE_URL` | PostgreSQL连接字符串 | `postgresql+asyncpg://user:pass@host:5432/geo` |
| `DB_POOL_SIZE` | 连接池大小 | `20` |
| `DB_MAX_OVERFLOW` | 最大溢出连接 | `10` |

### Redis

| 变量 | 说明 | 示例 |
|------|------|------|
| `REDIS_URL` | Redis连接地址 | `redis://host:6379/0` |
| `REDIS_PASSWORD` | Redis密码 | `password` |

### 应用

| 变量 | 说明 | 示例 |
|------|------|------|
| `APP_ENV` | 运行环境 | `development` / `production` |
| `APP_DEBUG` | 调试模式 | `true` / `false` |
| `APP_HOST` | 监听地址 | `0.0.0.0` |
| `APP_PORT` | 监听端口 | `8000` |
| `SECRET_KEY` | 应用密钥 | `your-secret-key` |
| `CORS_ORIGINS` | 允许的跨域源 | `http://localhost:3000` |

### 认证

| 变量 | 说明 | 示例 |
|------|------|------|
| `JWT_SECRET` | JWT签名密钥 | `your-jwt-secret` |
| `JWT_ALGORITHM` | JWT算法 | `HS256` |
| `JWT_EXPIRE_HOURS` | Token过期时间 | `24` |
| `REFRESH_TOKEN_EXPIRE_DAYS` | 刷新Token过期时间 | `7` |

### AI服务

| 变量 | 说明 | 示例 |
|------|------|------|
| `OPENAI_API_KEY` | OpenAI API密钥 | `sk-...` |
| `DEEPSEEK_API_KEY` | DeepSeek API密钥 | `sk-...` |
| `ZHIPU_API_KEY` | 智谱AI API密钥 | `...` |
| `LLM_BASE_URL` | LLM API地址 | `https://api.deepseek.com` |
| `LLM_MODEL` | 默认模型 | `deepseek-chat` |

### 知识库

| 变量 | 说明 | 示例 |
|------|------|------|
| `KNOWLEDGE_EMBEDDING_MODEL` | 嵌入模型 | `text-embedding-ada-002` |
| `KNOWLEDGE_VECTOR_DB` | 向量数据库类型 | `qdrant` |
| `QDRANT_HOST` | Qdrant地址 | `localhost` |
| `QDRANT_PORT` | Qdrant端口 | `6333` |

## 开发环境示例

```env
# .env.development
APP_ENV=development
APP_DEBUG=true
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/geo
REDIS_URL=redis://localhost:6379/0
JWT_SECRET=dev-secret-key-change-in-production
CORS_ORIGINS=http://localhost:3000
```

## 生产环境示例

```env
# .env.production
APP_ENV=production
APP_DEBUG=false
DATABASE_URL=postgresql+asyncpg://user:pass@prod-db:5432/geo
REDIS_URL=redis://:password@prod-redis:6379/0
JWT_SECRET=${JWT_SECRET}
SECRET_KEY=${SECRET_KEY}
CORS_ORIGINS=https://your-domain.com
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-chat
```
