配置管理

📎 引用文件

本文引用的文件 - agent/src/config/env_schema.py - agent/src/config/accessor.py - agent/src/config/loader.py - agent/src/config/schema.py - agent/src/config/paths.py - agent/src/config/migrate.py - agent/src/api/settings_routes.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件系统性说明 Vibe-Trading 的配置管理体系,覆盖环境变量管理、配置文件结构与校验、运行时热重载、配置迁移、备份与同步,以及与其它组件的集成方式。文档基于仓库中的实际实现进行解读,并提供流程图和时序图帮助理解数据流与控制流。

项目结构

配置相关代码集中在 agent/src/config 与 agent/src/api/settings_routes.py: - env_schema.py:集中定义所有环境变量的类型、默认值与别名,提供 EnvConfig 根模型。 - accessor.py:EnvConfig 的单例访问器,支持线程安全读取与运行时重置(热重载)。 - loader.py:结构化 Agent 配置加载、合并与覆盖(JSON/YAML),以及 Swarm 专用配置解析。 - schema.py:AgentConfig、MCPServerConfig、ChannelsConfig 等结构化配置模型与安全校验。 - paths.py:运行时根目录、配置文件候选路径、数据目录与工作区路径。 - migrate.py:将旧版“代码相对”状态迁移到运行时根目录,保证升级不丢失历史。 - settings_routes.py:通过 HTTP API 暴露设置读写能力,持久化到 .env 并触发进程内热重载。

graph TB subgraph "配置层" A["env_schema.EnvConfig"] --> B["accessor.get_env_config()"] C["loader.load_agent_config()"] --> D["schema.AgentConfig"] E["paths.get_runtime_root()"] --> F["paths.get_config_path()"] G["migrate.migrate_legacy_state()"] --> H["运行时根目录"] end subgraph "运行时" I["settings_routes.*"] --> J[".env 持久化"] I --> K["os.environ 更新"] I --> L["reset_env_config()"] end B --> I D --> I F --> C H --> C

图表来源 - agent/src/config/env_schema.py:545-577 - agent/src/config/accessor.py:52-93 - agent/src/config/loader.py:28-55 - agent/src/config/schema.py:452-492 - agent/src/config/paths.py:13-87 - agent/src/config/migrate.py:114-152 - agent/src/api/settings_routes.py:403-466

章节来源 - agent/src/config/env_schema.py:1-577 - agent/src/config/accessor.py:1-149 - agent/src/config/loader.py:1-346 - agent/src/config/schema.py:1-513 - agent/src/config/paths.py:1-113 - agent/src/config/migrate.py:1-153 - agent/src/api/settings_routes.py:1-674

核心组件

章节来源 - agent/src/config/env_schema.py:42-115 - agent/src/config/schema.py:301-492 - agent/src/config/loader.py:28-151 - agent/src/config/paths.py:13-113 - agent/src/config/migrate.py:1-153 - agent/src/api/settings_routes.py:476-674

架构总览

下图展示了配置在系统中的整体流转:从环境变量与磁盘配置到运行时生效,再到设置 API 的热重载流程。

sequenceDiagram participant UI as "前端/客户端" participant API as "settings_routes" participant FS as ".env/配置文件" participant ENV as "进程环境变量" participant CFG as "EnvConfig单例" participant AG as "AgentConfig(磁盘)" UI->>API : GET /settings/llm API->>FS : 读取 .env API-->>UI : 返回当前设置 UI->>API : PUT /settings/llm (更新) API->>FS : 持久化更新 API->>ENV : 写入/删除键值 API->>CFG : reset_env_config() CFG-->>API : 下次读取时重新加载 API-->>UI : 返回新设置 Note over API,AG : 启动时加载 AgentConfig(磁盘) 并校验

图表来源 - agent/src/api/settings_routes.py:497-587 - agent/src/config/accessor.py:79-93 - agent/src/config/loader.py:28-55

详细组件分析

环境变量管理(EnvConfig)

classDiagram class _EnvBase { +model_validator(_load_from_env) } class LLMConfig { +langchain_provider +timeout_seconds +max_retries } class DataConfig { +tushare_token +ccxt_exchange +finnhub_api_key } class APIConfig { +api_auth_key +cors_origins +vibe_trading_mcp_allowed_hosts } class SwarmConfig { +swarm_worker_timeout +swarm_max_workers } class AgentTuningConfig { +token_threshold +vt_heartbeat_interval_s +vibe_trading_enable_scheduler } class PathConfig { +vibe_trading_hypotheses_path +allow_session_mcp_servers } class OcrConfig { +vibe_trading_ocr_engine +vibe_trading_ocr_llm_model } class MemoryConfig { +preset +quality_enabled +gc_enabled +decay_enabled } class EnvConfig { +llm : LLMConfig +data : DataConfig +api : APIConfig +swarm : SwarmConfig +agent_tuning : AgentTuningConfig +paths : PathConfig +ocr : OcrConfig +memory : MemoryConfig +_resolve_api_key_alias() } EnvConfig --> LLMConfig EnvConfig --> DataConfig EnvConfig --> APIConfig EnvConfig --> SwarmConfig EnvConfig --> AgentTuningConfig EnvConfig --> PathConfig EnvConfig --> OcrConfig EnvConfig --> MemoryConfig LLMConfig --|> _EnvBase DataConfig --|> _EnvBase APIConfig --|> _EnvBase SwarmConfig --|> _EnvBase AgentTuningConfig --|> _EnvBase PathConfig --|> _EnvBase OcrConfig --|> _EnvBase MemoryConfig --|> _EnvBase

图表来源 - agent/src/config/env_schema.py:71-115 - agent/src/config/env_schema.py:122-197 - agent/src/config/env_schema.py:205-237 - agent/src/config/env_schema.py:245-295 - agent/src/config/env_schema.py:302-316 - agent/src/config/env_schema.py:323-378 - agent/src/config/env_schema.py:385-404 - agent/src/config/env_schema.py:461-537 - agent/src/config/env_schema.py:545-577

章节来源 - agent/src/config/env_schema.py:42-115 - agent/src/config/env_schema.py:122-577

结构化配置与校验(AgentConfig/MCPServerConfig)

flowchart TD Start(["加载 MCPServerConfig"]) --> Resolve["推断传输类型<br/>stdio/sse/streamableHttp"] Resolve --> CheckStdio{"是否 stdio?"} CheckStdio --> |是| StdioCheck["校验 command 存在<br/>禁止 url/headers/auth"] CheckStdio --> |否| HttpCheck["校验 url 存在<br/>禁止 command/args/env"] HttpCheck --> OAuthCheck{"是否启用 auth?"} OAuthCheck --> |是| OAuthRules["必须 https<br/>禁止 static headers"] OAuthCheck --> |否| Done["通过"] StdioCheck --> Done OAuthRules --> Done

图表来源 - agent/src/config/schema.py:349-411 - agent/src/config/schema.py:452-492

章节来源 - agent/src/config/schema.py:301-513

配置加载与覆盖(loader)

sequenceDiagram participant Caller as "调用方" participant Loader as "loader" participant FS as "文件系统" participant Schema as "Pydantic 模型" Caller->>Loader : load_agent_config(config_path?) Loader->>FS : 读取 agent.json/yaml FS-->>Loader : 原始字典 Loader->>Schema : model_validate(raw) Schema-->>Loader : AgentConfig Loader-->>Caller : 返回配置或默认空配置

图表来源 - agent/src/config/loader.py:28-55 - agent/src/config/loader.py:232-259

章节来源 - agent/src/config/loader.py:28-346

路径与运行时根(paths)

章节来源 - agent/src/config/paths.py:13-113

配置迁移(migrate)

flowchart TD S(["开始迁移"]) --> CheckLegacy{"是否存在旧目录内容?"} CheckLegacy --> |否| End(["结束"]) CheckLegacy --> |是| Staging["移动到 .migrating-* 临时目录"] Staging --> Rename["原子重命名为最终名称"] Rename --> Clean{"源目录是否为空?"} Clean --> |是| Remove["移除空源目录"] Clean --> |否| Skip["保留源目录"] Remove --> End Skip --> End

图表来源 - agent/src/config/migrate.py:57-112 - agent/src/config/migrate.py:114-152

章节来源 - agent/src/config/migrate.py:1-153

热重载与运行时更新(settings_routes + accessor)

sequenceDiagram participant Client as "客户端" participant Routes as "settings_routes" participant FS as ".env" participant OS as "os.environ" participant Acc as "accessor.reset_env_config()" Client->>Routes : PUT /settings/llm Routes->>FS : 写入更新 Routes->>OS : 更新/删除键值 Routes->>Acc : reset_env_config() Acc-->>Routes : 缓存失效 Routes-->>Client : 返回最新设置

图表来源 - agent/src/api/settings_routes.py:403-466 - agent/src/api/settings_routes.py:497-587 - agent/src/config/accessor.py:79-93

章节来源 - agent/src/api/settings_routes.py:1-674 - agent/src/config/accessor.py:1-149

依赖关系分析

graph LR Settings["settings_routes"] --> Accessor["accessor"] Settings --> Paths["paths"] Settings --> Loader["loader"] Loader --> Schema["schema"] Loader --> Paths Accessor --> EnvSchema["env_schema"] Settings --> EnvSchema

图表来源 - agent/src/api/settings_routes.py:20-24 - agent/src/config/loader.py:13-15 - agent/src/config/accessor.py:18-24

章节来源 - agent/src/api/settings_routes.py:1-674 - agent/src/config/loader.py:1-346 - agent/src/config/accessor.py:1-149 - agent/src/config/env_schema.py:1-577

性能考虑

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - agent/src/config/loader.py:44-55 - agent/src/config/schema.py:458-492 - agent/src/config/migrate.py:77-112 - agent/src/api/settings_routes.py:434-466

结论

Vibe-Trading 的配置体系以 Pydantic 为核心,实现了类型安全、集中管理与强校验;通过 loader 与 schema 保障结构化配置的可靠性;借助 accessor 与 settings_routes 实现进程内热重载;migrate 保证历史数据迁移的稳健性。该设计兼顾了安全性(live broker 限制、OAuth 校验)、可维护性(集中环境变量定义)与可用性(热重载与友好错误提示)。

[本节为总结性内容,无需特定文件引用]

附录

[本节为补充信息,无需特定文件引用]