|
| 1 | +# 配置系统详解 |
| 2 | + |
| 3 | +## 概述 |
| 4 | + |
| 5 | +Yuxi-Know 从 v0.3.x 版本开始采用了全新的配置系统,基于 Pydantic BaseModel 和 TOML 格式,提供了类型安全、智能提示和选择性持久化等现代化特性。 |
| 6 | + |
| 7 | +## 架构设计 |
| 8 | + |
| 9 | +### 配置层次结构 |
| 10 | + |
| 11 | +``` |
| 12 | +配置系统架构 |
| 13 | +├── 默认配置 (代码定义) |
| 14 | +│ ├── src/config/static/models.py (模型配置) |
| 15 | +│ └── src/config/app.py (应用配置) |
| 16 | +├── 用户配置 (TOML 文件) |
| 17 | +│ └── saves/config/base.toml (仅保存用户修改) |
| 18 | +└── 环境变量 (运行时覆盖) |
| 19 | + └── .env 文件 |
| 20 | +``` |
| 21 | + |
| 22 | +### 核心组件 |
| 23 | + |
| 24 | +#### 1. Config 类 (`src/config/app.py`) |
| 25 | + |
| 26 | +主配置类,继承自 Pydantic BaseModel,提供: |
| 27 | + |
| 28 | +- **类型验证**: 自动检查配置项类型 |
| 29 | +- **默认值管理**: 内置合理的默认配置 |
| 30 | +- **选择性持久化**: 仅保存用户修改的配置项 |
| 31 | +- **向后兼容**: 支持旧的字典式访问方式 |
| 32 | + |
| 33 | +```python |
| 34 | +class Config(BaseModel): |
| 35 | + # 功能开关 |
| 36 | + enable_reranker: bool = Field(default=False, description="是否开启重排序") |
| 37 | + enable_content_guard: bool = Field(default=False, description="是否启用内容审查") |
| 38 | + |
| 39 | + # 模型配置 |
| 40 | + default_model: str = Field(default="siliconflow/deepseek-ai/DeepSeek-V3.2-Exp") |
| 41 | + embed_model: str = Field(default="siliconflow/BAAI/bge-m3") |
| 42 | + |
| 43 | + # 运行时状态 (不持久化) |
| 44 | + model_provider_status: dict[str, bool] = Field(exclude=True) |
| 45 | +``` |
| 46 | + |
| 47 | +#### 2. 模型配置类 (`src/config/static/models.py`) |
| 48 | + |
| 49 | +定义了三种类型的模型配置: |
| 50 | + |
| 51 | +- **ChatModelProvider**: 聊天模型提供商 |
| 52 | +- **EmbedModelInfo**: 嵌入模型信息 |
| 53 | +- **RerankerInfo**: 重排序模型信息 |
| 54 | + |
| 55 | +```python |
| 56 | +class ChatModelProvider(BaseModel): |
| 57 | + name: str = Field(..., description="提供商显示名称") |
| 58 | + url: str = Field(..., description="提供商文档或模型列表 URL") |
| 59 | + base_url: str = Field(..., description="API 基础 URL") |
| 60 | + default: str = Field(..., description="默认模型名称") |
| 61 | + env: str = Field(..., description="API Key 环境变量名") |
| 62 | + models: list[str] = Field(default_factory=list, description="支持的模型列表") |
| 63 | +``` |
| 64 | + |
| 65 | +添加配置: |
| 66 | + |
| 67 | + |
| 68 | +```python |
| 69 | +# 1. 在 DEFAULT_CHAT_MODEL_PROVIDERS 中添加 |
| 70 | +"new-provider": ChatModelProvider( |
| 71 | + name="新提供商", |
| 72 | + url="https://provider.com/docs", |
| 73 | + base_url="https://api.provider.com/v1", |
| 74 | + default="default-model", |
| 75 | + env="NEW_PROVIDER_API_KEY", |
| 76 | + models=["model1", "model2"], |
| 77 | +), |
| 78 | + |
| 79 | +# 2. 在 .env 中配置 API Key |
| 80 | +# NEW_PROVIDER_API_KEY=your_api_key |
| 81 | + |
| 82 | +# 3. 重启服务或重新加载配置 |
| 83 | +``` |
| 84 | + |
| 85 | +## 配置管理特性 |
| 86 | + |
| 87 | +系统只会保存用户修改过的配置项: |
| 88 | + |
| 89 | +```python |
| 90 | +# 用户只修改了 enable_reranker |
| 91 | +config.enable_reranker = True |
| 92 | +config.save() # 只保存 enable_reranker 到 TOML 文件 |
| 93 | + |
| 94 | +# TOML 文件内容 |
| 95 | +# enable_reranker = true |
| 96 | +``` |
| 97 | + |
| 98 | +### 默认模型配置 (`src/config/static/models.py`) |
| 99 | + |
| 100 | +包含所有支持的模型提供商的默认配置,开发者可以直接修改此文件添加新的模型: |
| 101 | + |
| 102 | +```python |
| 103 | +DEFAULT_CHAT_MODEL_PROVIDERS: dict[str, ChatModelProvider] = { |
| 104 | + "siliconflow": ChatModelProvider( |
| 105 | + name="SiliconFlow", |
| 106 | + url="https://cloud.siliconflow.cn/models", |
| 107 | + base_url="https://api.siliconflow.cn/v1", |
| 108 | + default="deepseek-ai/DeepSeek-V3.2-Exp", |
| 109 | + env="SILICONFLOW_API_KEY", |
| 110 | + models=[ |
| 111 | + "deepseek-ai/DeepSeek-V3.2-Exp", |
| 112 | + "Qwen/Qwen3-235B-A22B-Instruct-2507", |
| 113 | + # ... |
| 114 | + ], |
| 115 | + ), |
| 116 | + # 更多提供商... |
| 117 | +} |
| 118 | +``` |
| 119 | + |
| 120 | +### 用户配置 (`saves/config/base.toml`) |
| 121 | + |
| 122 | +只包含用户修改过的配置项,使用 TOML 格式: |
| 123 | + |
| 124 | +```toml |
| 125 | +# 用户只修改了这些配置项 |
| 126 | +enable_reranker = true |
| 127 | +default_agent_id = "MyCustomAgent" |
| 128 | +enable_content_guard = true |
| 129 | + |
| 130 | +# 模型配置修改 |
| 131 | +[model_names.siliconflow] |
| 132 | +models = [ |
| 133 | + "deepseek-ai/DeepSeek-V3.2-Exp", |
| 134 | + "custom-model-name", |
| 135 | +] |
| 136 | +``` |
| 137 | + |
| 138 | +## 高级配置 |
| 139 | + |
| 140 | +### 动态配置更新 |
| 141 | + |
| 142 | +```python |
| 143 | +from src.config import config |
| 144 | + |
| 145 | +# 更新配置 |
| 146 | +config.enable_reranker = True |
| 147 | +config.default_agent_id = "CustomAgent" |
| 148 | + |
| 149 | +# 更新模型列表 |
| 150 | +config.model_names["siliconflow"].models.append("new-model") |
| 151 | + |
| 152 | +# 保存配置 |
| 153 | +config.save() |
| 154 | + |
| 155 | +# 或者只保存特定提供商的模型配置 |
| 156 | +config._save_models_to_file("siliconflow") |
| 157 | +``` |
| 158 | + |
| 159 | +### 配置验证 |
| 160 | + |
| 161 | +```python |
| 162 | +# 验证配置 |
| 163 | +from src.config import config |
| 164 | + |
| 165 | +# 检查模型提供商可用性 |
| 166 | +for provider, status in config.model_provider_status.items(): |
| 167 | + print(f"{provider}: {'✅' if status else '❌'}") |
| 168 | + |
| 169 | +# 获取可用模型列表 |
| 170 | +available_models = config.get_model_choices() |
| 171 | +available_embed_models = config.get_embed_model_choices() |
| 172 | +available_rerankers = config.get_reranker_choices() |
| 173 | +``` |
| 174 | + |
| 175 | +### 配置导出 |
| 176 | + |
| 177 | +```python |
| 178 | +# 导出完整配置(包含运行时状态) |
| 179 | +full_config = config.dump_config() |
| 180 | + |
| 181 | +# 导出用户配置(仅保存到文件的部分) |
| 182 | +user_config = { |
| 183 | + field: getattr(config, field) |
| 184 | + for field in config._user_modified_fields |
| 185 | +} |
0 commit comments