# ============================================================ # 全局可配置项(可提交,不含任何密钥) # 约定(见 AGENT.md §2 / §33): # - 可配置项统一写入本文件(项目根 config.yaml) # - 密钥统一放根目录 .env(见 .env.example), # 本文件通过 *_env 字段引用对应环境变量名,不写明文 # ============================================================ app: name: "qlib-platform" version: "0.1.0" debug: false # 从 .env 读取应用密钥的环境变量名 secret_key_env: "APP_SECRET_KEY" api: prefix: "/api" database: # 数据库 URL 选择优先级: # 1) 环境变量 database.url_env(如 DATABASE_URL,可在 .env 覆盖) # 2) database.mysql(enabled: true 时由 host/port/db/user 组装 mysql+pymysql URL) # 3) 兜底 sqlite:///./data/quant.db(相对路径自动解析到项目根 data/) url_env: "DATABASE_URL" echo: false # Alembic 迁移脚本目录(相对 backend/) migrations_dir: "app/infrastructure/persistence/migrations" # ---- MySQL(当前默认库;2026-09 由 SQLite data/quant.db 全量迁移而来)---- # host/port/db/user 明文可提交;密码经 password_env 引用 .env 变量 # (AGENT.md §33:密钥只放根目录 .env,本文件不写明文密码)。 mysql: enabled: true host: "192.168.1.10" port: 3306 db: "qlib" user: "qlib" password_env: "MYSQL_PASSWORD" charset: "utf8mb4" data_source: primary: "tushare" fallback: "sina" tushare_token_env: "TUSHARE_TOKEN" storage: # 相对项目根目录 raw_dir: "data/raw" normalized_dir: "data/normalized" parquet_dir: "data/parquet" qlib_dir: "data/qlib" job: # 研究任务执行模式: # subprocess —— 独立子进程执行(内存隔离 + RLIMIT 上限,防研究任务 OOM 拖垮 API 服务) # local —— 本进程内执行(开发 / 单测,无隔离) # 可用环境变量 JOB_MODE 覆盖(测试强制 local)。 mode: "subprocess" # subprocess 模式下子进程虚拟地址空间上限(GB);达到上限任务以 MemoryError 失败,不会 OOM 整机 max_memory_gb: 6 # 并发研究子进程上限(超出直接失败并提示稍后再试) max_concurrent_jobs: 2 agent: llm: # 大模型接入:URL 与模型名在此配置(明文、可提交); # 密钥只放根目录 .env(LLM_API_KEY,见 .env.example)——本文件不写任何 Key。 # 可选:仍可通过 .env 的 LLM_BASE_URL / LLM_MODEL 覆盖下面两个值。 base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1" model: "qwen-plus" base_url_env: "LLM_BASE_URL" model_env: "LLM_MODEL" api_key_env: "LLM_API_KEY" logging: level: "INFO"