LightRAG/docs/ConfigurationGuide-zh.md
Claude 0a48c633cd
Add Schema-Driven Configuration Pattern
Implement comprehensive configuration management system with:

**Core Components:**
- config/config.schema.yaml: Configuration metadata (single source of truth)
- scripts/lib/generate_from_schema.py: Schema → local.yaml generator
- scripts/lib/generate_env.py: local.yaml → .env converter
- scripts/setup.sh: One-click configuration initialization

**Key Features:**
- Deep merge logic preserves existing values
- Auto-generation of secrets (32-char random strings)
- Type inference for configuration values
- Nested YAML → flat environment variables
- Git-safe: local.yaml and .env excluded from version control

**Configuration Coverage:**
- Trilingual entity extractor (Chinese/English/Swedish)
- LightRAG API, database, vector DB settings
- LLM provider configuration
- Entity/relation extraction settings
- Security and performance tuning

**Documentation:**
- docs/ConfigurationGuide-zh.md: Complete usage guide with examples

**Usage:**
```bash
./scripts/setup.sh  # Generate config/local.yaml and .env
```

This enables centralized configuration management with automatic
secret generation and safe handling of sensitive data.
2025-11-19 19:33:13 +00:00

658 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LightRAG 配置指南
## 概述
LightRAG 采用 **Schema-Driven Configuration Pattern**(架构驱动配置模式),通过单一数据源管理所有配置,自动生成本地配置文件和环境变量。
### 核心设计原则
**单一数据源 (Single Source of Truth)**:
- `config/config.schema.yaml` - 配置元数据Git 追踪)
- `config/local.yaml` - 本地配置自动生成Git 忽略)
- `.env` - 环境变量自动生成Git 忽略)
**自动化工作流**:
```bash
config.schema.yaml → config/local.yaml → .env
```
**关键特性**:
- ✅ 深度合并 - 保留现有值
- ✅ 自动生成密钥 - 无需手动管理
- ✅ 类型推断 - 自动转换数据类型
- ✅ 安全性 - 配置文件不会提交到 Git
---
## 快速开始
### 1. 初始化配置
```bash
cd /path/to/LightRAG
./scripts/setup.sh
```
这会自动:
1. 读取 `config/config.schema.yaml`
2. 生成 `config/local.yaml`(包含自动生成的密钥)
3. 生成 `.env`(环境变量格式)
### 2. 检查生成的配置
```bash
# 查看本地配置
cat config/local.yaml
# 查看环境变量
cat .env
```
### 3. 修改配置(可选)
```bash
# 编辑本地配置
nano config/local.yaml
# 修改后重新生成 .env
./scripts/setup.sh
```
---
## 配置文件说明
### config.schema.yaml配置元数据
**位置**: `config/config.schema.yaml`
**用途**: 定义所有配置字段的元数据
**格式**:
```yaml
- section: trilingual.enabled
default: true
description: "Enable trilingual entity extractor (Chinese/English/Swedish)"
- section: lightrag.api.secret_key
type: secret
auto_generate: true
description: "API secret key (auto-generated, 32 characters)"
- section: lightrag.llm.api_key
type: secret
auto_generate: false
description: "LLM API key (user-provided)"
```
**字段说明**:
- `section`: 配置路径(点分隔,如 `trilingual.chinese.enabled`
- `default`: 默认值(如果有)
- `type`: 类型标记(`secret` = 密钥,留空 = 自动推断)
- `auto_generate`: 是否自动生成密钥(仅适用于 `type: secret`
- `description`: 字段描述
**重要**:
- ✅ 此文件会提交到 Git
- ✅ 修改此文件后运行 `./scripts/setup.sh` 更新配置
- ✅ 新增字段会使用默认值,现有值会保留
### config/local.yaml本地配置
**位置**: `config/local.yaml`
**用途**: 实际的配置文件YAML 格式)
**格式**:
```yaml
trilingual:
enabled: true
default_language: en
lazy_loading: true
chinese:
enabled: true
model: CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH
english:
enabled: true
model: en_core_web_trf
batch_size: 32
lightrag:
api:
secret_key: abc123... # 自动生成
host: 0.0.0.0
port: 9621
llm:
provider: openai
model: gpt-4o-mini
api_key: sk-... # 手动填写
```
**重要**:
- ❌ 此文件不会提交到 Git已添加到 `.gitignore`
- ✅ 可以直接编辑此文件修改配置
- ✅ 修改后运行 `./scripts/setup.sh` 更新 `.env`
- ✅ 包含自动生成的密钥,请妥善保管
### .env环境变量
**位置**: `.env`(项目根目录)
**用途**: 环境变量格式的配置文件
**格式**:
```bash
# TRILINGUAL
TRILINGUAL_ENABLED=true
TRILINGUAL_DEFAULT_LANGUAGE=en
TRILINGUAL_LAZY_LOADING=true
TRILINGUAL_CHINESE_ENABLED=true
TRILINGUAL_CHINESE_MODEL=CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH
# LIGHTRAG
LIGHTRAG_API_SECRET_KEY=abc123...
LIGHTRAG_API_HOST=0.0.0.0
LIGHTRAG_API_PORT=9621
LIGHTRAG_LLM_PROVIDER=openai
LIGHTRAG_LLM_MODEL=gpt-4o-mini
```
**命名规则**:
- 嵌套路径 → 大写 + 下划线
- 例如: `trilingual.chinese.enabled``TRILINGUAL_CHINESE_ENABLED`
**重要**:
- ❌ 此文件不会提交到 Git已添加到 `.gitignore`
- ⚠️ 此文件由脚本自动生成,**不要手动编辑**
- ✅ 修改 `config/local.yaml` 后重新运行 `./scripts/setup.sh`
---
## 配置项说明
### 三语言实体提取器配置
#### 通用配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.enabled` | `true` | 启用三语言实体提取器 |
| `trilingual.default_language` | `en` | 默认语言zh/en/sv |
| `trilingual.lazy_loading` | `true` | 启用延迟加载(节省内存) |
#### 中文配置HanLP
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.chinese.enabled` | `true` | 启用中文提取 |
| `trilingual.chinese.model` | `CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH` | HanLP 模型名 |
| `trilingual.chinese.cache_dir` | `""` | 模型缓存目录(空 = 默认 `~/.hanlp` |
#### 英文配置spaCy
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.english.enabled` | `true` | 启用英文提取 |
| `trilingual.english.model` | `en_core_web_trf` | spaCy 模型名 |
| `trilingual.english.batch_size` | `32` | 批处理大小 |
**可选模型**:
- `en_core_web_trf`: Transformer 模型(最高质量,~440 MB
- `en_core_web_lg`: 大模型(高质量,~440 MB
- `en_core_web_sm`: 小模型(较低质量,~12 MB
#### 瑞典语配置spaCy
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.swedish.enabled` | `true` | 启用瑞典语提取 |
| `trilingual.swedish.model` | `sv_core_news_lg` | spaCy 模型名 |
| `trilingual.swedish.batch_size` | `32` | 批处理大小 |
**可选模型**:
- `sv_core_news_lg`: 大模型(最高质量,~545 MB
- `sv_core_news_md`: 中等模型(~40 MB
- `sv_core_news_sm`: 小模型(~12 MB
#### 性能配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.performance.max_text_length` | `1000000` | 最大文本长度(字符) |
| `trilingual.performance.enable_gpu` | `false` | 启用 GPU 加速 |
| `trilingual.performance.num_threads` | `4` | 并行处理线程数 |
#### 缓存配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.cache.enabled` | `true` | 启用结果缓存 |
| `trilingual.cache.ttl` | `3600` | 缓存 TTL0 = 永不过期) |
| `trilingual.cache.max_size` | `1000` | 最大缓存数量 |
#### 日志配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `trilingual.logging.level` | `INFO` | 日志级别DEBUG/INFO/WARNING/ERROR |
| `trilingual.logging.format` | `%(asctime)s - %(name)s - %(levelname)s - %(message)s` | 日志格式 |
### LightRAG 通用配置
#### API 配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.api.secret_key` | *自动生成* | API 密钥32 字符) |
| `lightrag.api.host` | `0.0.0.0` | API 服务器地址 |
| `lightrag.api.port` | `9621` | API 服务器端口 |
| `lightrag.api.debug` | `false` | 调试模式 |
#### 数据库配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.database.type` | `sqlite` | 数据库类型sqlite/postgres/mysql |
| `lightrag.database.path` | `./data/lightrag.db` | 数据库路径SQLite |
#### 向量数据库配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.vector_db.type` | `nano` | 向量数据库类型nano/milvus/qdrant/chroma |
| `lightrag.vector_db.dimension` | `1536` | 向量维度 |
#### LLM 配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.llm.provider` | `openai` | LLM 提供商openai/anthropic/ollama/custom |
| `lightrag.llm.model` | `gpt-4o-mini` | LLM 模型名 |
| `lightrag.llm.api_key` | *需手动填写* | LLM API 密钥 |
| `lightrag.llm.base_url` | `""` | 自定义 LLM 基础 URL可选 |
| `lightrag.llm.max_tokens` | `4096` | 最大 tokens 数 |
| `lightrag.llm.temperature` | `0.0` | 温度参数0.0-1.0 |
#### 实体提取配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.entity_extraction.max_gleaning` | `1` | Gleaning 轮数0=禁用1=启用) |
| `lightrag.entity_extraction.use_trilingual` | `false` | 使用三语言提取器(而非 LLM |
#### 关系提取配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.relation_extraction.enabled` | `true` | 启用关系提取 |
| `lightrag.relation_extraction.method` | `llm` | 提取方法llm/pattern/hybrid |
#### 安全配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `lightrag.security.enable_api_key` | `false` | 启用 API 密钥验证 |
| `lightrag.security.allowed_origins` | `*` | CORS 允许的源(逗号分隔) |
| `lightrag.security.rate_limit` | `100` | API 速率限制(请求/分钟/IP |
---
## 高级用法
### 1. 添加新配置字段
**步骤**:
1. 编辑 `config/config.schema.yaml`,添加新字段:
```yaml
- section: my_module.new_feature.enabled
default: true
description: "Enable my new feature"
```
2. 重新运行设置脚本:
```bash
./scripts/setup.sh
```
3. 检查 `config/local.yaml``.env`,新字段已自动添加。
### 2. 自动生成密钥
**用途**: API 密钥、JWT 密钥、加密密钥等
**步骤**:
1.`config.schema.yaml` 中标记为 `type: secret``auto_generate: true`
```yaml
- section: my_module.secret_token
type: secret
auto_generate: true
description: "Secret token for authentication"
```
2. 运行 `./scripts/setup.sh`密钥会自动生成32 字符)
**注意**:
- 密钥只生成一次,后续运行会保留现有值
- 如需重新生成,删除 `config/local.yaml` 中对应字段后重新运行
### 3. 用户提供的密钥
**用途**: LLM API 密钥等需要用户提供的敏感信息
**步骤**:
1.`config.schema.yaml` 中标记为 `type: secret``auto_generate: false`
```yaml
- section: lightrag.llm.api_key
type: secret
auto_generate: false
description: "LLM API key (user-provided)"
```
2. 运行 `./scripts/setup.sh` 生成配置框架
3. 手动编辑 `config/local.yaml`,填写 API 密钥:
```yaml
lightrag:
llm:
api_key: sk-your-actual-key-here
```
4. 重新运行 `./scripts/setup.sh` 更新 `.env`
### 4. 深度合并逻辑
**特性**: 修改配置时,现有值会被保留,新字段会使用默认值
**示例**:
**现有配置** (`config/local.yaml`):
```yaml
trilingual:
chinese:
enabled: false # 用户修改过
```
**Schema 更新** (`config.schema.yaml`):
```yaml
- section: trilingual.chinese.enabled
default: true
- section: trilingual.chinese.cache_dir # 新增字段
default: "/custom/path"
```
**运行** `./scripts/setup.sh` **后** (`config/local.yaml`):
```yaml
trilingual:
chinese:
enabled: false # 保留现有值 ✅
cache_dir: /custom/path # 使用默认值 ✅
```
### 5. 类型推断
**支持的类型**:
- 布尔值: `true`, `false`
- 整数: `123`, `-456`
- 浮点数: `0.5`, `3.14`
- 字符串: `hello`, `api_key`
**自动转换**:
```yaml
# Schema 中定义
- section: my_module.timeout
default: 30 # 整数
- section: my_module.enabled
default: true # 布尔值
# 生成的 .env
MY_MODULE_TIMEOUT=30 # 整数字符串
MY_MODULE_ENABLED=true # 布尔值字符串
```
---
## 常见问题
### Q1: 如何修改配置?
**A**: 有两种方法:
**方法 1: 编辑 local.yaml推荐**
```bash
# 1. 编辑配置
nano config/local.yaml
# 2. 更新 .env
./scripts/setup.sh
```
**方法 2: 编辑 schema.yaml添加新字段**
```bash
# 1. 添加新字段到 schema
nano config/config.schema.yaml
# 2. 重新生成配置
./scripts/setup.sh
```
### Q2: 配置文件丢失了怎么办?
**A**: 重新运行设置脚本即可:
```bash
./scripts/setup.sh
```
**注意**:
- ✅ 如果只是 `.env` 丢失,重新运行会从 `config/local.yaml` 重新生成
- ⚠️ 如果 `config/local.yaml` 也丢失,会使用默认值重新生成(自动生成的密钥会改变)
### Q3: 为什么修改 .env 后重新运行脚本配置被覆盖?
**A**: `.env` 是自动生成的文件,**不应该手动编辑**。
**正确做法**:
1. 编辑 `config/local.yaml`
2. 运行 `./scripts/setup.sh`
3. `.env` 会自动更新
### Q4: 如何在不同环境使用不同配置?
**A**: 使用环境变量覆盖:
**开发环境** (`.env`):
```bash
LIGHTRAG_API_DEBUG=true
LIGHTRAG_LLM_MODEL=gpt-4o-mini
```
**生产环境** (在服务器上设置环境变量):
```bash
export LIGHTRAG_API_DEBUG=false
export LIGHTRAG_LLM_MODEL=gpt-4o
```
环境变量的优先级 > `.env` 文件
### Q5: 密钥泄露了怎么办?
**A**: 重新生成密钥:
1. 删除 `config/local.yaml` 中的密钥字段
2. 运行 `./scripts/setup.sh`
3. 新密钥会自动生成
**示例**:
```bash
# 1. 编辑 config/local.yaml删除这一行
# lightrag.api.secret_key: abc123...
# 2. 重新生成
./scripts/setup.sh
# 3. 新密钥已生成并保存
```
### Q6: 如何检查配置是否正确?
**A**: 查看生成的文件:
```bash
# 查看本地配置
cat config/local.yaml
# 查看环境变量
cat .env
# 查看特定配置项
grep "TRILINGUAL_ENABLED" .env
```
### Q7: 脚本运行失败怎么办?
**A**: 检查以下几点:
1. **Python 依赖**:
```bash
pip install pyyaml
```
2. **Schema 文件存在**:
```bash
ls -la config/config.schema.yaml
```
3. **脚本权限**:
```bash
chmod +x scripts/setup.sh
chmod +x scripts/lib/generate_from_schema.py
chmod +x scripts/lib/generate_env.py
```
4. **查看详细错误**:
```bash
./scripts/setup.sh 2>&1 | tee setup.log
```
---
## 文件结构
```
LightRAG/
├── config/
│ ├── config.schema.yaml # 配置元数据Git 追踪)
│ └── local.yaml # 本地配置Git 忽略,自动生成)
├── scripts/
│ ├── setup.sh # 一键设置脚本
│ └── lib/
│ ├── generate_from_schema.py # Schema → local.yaml
│ └── generate_env.py # local.yaml → .env
├── .env # 环境变量Git 忽略,自动生成)
└── .gitignore # 忽略 local.yaml 和 .env
```
---
## 工作流示意图
```
┌──────────────────────┐
│ config.schema.yaml │ ← 配置元数据Git 追踪)
│ (单一数据源) │
└──────────┬───────────┘
│ 运行 ./scripts/setup.sh
┌──────────────────────┐
│ generate_from_schema │ ← 读取 schema生成配置
│ │ - 深度合并
│ │ - 自动生成密钥
│ │ - 保留现有值
└──────────┬───────────┘
┌──────────────────────┐
│ config/local.yaml │ ← 本地配置Git 忽略)
│ │ - 可手动编辑
│ │ - 包含密钥
└──────────┬───────────┘
│ 运行 ./scripts/setup.sh
┌──────────────────────┐
│ generate_env.py │ ← 转换为环境变量格式
│ │ - 扁平化嵌套结构
│ │ - 大写 + 下划线
└──────────┬───────────┘
┌──────────────────────┐
│ .env │ ← 环境变量Git 忽略)
│ │ - 不要手动编辑
└──────────────────────┘
```
---
## 最佳实践
### ✅ 推荐做法
1. **修改配置**: 编辑 `config/local.yaml`,然后运行 `./scripts/setup.sh`
2. **添加字段**: 编辑 `config.schema.yaml`,然后运行 `./scripts/setup.sh`
3. **版本控制**: 只提交 `config.schema.yaml`,不要提交 `config/local.yaml``.env`
4. **密钥管理**: 使用 `auto_generate: true` 自动生成密钥
5. **环境隔离**: 使用环境变量覆盖 `.env` 中的配置
### ❌ 避免做法
1. **手动编辑 .env**: 修改会被覆盖
2. **提交密钥**: `config/local.yaml``.env` 包含敏感信息
3. **硬编码配置**: 在代码中硬编码配置值
4. **跳过脚本**: 手动创建配置文件(会丢失深度合并等特性)
---
## 总结
### 核心优势
**单一数据源**: 所有配置元数据集中管理
**自动化**: 一键生成配置,无需手动管理
**安全性**: 配置文件不会提交到 Git
**灵活性**: 支持深度合并、自动生成密钥、类型推断
**可维护性**: 配置修改清晰可追溯
### 适用场景
- ✓ 需要管理大量配置项
- ✓ 需要自动生成密钥
- ✓ 需要在多个环境部署
- ✓ 需要配置版本控制
- ✓ 团队协作开发
---
## 参考资源
- **Schema 文件**: `config/config.schema.yaml`
- **生成脚本**: `scripts/lib/generate_from_schema.py`
- **环境变量脚本**: `scripts/lib/generate_env.py`
- **设置脚本**: `scripts/setup.sh`
---
## 支持和反馈
如有问题或建议,请:
1. 查看本文档的常见问题部分
2. 查看生成脚本的源代码和注释
3. 提交 Issue 到 LightRAG 仓库