review.md
导出日期:2026-03-19 核验范围:当前本地仓库代码、配置、文档、Web/Bot/CLI/API 入口 核验方式:静态核对,不包含远端 GitHub PR/commit 链路复原,不包含运行期在线验证 状态说明:下文“已完成”均指当前修复分支 / PR 中已经落地的改动,不代表主干已合入
这次核验后,可以把原始报告里的信息收敛成 4 类问题:
从当前仓库状态看,最优先的仍然是:
pipeline.py 异常掩盖、formatters.py 类型签名、单 Agent / 工具并发超时治理、CORS 兼容与配置解析容错;当前分支已做的收敛动作:
src/core/config_registry.py 中将 Deep Research / EventMonitor 相关配置标记为兼容保留、只读且不可编辑;.env 在升级时直接失效。需要明确的是:
这次修复的是“能力状态对齐”,不是“恢复 Deep Research / EventMonitor 实现”。
pipeline.py 异常掩盖原始错误fetch_and_save_stock_data() 已在进入 try 前给 stock_name 提供安全默认值,避免在股票名称查询本身失败时再次抛出未绑定变量错误并覆盖原始异常。
slice_at_max_bytes() 返回类型签名src/formatters.py 中 slice_at_max_bytes() 的类型标注已从错误的 str 修正为与实际实现一致的二元组返回。
当前分支已补齐:
as_completed() 的批次等待超时;仍需保留的边界是:
当前是 cooperative timeout / stop-waiting 级别治理,不是对底层阻塞线程的强制中断。
api/app.py 已避免在 CORS_ALLOW_ALL=true 时继续启用 allow_credentials=True,从而消除浏览器 credential 模式下的显式不兼容配置。
当前分支已在 src/config.py 中引入统一的安全数值解析辅助函数,并应用到一批核心数值配置项上,使非法 .env 值会回退到默认值或夹逼到合法区间,而不是直接在启动期抛异常。
本轮还同步更新了:
.env.exampledocs/CHANGELOG.mdAGENT_ORCHESTRATOR_TIMEOUT_S 在配置元数据中的默认值已与运行时默认 600 秒对齐以保证“实际行为 / 配置元数据 / 前端展示”三者尽量一致。
当前仓库中:
docs/CHANGELOG.md 仍将 ResearchAgent、/research、EventMonitor 作为已发布能力记录;src/config.py 与 src/core/config_registry.py 仍保留了 AGENT_DEEP_RESEARCH_BUDGET、AGENT_DEEP_RESEARCH_TIMEOUT、AGENT_EVENT_MONITOR_* 等配置;src/agent/ 目录下未找到 research.py、events.py 等对应核心实现文件;bot/commands/research.py。因此,可以确认的问题是:
当前仓库存在明显的能力漂移,至少对外宣称过的 Deep Research / EventMonitor 在当前代码状态下无法确认完整可用。
原始报告中“大盘复盘无 API / Web / Bot 入口”的说法不准确。
当前可确认的是:
main.py --market-review/marketsrc/core/market_review.py更准确的结论应为:
大盘复盘已有 CLI + Bot + 核心逻辑,缺口主要在 API / Web 正式闭环。
原始报告中“对话历史无限增长”这一表述不准确。
当前链路是:
ConversationSession.get_history() 读取数据库消息历史;DatabaseManager.get_conversation_history() 默认 limit=20;但更深层的问题仍然成立:
更准确的结论应为:
当前已有条数上限,但没有 token-aware 上下文治理。
BacktestService.get_strategy_summary() 当前实现会直接返回全局汇总,再补一个 strategy_id 字段。
这意味着:
AGENT_STRATEGY_AUTOWEIGHT 这类能力不能建立在真实的策略表现统计上;这是当前仓库里最明确、最值得优先修正的回测语义问题之一。
当前仓库中,“趋势交易 + 不追高 + 多头排列”等规则明确硬编码在以下路径:
src/analyzer.pysrc/agent/executor.pysrc/agent/agents/technical_agent.py这说明:
当前仓库中同时存在两套代理入口:
USE_PROXY / PROXY_HOST / PROXY_PORT
main.py 启动阶段的本地代理注入.env.example 和 FAQ 文档中HTTP_PROXY / HTTPS_PROXY
src/config.py 读取并写回环境变量因此更准确的结论不是“某一份文档一定写错了”,而是:
当前项目存在双套代理配置语义,用户侧理解和不同入口行为都可能不一致,值得统一。
pipeline.py 存在异常掩盖原始错误的风险在 fetch_and_save_stock_data() 中,stock_name 在 try 内赋值,但 except 中直接使用。
如果异常发生在 stock_name = self.fetcher_manager.get_stock_name(code) 之前或该行本身抛异常,则 except 中可能再次触发未绑定变量错误,覆盖原始异常。
该问题已在当前修复分支中处理,建议保留回归测试,防止后续重构再次引入同类问题。
slice_at_max_bytes() 的返回类型签名错误src/formatters.py 中 slice_at_max_bytes() 的签名标注为返回 str,但实际返回 (truncated, remaining) 二元组。
这是确定性的类型签名错误,会影响静态检查和调用者理解;当前修复分支已完成修正。
这里需要修正原始报告中“Agent 主循环没有总超时”的表述强度。
当前状态更准确地说是:
run_agent_loop() 本身没有总 wall-clock timeout;src/agent/runner.py 中工具并发执行 as_completed() 未设置 timeout;所以这条应表述为:
Agent 超时治理并非完全缺失。当前修复分支已经补齐主要缺口,但仍未做到对阻塞线程的强制中断。
* + credentials 冲突api/app.py 中当 CORS_ALLOW_ALL=true 时,会将 allow_origins=["*"],同时仍设置 allow_credentials=True。
这在浏览器 credential 模式下是不兼容的,属于明确的配置级错误风险;当前修复分支已完成修正。
int() / float() 转换src/config.py 中多个配置项直接执行 int() / float() 解析。
这意味着:
.env 配置错误可能导致应用启动失败;这条问题成立,当前修复分支已经引入统一安全解析层并覆盖了一批关键配置项。
当前调度系统只读取 SCHEDULE_TIME,未发现独立的 SCHEDULE_TIMEZONE 或等价配置。
这意味着调度行为依赖运行环境本地时区,在 Docker、CI 或海外服务器场景下会带来偏移风险。
当前仓库可以确认:
因此“补齐 API / Web 闭环”仍然是合理的短期任务。
当前后端历史详情接口支持:
query_id但当前 Web 前端实际主要按数值型 id 使用和建模。
因此更准确的问题不是“前后端完全冲突”,而是:
后端契约比前端公开使用方式更宽,是否正式支持
query_id访问需要进一步明确。
从当前架构看,项目已经具备:
因此原始报告关于“先做搜索层舆情增强,再评估独立爬虫服务”的方向是合理的。
但这部分属于方案建议,不是代码事实本身。
当前本地仓库可以确认:
d1ec2c8 feat: multi-agent architecture 对应能力轨迹在本地有痕迹;但当前本地核验 不能单独坐实 以下强结论:
28126db、a472b82、#648、#649 的完整覆盖链路;因此,这部分应保留为:
当前能确认“能力缺失/漂移”,但具体远端 Git 覆盖链路仍需进一步核实。
应从“无 API / Web / Bot 入口”修正为:
已有 CLI + Bot,主要缺 API / Web 正式入口。
应从“无限增长”修正为:
当前已有条数上限,但没有 token-aware 裁剪和摘要机制。
应从“Agent 主循环没有总超时”修正为:
多 Agent orchestrator 已有 cooperative timeout,但 single-agent / tool fan-out 路径仍缺完整超时保护。
应从“.env.example 与实际配置不一致”修正为:
项目中存在两套代理配置语义,需要明确主入口、兼容关系与优先级。
pipeline.py 异常掩盖问题slice_at_max_bytes() 类型签名query_id以下文件是本次核验中重点参考的依据:
review.md 原始内容docs/CHANGELOG.mdsrc/config.pysrc/core/config_registry.pysrc/core/pipeline.pysrc/formatters.pysrc/agent/runner.pysrc/agent/orchestrator.pysrc/agent/conversation.pysrc/storage.pysrc/services/backtest_service.pysrc/core/backtest_engine.pyapi/app.pyapi/v1/endpoints/history.pybot/commands/market.pymain.pyDSA 当前最先该处理的,不是继续堆新功能,而是先把:
这几类问题先收敛掉。否则功能越多,越难判断“哪些真的可用、哪些只是看起来存在”。