125 lines
3.1 KiB
Markdown
125 lines
3.1 KiB
Markdown
|
|
# LLM Configuration Separation Guide
|
|||
|
|
|
|||
|
|
## 📋 Overview
|
|||
|
|
|
|||
|
|
为了更好地组织配置文件并提高可维护性,我们将LLM相关的参数和提示词模板从主配置文件中分离出来,放到专门的`llm_prompt.yaml`文件中。
|
|||
|
|
|
|||
|
|
## 🎯 配置文件结构
|
|||
|
|
|
|||
|
|
### 主配置文件: `config.yaml`
|
|||
|
|
包含应用的核心配置:
|
|||
|
|
- Provider设置 (OpenAI/Azure)
|
|||
|
|
- 检索端点配置
|
|||
|
|
- 数据库连接信息
|
|||
|
|
- 应用设置
|
|||
|
|
- 日志配置
|
|||
|
|
|
|||
|
|
### LLM配置文件: `llm_prompt.yaml`
|
|||
|
|
包含LLM相关的所有配置:
|
|||
|
|
- LLM参数 (temperature, max_context_length等)
|
|||
|
|
- 提示词模板 (agent_system_prompt等)
|
|||
|
|
|
|||
|
|
## 📂 文件示例
|
|||
|
|
|
|||
|
|
### `llm_prompt.yaml`
|
|||
|
|
```yaml
|
|||
|
|
# LLM Parameters and Prompt Templates Configuration
|
|||
|
|
parameters:
|
|||
|
|
temperature: 0
|
|||
|
|
max_context_length: 96000
|
|||
|
|
|
|||
|
|
prompts:
|
|||
|
|
agent_system_prompt: |
|
|||
|
|
You are an Agentic RAG assistant...
|
|||
|
|
# 完整的提示词内容
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### `config.yaml` (精简后)
|
|||
|
|
```yaml
|
|||
|
|
provider: openai
|
|||
|
|
openai:
|
|||
|
|
base_url: "..."
|
|||
|
|
api_key: "..."
|
|||
|
|
model: "deepseek-chat"
|
|||
|
|
|
|||
|
|
retrieval:
|
|||
|
|
endpoint: "..."
|
|||
|
|
api_key: "..."
|
|||
|
|
|
|||
|
|
# 其他非LLM配置...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 代码变更
|
|||
|
|
|
|||
|
|
### 新增配置模型
|
|||
|
|
- `LLMParametersConfig`: LLM参数配置
|
|||
|
|
- `LLMPromptsConfig`: 提示词配置
|
|||
|
|
- `LLMPromptConfig`: 完整的LLM提示配置
|
|||
|
|
|
|||
|
|
### 增强的配置加载
|
|||
|
|
```python
|
|||
|
|
# 支持加载两个配置文件
|
|||
|
|
config = Config.from_yaml("config.yaml", "llm_prompt.yaml")
|
|||
|
|
|
|||
|
|
# 新的方法
|
|||
|
|
config.get_max_context_length() # 统一的上下文长度获取
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 向后兼容性
|
|||
|
|
- 如果`llm_prompt.yaml`不存在,系统将回退到`config.yaml`中的旧配置
|
|||
|
|
- 现有的`llm.rag`配置仍然被支持
|
|||
|
|
|
|||
|
|
## 🚀 使用方法
|
|||
|
|
|
|||
|
|
### 开发环境
|
|||
|
|
```bash
|
|||
|
|
# 确保两个配置文件都存在
|
|||
|
|
ls config.yaml llm_prompt.yaml
|
|||
|
|
|
|||
|
|
# 启动服务 (自动加载两个文件)
|
|||
|
|
uv run python service/main.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配置更新
|
|||
|
|
```python
|
|||
|
|
# 加载配置时指定文件路径
|
|||
|
|
from service.config import load_config
|
|||
|
|
config = load_config("config.yaml", "llm_prompt.yaml")
|
|||
|
|
|
|||
|
|
# 获取LLM参数
|
|||
|
|
llm_config = config.get_llm_config()
|
|||
|
|
prompts = config.get_rag_prompts()
|
|||
|
|
max_length = config.get_max_context_length()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ✅ 优势
|
|||
|
|
|
|||
|
|
1. **关注点分离**: LLM配置与应用配置分离
|
|||
|
|
2. **更好的可维护性**: 提示词变更不影响其他配置
|
|||
|
|
3. **版本控制友好**: 可以独立管理提示词版本
|
|||
|
|
4. **团队协作**: 不同角色可以专注于不同的配置文件
|
|||
|
|
5. **向后兼容**: 不破坏现有的配置结构
|
|||
|
|
|
|||
|
|
## 📝 迁移指南
|
|||
|
|
|
|||
|
|
如果你有现有的`config.yaml`文件包含LLM配置:
|
|||
|
|
|
|||
|
|
1. **创建`llm_prompt.yaml`**: 将`llm.rag`部分移动到新文件
|
|||
|
|
2. **更新`config.yaml`**: 移除`llm`配置段
|
|||
|
|
3. **测试**: 确保应用正常加载两个配置文件
|
|||
|
|
|
|||
|
|
系统会自动处理配置优先级:`llm_prompt.yaml` > `config.yaml`中的`llm`配置 > 默认值
|
|||
|
|
|
|||
|
|
## 🔧 故障排除
|
|||
|
|
|
|||
|
|
### 配置文件未找到
|
|||
|
|
- 确保`llm_prompt.yaml`与`config.yaml`在同一目录
|
|||
|
|
- 检查文件权限和格式是否正确
|
|||
|
|
|
|||
|
|
### 配置加载失败
|
|||
|
|
- 验证YAML格式正确性
|
|||
|
|
- 检查必需字段是否存在
|
|||
|
|
- 查看日志获取详细错误信息
|
|||
|
|
|
|||
|
|
这个配置分离为未来的功能扩展和维护提供了更好的基础。
|