
TradingAgents-CN 配置矩阵全解运行时 Settings 与 TOML 日志的加载顺序、默认值与生产实践【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN本指南以仓库 docs/configuration/CONFIG_MATRIX.md 为骨架系统梳理 TradingAgents-CN 后端运行时全部配置项它们从哪里读取、按什么优先级覆盖、默认值是什么、哪些属于敏感项以及如何通过 TOML 驱动日志系统。读完本文你将能独立完成本地与 Docker 环境下的配置核对、敏感密钥注入、日志结构化输出切换并掌握新增配置项的规范变更流程。一、唯一读取入口与覆盖优先级TradingAgents-CN 的配置采用 PydanticBaseSettings实现全部运行时配置收敛到唯一入口from app.core.config import settings在 app/core/config.py 中Settings类通过以下声明完成环境变量与.env文件的绑定model_config SettingsConfigDict(env_file.env, env_file_encodingutf-8, extraignore)由此得到本文档约定的配置加载顺序覆盖优先级高 → 低进程环境变量最高优先级适合容器编排Kubernetes、docker-compose注入.env文件项目根目录下的.env参照 .env.example 复制而来适合本地开发代码默认值Settings类中各字段的Field(default...)。配置同时遵循两点纪律业务代码禁止直接读取os.environ只能通过settings.X访问下文变更流程 Checklist 中有明确要求未知的环境变量会被extraignore静默忽略不会污染Settings实例。日志配置的独立优先级日志不走 Pydantic 字段覆盖而是由 app/core/logging_config.py 中的resolve_logging_cfg_path()决策profile os.environ.get(LOGGING_PROFILE, ).lower() is_docker_env os.environ.get(DOCKER, ).lower() in {1, true, yes} or Path(/.dockerenv).exists() cfg_candidate config/logging_docker.toml if profile docker or is_docker_env else config/logging.toml即优先级为config/logging_docker.toml当LOGGING_PROFILEdocker或检测到/.dockerenv存在或DOCKER1|true|yesconfig/logging.toml内置默认配置TOML 缺失或解析失败时回退见 app/core/logging_config.py。TOML 解析器按 Python 版本自动选择3.11 使用标准库tomllib3.10 回退到第三方tomli若tomli也未安装则整体回退到内置默认配置并输出告警日志对应文档 FAQ 第一条。历史别名兼容早期版本使用的API_HOST/API_PORT/API_DEBUG三个环境变量已弃用但仍兼容读取。兼容逻辑位于 app/core/config.py模块加载时若检测到新键HOST/PORT/DEBUG未设置而老键存在会自动映射并发出DeprecationWarning。迁移期建议逐步替换为HOST/PORT/DEBUG后续版本将移除老键。二、核心服务配置配置项类型默认值说明DEBUGbooltrue调试模式settings.is_production返回not self.DEBUGHOSTstr0.0.0.0服务监听地址PORTint8000服务监听端口ALLOWED_ORIGINSList[str][*]CORS 白名单ALLOWED_HOSTSList[str][*]允许的主机头其中DEBUG是一个联动开关它不仅控制 API 调试行为还参与 MongoDB 库名作用域解析见下一节生产环境务必显式设置为false。三、MongoDB 配置与多实例库名推导配置项类型默认值敏感性MONGODB_HOSTstrlocalhost-MONGODB_PORTint27017-MONGODB_USERNAMEstr空【敏感】MONGODB_PASSWORDstr空【敏感】MONGODB_DATABASEstrtradingagentscn源码默认见 app/core/config.py-MONGODB_DATABASE_SCOPEstrauto库名作用域策略见下文MONGODB_DATABASE_INSTANCEstr空实例标签多实例隔离用MONGODB_AUTH_SOURCEstradmin认证库MONGO_MAX_CONNECTIONSint100连接池上限MONGO_MIN_CONNECTIONSint10连接池下限MONGO_CONNECT_TIMEOUT_MSint30000连接超时毫秒应对大量历史数据MONGO_SOCKET_TIMEOUT_MSint60000套接字超时毫秒MONGO_SERVER_SELECTION_TIMEOUT_MSint5000服务器选择超时毫秒注原文档矩阵写MONGODB_DATABASE默认tradingagents而当前仓库源码 app/core/config.py 的实际默认值为tradingagentscn本文以源码为准auto模式下最终库名还会带上主版本号与实例标签通常形如tradingagentscn_v1_user-host。只读属性MONGO_URI与库名推导MONGO_URI是只读属性app/core/config.py有用户名密码时拼装为mongodb://user:passhost:port/db?authSourceadmin无凭据时退化为mongodb://host:port/db。MONGO_DB属性则按MONGODB_DATABASE_SCOPE推导实际库名app/core/config.pyauto默认DEBUGtrue时按major_instance处理DEBUGfalse时按explicit处理explicit直接使用MONGODB_DATABASEmajor{base}_v{major}主版本号来自VERSION文件或TRADINGAGENTS_VERSION/APP_VERSION环境变量major_instance{base}_v{major}_{instance}其中 instance 默认取TRADINGAGENTS_DB_USER→ 系统用户名与主机名组合经_sanitize_mongo_db_name清洗非法字符替换为_超长截断并追加哈希后缀。这套机制使同一套代码可以安全地支撑多开发实例共享一个 MongoDB每个实例自动获得带版本与用户名标识的独立库名避免互相覆盖。生产建议使用具名用户 密码凭据通过密钥服务注入。四、Redis 配置配置项类型默认值敏感性REDIS_HOSTstrlocalhost-REDIS_PORTint6379-REDIS_PASSWORDstr空【敏感】REDIS_DBint0-REDIS_MAX_CONNECTIONSint20-REDIS_RETRY_ON_TIMEOUTbooltrue-只读属性REDIS_URLapp/core/config.py在配置密码时形如redis://:pwdhost:port/db仓库默认测试环境即要求 Redis 密码见 .env.example 的REDIS_PASSWORDtradingagents123。生产强烈建议设置密码或在受信网络中以防火墙/ACL 控制访问app/core/redis_client.py直接消费settings.REDIS_URL建立连接池。五、日志配置Settings 字段 TOML 双层驱动5.1 Settings 中的日志字段配置项类型默认值LOG_LEVELstrINFOLOG_FORMATstr%(asctime)s - %(name)s - %(levelname)s - %(message)sLOG_FILEstrlogs/tradingagents.logsettings.log_dir为只读属性直接由LOG_FILE推导目录名os.path.dirname(self.LOG_FILE)。5.2 TOML 支持的配置块TOML 配置config/logging.toml / config/logging_docker.toml覆盖以下能力[logging] level全局日志级别DEBUG/INFO/WARNING/ERROR/CRITICAL[logging.format]console/file控制台与文件的格式字符串json true | false启用控制台 JSON 结构化日志file_json true以及json_file/file_mode兼容写法控制文件 handler 是否输出 JSON[logging.handlers.file]directory/level/max_size支持10MB字符串由_parse_size解析为字节/backup_count扩展 handlermain主日志、webapi、worker、error仅 WARNING、structured各自可配置filename、level、max_size、backup_count[logging.loggers]按模块名覆盖级别例如streamlit/urllib3/requests/matplotlib/pandas统一压到 WARNING 以减少噪音tradingagents/web/dataflows/llm_adapters保持 INFO[logging.performance]slow_threshold_seconds超过阈值记慢操作、log_memory_usage[logging.security]log_api_calls、log_token_usage、mask_sensitive_data[logging.business]log_analysis_events、log_user_actions、log_export_events。5.3 两种环境的差异要点维度config/logging.toml本地/默认config/logging_docker.toml容器控制台colored true彩色输出colored false文件目录./logs/app/logs挂载卷文件 handlermain/webapi/worker/error四类同样四类 structured默认启用轮转大小10MB100MB[logging.docker]enabled falseenabled true5.4 实现细节控制台 JSON 结构化日志由内置SimpleJsonFormatterapp/core/logging_config.py输出字段为time/name/level/trace_id/message不依赖第三方库若需文件 JSON需显式开启file_json所有格式字符串若未显式包含%(trace_id)加载时会被自动追加trace%(trace_id)s保证与请求链路追踪上下文app/core/logging_context.py的LoggingContextFilter兼容Windows 平台自动改用concurrent_log_handler.ConcurrentRotatingFileHandler避免文件占用问题未安装时降级为RotatingFileHandler并告警。六、JWT 与安全配置配置项类型默认值敏感性JWT_SECRETstrchange-me-in-production【敏感】JWT_ALGORITHMstrHS256-ACCESS_TOKEN_EXPIRE_MINUTESint60-REFRESH_TOKEN_EXPIRE_DAYSint30-BCRYPT_ROUNDSint12-CSRF_SECRETstrchange-me-csrf-secret【敏感】SESSION_EXPIRE_HOURSint24-生产环境必须覆盖JWT_SECRET与CSRF_SECRET。仓库在启动自检app/main.py中会检测JWT_SECRET是否仍为默认值并给出警告生成随机密钥可参考.env.example给出的方式python -c import secrets; print(secrets.token_urlsafe(32))七、队列 / 并发 / 速率限制配置项类型默认值说明QUEUE_MAX_SIZEint10000任务队列容量QUEUE_VISIBILITY_TIMEOUTint秒300任务可见性超时5 分钟QUEUE_MAX_RETRIESint3最大重试次数QUEUE_POLL_INTERVAL_SECONDSfloat1.0队列轮询间隔QUEUE_CLEANUP_INTERVAL_SECONDSfloat60.0清理间隔WORKER_HEARTBEAT_INTERVALint秒30Worker 心跳间隔DEFAULT_USER_CONCURRENT_LIMITint3单用户并发上限GLOBAL_CONCURRENT_LIMITint50全局并发上限DEFAULT_DAILY_QUOTAint1000用户每日配额RATE_LIMIT_ENABLEDbooltrue速率限制总开关DEFAULT_RATE_LIMITint100每分钟请求数上限这些参数直接决定多用户场景下分析任务的分发与限流表现调整时需结合 Worker 部署规模与用户量综合评估避免并发上限过高击穿数据源频率限制。八、缓存 / 监控配置项类型默认值说明CACHE_TTLint秒3600常规缓存 1 小时SCREENING_CACHE_TTLint秒1800选股结果缓存 30 分钟METRICS_ENABLEDbooltrue监控指标开关HEALTH_CHECK_INTERVALint秒60健康检查间隔MAX_UPLOAD_SIZEint1048576010MB上传大小上限UPLOAD_DIRstruploads上传目录九、调度 / 时区 / 路径配置项类型默认值说明SYNC_STOCK_BASICS_ENABLEDbooltrue股票基础信息同步开关SYNC_STOCK_BASICS_CRONstr空CRON 表达式设置后优先生效SYNC_STOCK_BASICS_TIMEstr06:30未设置 CRON 时使用的简单时间HH:MMTIMEZONEstrAsia/Shanghai全局时区TRADINGAGENTS_DATA_DIRstr./data数据目录调度配置遵循“CRON 优先、简单时间兜底”的设计SYNC_STOCK_BASICS_CRON非空时直接按 CRON 执行否则回落到SYNC_STOCK_BASICS_TIME。同类 CRON 配置在仓库中广泛存在Tushare / AKShare / BaoStock 三大数据源的统一同步均提供了*_BASIC_INFO_SYNC_CRON、*_QUOTES_SYNC_CRON、*_HISTORICAL_SYNC_CRON、*_FINANCIAL_SYNC_CRON、*_STATUS_CHECK_CRON等细分调度项完整清单见 app/core/config.py 与 .env.example。十、外部服务与数据源配置配置项类型默认值敏感性STOCK_DATA_API_URLstr空-STOCK_DATA_API_KEYstr空【敏感】TUSHARE_TOKENstr空【敏感】TUSHARE_ENABLED/TUSHARE_TIERbool / strtrue/standard-TUSHARE_RATE_LIMIT_SAFETY_MARGINfloat0.8范围 0.1~1.0速率限制安全边际HTTP_PROXY/HTTPS_PROXY/NO_PROXYstr空 / 空 / 国内数据源域名白名单-代理配置值得特别说明NO_PROXY默认已包含eastmoney.com、gtimg.cn、sinaimg.cn、api.tushare.pro、baostock.com等国内数据源域名确保走代理访问国外大模型 API 的同时国内行情数据直连不被代理拦截。模块加载时settings中的代理配置会自动写回os.environapp/core/config.py使requests库直接生效。注意 Windows 平台不支持通配符*必须使用完整域名。此外仓库还包含大量按需取数场景的配置例如港股/美股数据缓存时长与默认数据源HK_DATA_CACHE_HOURS24、US_DEFAULT_DATA_SOURCEyfinance、实时行情入库QUOTES_INGEST_ENABLED、QUOTES_INGEST_INTERVAL_SECONDS360、QUOTES_ROTATION_ENABLED、QUOTES_TUSHARE_HOURLY_LIMIT2、新闻同步NEWS_SYNC_CRON0 */2 * * *、NEWS_SYNC_HOURS_BACK24以及 SSE 推送参数SSE_HEARTBEAT_INTERVAL_SECONDS10等全部可在.env中按需覆盖。十一、历史别名与弃用策略当前维护的兼容映射已弃用键新键API_HOSTHOSTAPI_PORTPORTAPI_DEBUGDEBUG兼容行为若新键未设置且老键存在进程启动时自动映射并发出DeprecationWarning对应 app/core/config.py 的模块级代码。此外仓库还在 .env.example 中明确标注“以下键为app/core/config.py中的正式字段优先使用这些键……未来版本将移除”历史键。文档要求新增/修改配置必须同步.env.example与本页矩阵并明确标注是否敏感、默认值与弃用计划。十二、新增配置项变更流程 Checklist任何向系统添加新配置的改动都应逐项执行以下检查源自 docs/configuration/CONFIG_MATRIX.md在 app/core/config.py 的Settings中添加强类型字段Field(default...)并附中文注释说明用途与边界更新 .env.example 的示例与说明标注[REQUIRED]/[RECOMMENDED]/[OPTIONAL]级别业务代码仅通过settings.X读取禁止直接使用os.environ若涉及日志改动优先通过 TOMLconfig/logging.toml而非硬编码增加/更新最小单测覆盖默认值、环境变量覆盖、边界校验可用ge/le等 Pydantic 约束如MARKET_ANALYST_LOOKBACK_DAYS的ge5, le365。仓库的测试目录如 tests/test_mongo_db_naming.py、tests/test_config_system.py、tests/system/test_config_summary.py即为上述 Checklist 中单测环节的落地示例新增配置时可参照其断言风格编写覆盖用例。十三、常见问题FAQQ1本地日志为何未使用 TOMLAPython 3.10 环境需要安装tomlipip install tomli若未安装app/core/logging_config.py中的toml_loader为None会直接回退到内置默认配置日志会输出TOML加载器可用: False的提示。Python 3.11 使用标准库tomllib无需额外安装。Q2Docker 环境如何选择日志配置A满足以下任一条件即自动选用config/logging_docker.toml设置LOGGING_PROFILEdocker或存在/.dockerenv文件或DOCKER1|true|yes。三者的判定逻辑见resolve_logging_cfg_path()app/core/logging_config.py。Q3Redis 端口是多少A默认6379tests 已覆盖默认值如本地临时端口不同可在.env中以REDIS_PORTport覆盖。Q4MONGODB_DATABASE_SCOPEauto时到底连哪个库A取决于DEBUG调试模式解析为major_instance库名带主版本号与实例标签生产模式解析为explicit直接用MONGODB_DATABASE。可在启动时查看settings.MONGO_DB_IDENTITY字典确认解析结果app/core/config.py。Q5如何确认当前生效的配置A运行python -m cli.main config可检查配置状态见 .env.example 使用说明或参考仓库中scripts/check_*系列诊断脚本如scripts/check_api_config.py、scripts/check_mongodb_system_config.py核对特定配置项。附配置核对速查场景推荐做法本地开发复制.env.example为.env默认值即可跑通生产部署DEBUGfalse覆盖JWT_SECRET/CSRF_SECRET/MONGODB_PASSWORD/REDIS_PASSWORD启用config/logging_docker.tomlDocker 编排通过环境变量注入敏感项避免写入镜像与仓库多实例共享数据库设置MONGODB_DATABASE_SCOPE与MONGODB_DATABASE_INSTANCE隔离库名日志排障先确认 TOML 是否被加载启动日志中的日志配置文件路径打印再检查logs/下 main/webapi/worker/error 四类文件【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考