Files
daily_stock_analysis/docs/run-diagnostics-p2.md
mumu 8a23124d01 feat: add #1391 Phase 2 run diagnostic summaries (#1444)
* fix(issue-1412): [bug]-stock_list格式问题

* fix(review-feedback-1413): preserve exchange hint for dotted A-share inputs

* fix(review-feedback-1413): Keep normalized A-share codes usable by market routing and preserve

* fix(review-feedback-1413): Limit raw dotted codes to fetchers that can parse them

* fix(review-feedback-1413): Keep Tushare daily input normalized for ETF detection

* fix(review-feedback-1413): 澄清结构化检测中的外部模型/API 与运行时配置迁移风险

* fix(review-feedback-1413): 处理或明确确认该失败与本 PR 无关且已有维护者豁免依据

* fix: keep stock list input as bare codes

* docs: add phase-0 run diagnostics contract

* fix(review-feedback-1435): 修正描述并澄清/补齐运行时代码变更的验证证据

* fix(review-feedback-1435): 补齐前缀提示识别,并增加对应回归测试

* fix(review-feedback-1435): 修正

* fix(review-feedback-1435): 解决冲突并更新描述/验证记录后再合入

* fix(review-feedback-1435): 解决冲突,并在最终 head 上重新确认 python -m pytest tests/test a share fetcher code

* fix(review-feedback-1435): 修复并补齐回归覆盖后再复核最终 head

* fix(review-feedback-1435): data provider/baostock fetcher.py 的 convert stock code 只从 .SH/.SS/.SZ

* fix: preserve A-share exchange hints

* fix(review-feedback-1435): 修正 docs/run-diagnostics-p0.md 对 Tushare 本轮范围的矛盾描述

* feat: add phase 1 run diagnostics trace plumbing

* feat: add phase 2 run diagnostic summaries

* fix(review-feedback-1441): 打通 trace id 与数据源运行快照,改动目标明确

* fix(review-feedback-1444): 修复 Agent 模式新报告通过历史诊断 API 返回 unknown 的正确性问题

* fix(review-feedback-1444): Propagate diagnostics lookup errors instead of masking them

* fix(review-feedback-1444): 补对应回归断言

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突

* fix(review-feedback-1444): 解决冲突

* fix(review-feedback-1444): 解决

* fix(review-feedback-1444): 解决

* fix(review-feedback-1444): 解决冲突

* fix(review-feedback-1444): 解决

* fix(review-feedback-1444): 解决

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突

* fix(review-feedback-1444): Derive news diagnostics from retrieval evidence

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突并基于解决后的最终 diff 重新确认 docs/CHANGELOG.md、诊断链路和测试结果

* fix(review-feedback-1444): 解决冲突

* fix(review-feedback-1444): 解决冲突后再合入

* fix(review-feedback-1444): 解决冲突并重新跑阻断型 CI,尤其是 backend-gate 和相关诊断/API/history 回归

* fix(review-feedback-1444): preserve report timestamp when enriching task results

* fix: address run diagnostics review feedback

* fix: redact diagnostic copy text secrets

* fix(review-feedback-1444): 补一条多渠道部分失败的回归测试
2026-05-26 00:05:24 +08:00

3.9 KiB
Raw Permalink Blame History

运行诊断与数据可靠性 1.0Phase 2

本文档记录 #1391 Phase 2 的后端落地范围:基于 Phase 1 的 trace_id 与 provider run 记录,生成用户可读的运行诊断摘要,并提供可复制的脱敏排障文本。

本轮范围

  • 新增 RunDiagnosticSummary 聚合逻辑,输出总体状态:
    • normal / 正常
    • degraded / 部分降级
    • failed / 失败
    • unknown / 未知
  • 摘要覆盖以下关键链路:
    • 实时行情
    • 日线数据
    • 新闻搜索
    • LLM
    • 通知
    • 历史保存
  • AnalysisService 同步/异步任务结果追加可选 diagnostic_summary
  • 新增历史报告诊断 API
GET /api/v1/history/{record_id}/diagnostics

record_id 支持历史记录主键 ID 或 query_id,返回诊断摘要与 copy_text

复制排障信息

copy_text 是面向 issue/排障的纯文本,包含:

  • trace_id
  • query_id
  • stock_code
  • trigger_source
  • 总体 data_status
  • 实时行情、日线、新闻、LLM、通知、历史保存的简短状态
  • 首要原因

生成前会复用运行诊断脱敏规则,避免输出 token、API key、Authorization、Cookie、webhook URL、邮箱密码、代理凭据等敏感信息。

兼容性边界

  • 本轮不新增配置项,不改变数据源优先级,不改变 fallback 策略。
  • 本轮不改变任何 LLM/provider/Base URL/配置迁移语义,仅新增历史快照中的诊断字段与查询接口。
  • API 只追加可选字段和新增只读接口;旧客户端可忽略。
  • 旧报告没有 context_snapshot.diagnostics 时返回 unknown,不报错。
  • 通知诊断在当前任务上下文中记录;历史报告如果保存时尚无通知证据,会在摘要中显示通知结果未知。
  • 诊断摘要生成失败不得影响报告读取或分析主流程。

结构化检测告警澄清

  • 自动化检测命中的“模型/provider/base URL 兼容风险”来源是:src/agent/factory.py 新增了 agent_max_stepsagent_orchestrator_timeout_s数字安全兜底_coerce_config_int),因此扫描可能将其误识别为配置敏感路径;该命中属于测试与路由保护触发,不是运行时配置或兼容语义变更。
  • 当数值配置存在非法值时,系统会记录 warningsrc.agent.factory 日志(示例:[AgentFactory] Invalid value for agent_max_steps...),并回退到默认值;日志用于定位“参数未生效”类问题,与模型/provider/base URL 兼容性独立。
  • 本轮确认无静默迁移/清空/改写:
    • src/core/pipeline.pysrc/services/analysis_service.py 仅新增诊断记录,不修改 Config 中任何 litellm_modelagent_litellm_modelopenai_base_url 或 channel LLM_* 字段。
    • src/agent/factory.py_coerce_config_int 只在构建执行参数时计算 max_stepstimeout_seconds,并且不写回到 config 对象;litellm_modelagent_litellm_modelopenai_base_url 原值在构造链路中完整透传。
    • 本轮不触发 Config 的运行时清理、持久化回写或迁移流程,因此不存在写回导致运行时配置被重写的风险。
  • 回归验证:tests/test_agent_pipeline.py::TestAgentConfig::test_build_agent_executor_does_not_mutate_llm_route_configtests/test_agent_pipeline.py::TestAgentConfig::test_build_agent_executor_multi_arch_does_not_mutate_llm_route_config 明确断言上述字段在 build_agent_executor 后保持原值。
  • 回退路径:如需恢复到旧行为,移除本轮相关提交;或将 diag_* 字段从 context_snapshot/RunDiagnosticSummary 的反序列化链路中移除。主链路与模型/provider 配置无需额外迁移或修复。

验证建议

python -m pytest tests/test_run_diagnostics_p2.py tests/test_run_diagnostics_p1.py
python -m py_compile src/services/run_diagnostics.py src/services/history_service.py api/v1/endpoints/history.py api/v1/schemas/history.py