尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

TradingAgents-CN 任务执行控制与数据同步功能增强实战解析

TradingAgents-CN 任务执行控制与数据同步功能增强实战解析 TradingAgents-CN 任务执行控制与数据同步功能增强实战解析【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN日期: 2025-11-07作者: TradingAgents-CN 开发团队标签:任务执行数据同步基本数据LLM配置性能优化Bug修复导读本文以 TradingAgents-CN 2025-11-07 的一次重要迭代为核心系统拆解任务执行控制终止/标记失败/删除执行记录、基本数据同步新增同步选项与 API、LLM 配置生效机制、调度器时区修复、自动索引创建与诊断日志等 18 个提交带来的具体改动。读者将掌握该项目的任务执行历史管理 API、数据同步底层调用链、MongoDB 配置读取策略以及索引设计与进度监控的实现细节可直接用于理解或扩展这一多智能体中文金融交易框架的调度与数据层。一、本次迭代总览2025 年 11 月 7 日TradingAgents-CN 完成了任务执行控制和数据同步功能的一次集中增强。核心改进覆盖六个方面任务执行控制支持终止/标记失败任务提供完整的执行历史管理基本数据同步新增基本数据同步选项覆盖自选股与个股详情页LLM 配置优化修复配置参数未生效问题改为从 MongoDB 读取配置项目结构优化清理项目根目录整理测试与脚本文件Bug 修复修复调度器时间显示、DashScope 兼容性等问题性能增强添加自动索引创建、详细诊断日志从代码变更量看本次迭代修改文件 30、新增文件 8、新增代码 1500 行净增约 1300 行属于一次覆盖面较广的功能性增强。二、任务执行控制功能2.1 四类执行控制能力任务执行控制是本次迭代的重头戏共 5 个提交实现了对调度任务执行记录的完整生命周期管理终止正在执行的任务对处于running状态的执行记录设置取消标记标记任务为失败状态处理进程已退出但数据库中仍显示 running的僵尸记录删除执行记录清理历史记录但不允许删除正在执行的任务实时进度监控长时间同步任务逐批更新进度百分比对应的 REST API 定义位于 app/routers/scheduler.py方法路径功能GET/api/v1/scheduler/executions获取全部执行历史支持job_id、status、is_manual过滤GET/api/v1/scheduler/jobs/{job_id}/executions获取指定任务的执行历史GET/api/v1/scheduler/jobs/{job_id}/execution-stats执行统计信息POST/api/v1/scheduler/executions/{execution_id}/cancel终止执行POST/api/v1/scheduler/executions/{execution_id}/mark-failed标记失败可携带reason参数DELETE/api/v1/scheduler/executions/{execution_id}删除执行记录2.2 底层实现取消标记与状态修正控制逻辑集中在 app/services/scheduler_service.pycancel_job_execution(execution_id)先校验执行记录存在且状态为running随后在scheduler_executions集合上写入cancel_requested: True标记而不是强行杀掉线程。真正执行任务的 Worker 在每批处理前轮询该标记并自行退出属于协作式取消cooperative cancellation。mark_execution_as_failed(execution_id, reason用户手动标记为失败)直接将该记录的status更新为failed并写入error_message用于清理进程已死但状态仍为 running的残留记录。delete_execution(execution_id)对status running的记录拒绝删除避免破坏正在运行的统计口径。执行历史查询支持is_manual过滤true表示手动触发、false表示自动触发源码中的实现区分了两类查询条件手动任务匹配is_manual: True自动任务匹配is_manual: {$ne: True}这一逻辑修复了此前手动/自动过滤不生效的问题。2.3 长时间任务进度监控与中途退出Tushare 长时间同步任务是进度监控的主要受益者。在 app/worker/tushare_sync_service.py 中基础信息、多周期行情、财务数据、新闻等同步流程均实现了统一的进度跟踪辅助方法_should_stop(job_id)在每批数据self.batch_size处理前检查取消标记收到停止信号时记录stats[stopped] True并优雅退出_update_progress(job_id, progress, message)按 UTC8 时间向scheduler_executions集合写入progress与progress_message字段实现前端实时进度条财务数据同步还通过update_job_progress与TaskCancelledException配合在任务被取消时记录并退出参见 app/services/scheduler_service.py 中TaskCancelledException的抛出逻辑。这套机制有效防止了任务无限运行用户可以在同步中途安全地停止任务。2.4 修复的问题清单问题表现解决方案表格列顺序错误列显示顺序混乱重新排序表格列定义执行时长显示显示不正确修复时间计算逻辑is_manual 过滤过滤不生效修复查询条件长时间任务无法中途停止添加进度监控和退出机制三、基本数据同步功能3.1 新增同步选项与数据范围本次迭代为个股详情页和自选股页面新增了基本数据同步选项共 4 个提交。同步的数据范围包括股票基本信息名称、代码行业分类市值数据总市值、流通市值上市日期三个典型应用场景个股详情页显示完整的基本信息接口见 app/routers/stock_data.py 的GET /api/v1/stock/basic-info/{symbol}自选股管理添加自选股时自动填充股票名称减少手动输入数据管理提供独立的基本数据同步选项可单独触发3.2 同步 API 设计文档中给出的新增 API 端点设计如下# 新增API端点 POST /api/v1/data/sync/basic { symbols: [000001, 000002], force_refresh: false } # 返回结果 { success: true, synced_count: 2, failed_count: 0, details: [...] }仓库中与此对应的实际端点位于 app/routers/sync.pyPOST /api/sync/stock_basics/run?forcefalse触发全量基本数据同步force参数控制是否强制刷新GET /api/sync/stock_basics/status查询最近一次同步状态3.3 底层服务实现基本数据同步的核心服务是 app/services/basics_sync_service.py其数据流为从 Tushare 获取 A 股股票基本信息 DataFrame补充最新总市值total_mv、流通市值、ROE 等字段通过UpdateOne批量 upsert 到 MongoDB 的stock_basic_info集合以代码数据源复合唯一键去重将同步状态持久化到sync_status集合键为stock_basics状态机idle | running | success | failed。服务通过单例访问器get_basics_sync_service供路由与调度器复用并且是异步友好的——阻塞的 Tushare/pandas IO 被卸载到线程池执行避免阻塞事件循环。四、LLM 配置优化4.1 配置参数生效问题修复问题描述用户在 Web 界面修改 LLM 配置后系统仍然使用旧的配置参数。根本原因系统启动时从 JSON 文件读取配置Web 界面修改后保存到 MongoDB但运行中的系统仍然持有内存中的旧配置导致改而不生效。解决方案改为优先从 MongoDB 读取 LLM 配置读取失败时回退到 JSON 文件# 修改前从JSON文件读取 config load_json_config(llm_config.json) # 修改后从MongoDB读取 config db.llm_config.find_one({_id: default}) if not config: # 回退到JSON文件 config load_json_config(llm_config.json)在仓库中app/services/analysis_service.py 的分析服务从 MongoDB 文档的llm_configs字段读取模型配置并按model_name匹配快速模型quick与深度模型deep逐项提取max_tokens默认 4000、temperature默认 0.7、timeout默认 180 秒、retry_times默认 3、api_base等参数读取失败时记录警告并回退到默认参数。这一数据库优先、文件兜底的策略使得 Web 端的配置修改能够在下一次分析时立即生效。4.2 详细 LLM 初始化日志为了便于排查提供商接入问题新增了带[LLM初始化]前缀的结构化初始化日志输出示例[LLM初始化] 开始初始化LLM提供商 [LLM初始化] 提供商: OpenAI [LLM初始化] 模型: gpt-4-turbo [LLM初始化] 温度: 0.7 [LLM初始化] 最大Token: 4096 [LLM初始化] 初始化完成这类日志配合 config/logging.toml 的统一日志框架可以快速定位提供商配置没生效是出现在初始化阶段还是调用阶段。五、项目结构优化本次迭代通过 5 个提交完成了项目根目录的清理与文件归档具体迁移如下文件/目录原位置新位置说明测试文件项目根目录tests/统一管理所有测试调试脚本项目根目录scripts/validation/验证和调试脚本启动脚本项目根目录scripts/startup/启动相关脚本停止脚本项目根目录scripts/shutdown/停止相关脚本部署脚本项目根目录scripts/deployment/部署相关脚本pip 冻结文件项目根目录reports/依赖报告优化效果项目根目录从 30 文件减少到 10 文件结构更清晰便于维护。从当前仓库的实际目录布局看这一规范已落地tests/下按0.1.14/、config/、services/、unit/等分门别类scripts/下细分了deployment/、development/、maintenance/、migration/、startup/、validation/等子目录reports/目录也确实承载了pip_freeze_local.txt等依赖报告文件。六、Bug 修复6.1 调度器时间显示问题问题描述调度器显示的时间与实际时间相差 8 小时典型 UTC 与北京时间混用问题。根本原因系统混合使用 UTC 时间和本地时间导致时区混乱。解决方案统一使用 naive datetime 存储本地时间# 统一使用naive datetime存储本地时间 from datetime import datetime # 修改前混合使用UTC和本地时间 task_time datetime.utcnow() # UTC时间 # 修改后统一使用本地时间 task_time datetime.now() # 本地时间无时区信息值得一提的是进度更新辅助方法_update_progress中实际使用的是get_utc8_now()UTC8 时间来写入updated_at等字段说明项目后续对时间语义进行了进一步收敛统一以东八区时间为准。6.2 DashScope 兼容性问题问题描述DashScope API 返回错误代码 20015不支持 ToolMessage 消息类型。解决方案在发送消息前过滤掉 ToolMessage# 过滤ToolMessage messages [msg for msg in messages if not isinstance(msg, ToolMessage)]重要说明该修复提交012f14f随后因可能影响其他功能而被回滚cd32005。这是一个典型的兼容性修复需要回归验证案例——在过滤消息类型的同时必须确保工具调用链路tool call → tool result在其他提供商上不被破坏。6.3 其他 Bug 修复添加缺失的get_china_stock_info_tushare函数实现修复数据查询逻辑七、性能优化7.1 自动索引创建为所有数据服务添加了启动时自动索引创建功能确保查询性能而不需要人工运维干预。文档给出的核心索引设计如下# 自动创建索引 def ensure_indexes(self): 确保所有必要的索引都已创建 # 股票基本信息索引 self.db.stock_basic_info.create_index(symbol, uniqueTrue) self.db.stock_basic_info.create_index(name) # 日线数据索引 self.db.stock_daily_quotes.create_index([(symbol, 1), (date, -1)]) self.db.stock_daily_quotes.create_index(data_source) # 自选股索引 self.db.user_favorites.create_index([(user_id, 1), (symbol, 1)])在仓库源码中app/services/basics_sync_service.py 的_ensure_indexes是更完整的落地版本覆盖了code source复合唯一索引支撑 upsert 去重code、source、name、industry、market单字段索引支撑查询与搜索total_mv、circ_mv、turnover_rate降序索引支撑市值/换手率排行updated_at降序索引支撑按更新时间排序pe、pb升序索引支撑估值筛选索引创建均使用backgroundTrue避免阻塞业务请求并通过_indexes_ensured标志保证同进程只创建一次。app/services/financial_data_service.py 同样实现了财务数据集合的索引初始化symbol、report_period、report_type、updated_at等。7.2 诊断日志增强新增 MongoDB 缓存配置诊断与 PE/PB 计算查询诊断日志帮助定位数据链路上的性能瓶颈[MongoDB诊断] 缓存配置: - 缓存类型: MongoDB - 数据库: tradingagents - 集合: cache - TTL索引: 已启用 [PE/PB诊断] 查询参数: - 股票代码: 000001 - 查询时间: 2025-11-07 10:30:00 - 缓存命中: 是/否 - 查询耗时: 123ms这类日志在排查某只股票 PE/PB 为什么取不到/取到旧值时极为有用通过缓存命中标识与耗时统计可以快速判断问题出在缓存层还是数据源层。八、前端改进8.1 市值单位优化将前端市值展示从百亿单位改为亿单位消除大数字场景下的理解成本原显示新显示说明1000百亿10万亿更直观100百亿1万亿更直观10百亿100亿更直观九、数据统计9.1 提交统计类别提交数主要改进任务执行5执行控制、历史管理、长时间任务数据同步4基本数据同步、API 支持、自动填充LLM 配置2配置生效、初始化日志项目结构5根目录清理、文件整理Bug 修复3时间显示、兼容性、缺失函数性能优化2自动索引、诊断日志前端改进1市值单位总计18-9.2 代码变更统计指标数量修改文件30新增文件8新增代码1500 行删除代码200 行净增代码1300 行十、核心价值与设计启示10.1 系统可控性提升任务执行控制支持终止和标记失败配合协作式取消标记用户可以随时叫停卡死的同步任务执行历史管理完整的记录和统计支持手动/自动任务区分与状态过滤长时间任务优化每批更新进度 停止信号轮询防止任务无限运行10.2 数据准确性提升基本数据同步补齐行业、市值、上市日期等字段个股详情页信息完整LLM 配置生效从 MongoDB 读取配置并回退 JSON 文件Web 修改即时生效自动索引优化覆盖高频查询路径减少全表扫描10.3 代码质量提升项目结构优化根目录瘦身测试/脚本/部署文件各归其位诊断日志完善[LLM初始化]、[MongoDB诊断]、[PE/PB诊断]前缀让日志可 grep、可定位Bug 修复统一 naive datetime 本地时间语义规避了 8 小时时区错位十一、总结本次迭代以 18 个提交完成了任务执行控制和数据同步功能的全面增强核心成果可归纳为任务执行控制终止、标记失败、删除记录、进度监控四条能力齐备基本数据同步新增同步选项与 API覆盖自选股与个股详情页LLM 配置优化修复配置参数生效问题MongoDB 优先、JSON 兜底项目结构优化根目录清理文件归类更符合工程规范Bug 修复统一本地时间语义、回滚有风险的 DashScope 兼容修复性能优化自动索引创建含复合唯一索引与排行索引、诊断日志增强这些改进显著提升了系统的可控性、数据准确性和代码质量其实现路径协作式取消、数据库优先配置、启动时索引自检、前缀化诊断日志对同类多智能体交易系统的调度与数据层设计具有直接的参考价值。十二、下一步演进方向基于本次迭代的收尾状态后续可从以下方向继续演进任务执行队列优化如优先级队列、并发控制数据同步性能优化如增量同步、断点续传LLM 提供商扩展完善多提供商适配层前端 UI 改进执行历史可视化、进度展示优化文档完善API 文档与运维手册补全【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表