feat: 增强 DecisionSignal 后验复盘并反馈到 Agent 记忆

Author: ZhuLinsenCreated Jul 3, 2026Updated Sep 4, 2026
Labelsenhancementaifeat

功能描述 / Feature Description

把现有 DecisionSignal 的 outcome / feedback 从“可查询统计”升级成“可学习的复盘资产”,让下一次分析、Agent 问股和策略权重能看到历史判断为什么对、为什么错。

大白话:现在系统已经能记录 AI 建议,也能事后算 hit/miss;但这些结果还没有真正变成“经验”。这个 issue 目标是让系统能说:上次为什么看错、哪类信号容易错、同类股票下次应该更保守还是更积极。

现状 / Current State

  • docs/decision-signals.md 已定义 DecisionSignal 只记录建议、证据摘要、风险、观察条件、生命周期和来源,不执行下单。
  • DecisionSignalOutcomeService 已支持 1d/3d/5d/10d 后验评估、outcome stats、用户 feedback,以及 action/market/phase/source/quality/holding_state breakdown。
  • AgentMemory 已有开关 AGENT_MEMORY_ENABLED,能读取历史分析和 Backtest summary,并做 confidence calibration。
  • BaseAgent 已能注入 memory context,并在样本足够时调整 agent opinion confidence。
  • 但当前 memory 更偏 AnalysisHistory + BacktestResult,没有充分消费 DecisionSignal outcome / feedback,也没有沉淀“失败原因”和“同类条件下的校准建议”。
  • 相关但不同的 issue:#1758 聚焦按 decision_profile 做聚合后验统计;本 issue 聚焦把后验结果反馈到分析/Agent 决策闭环。

使用场景 / Use Case

  1. 用户查看某只股票时,系统能提示:“最近同类 buy 信号 5d 表现偏弱,本次应降低置信度”。
  2. Agent 问股时,不只看到历史报告,还能看到历史信号 outcome 和用户反馈。
  3. DecisionAgent 最终合成时可以引用低敏复盘摘要,而不是重复犯同类错误。
  4. Skill / strategy 权重能基于真实 tagged outcome 慢慢校准,样本不足时保持中性。
  5. Web AI 建议页可以展示“复盘摘要”:命中、错判、unable 原因、常见失败模式。

期望实现 / Proposed Solution

P0:定义 ReviewMemory 低敏契约

建议新增一个面向 Agent/分析消费的低敏结构,例如:

{
  "stock_code": "600519",
  "scope": "stock|market|action|factor|skill",
  "sample_size": 42,
  "completed": 31,
  "hit_rate_pct": 58.1,
  "avg_return_pct": 1.7,
  "common_miss_reasons": ["追高后回撤", "大盘退潮", "数据质量偏低"],
  "confidence_adjustment": "neutral|downgrade|upgrade",
  "notes": ["样本不足,仅供观察"]
}

要求:

  • 只使用低敏字段。
  • 不输出完整 evidence、metadata、raw diagnostics、Prompt、新闻正文或私密持仓。
  • 有样本阈值,样本不足时只做观察提示,不改变结论。

P1:Outcome + Feedback 进入 AgentMemory

  • AgentMemory.get_stock_history() 可以合并最近 DecisionSignal outcome:action、horizon、outcome、return、unable_reason、feedback。
  • 增加 AgentMemory.get_decision_signal_review(...) 或类似服务,支持按股票、action、market_phase、source_agent、data_quality_level 查询低敏统计。
  • BaseAgent._build_memory_context() 注入更有用的复盘摘要,而不是只注入历史 signal/score/price。

P2:复盘结果影响置信度,但必须保守

  • 若样本充足,允许对 agent confidence 做小幅校准。
  • 样本不足、unable rate 高、数据质量差时,只提示风险,不做强校准。
  • 校准要可解释:输出 raw_confidence、adjustment_reason、sample_size、calibration_source。
  • 不允许把 hit_rate 直接当仓位比例或买卖强度。

P3:Web 和 API 可见复盘摘要

  • DecisionSignal 详情页可展示该信号的 outcome、feedback 和同类信号摘要。
  • 可提供只读 review summary API,避免前端自己拼复杂统计。
  • 支持从某个历史报告 / signal deep link 查看“这条建议后来怎么样”。

P4:和因子库 / multi-agent 增强联动

  • 如果 #1902 因子库落地,复盘摘要可以按因子标签拆分。
  • 如果 multi-agent 分歧归因落地,复盘摘要可以按 agent/source_agent/skill_consensus 拆分。
  • 在这些字段不存在时必须 fail-open,不影响现有 outcome 计算。

非目标 / Non-goals

  • 不改变 DecisionSignal “不下单、不调仓”的边界。
  • 不做实盘交易、自动止盈止损或 copy trading。
  • 不在样本不足时给“这个策略有效/无效”的强结论。
  • 不把用户 feedback 当作真实收益结果;feedback 只能作为主观可用性信号。
  • 不把后验统计做成黑箱自动改 Prompt;所有校准都要有可见理由和回滚路径。

验收标准 / Acceptance Criteria

  • 有 ReviewMemory 或同等低敏复盘摘要契约,字段来源和脱敏边界清晰。
  • AgentMemory 能读取 DecisionSignal outcome / feedback,并在开启 AGENT_MEMORY_ENABLED=true 时注入低敏摘要。
  • 样本不足、unable rate 高、数据质量差时不做强校准,只提示限制。
  • 置信度校准可解释,包含样本量、来源、调整方向和原因。
  • DecisionSignal Web/API 至少能展示单条信号 outcome + 同类复盘摘要的 MVP。
  • 原有 POST /api/v1/decision-signals/outcomes/run、feedback、stats 行为保持兼容。

建议影响路径 / Suggested Affected Areas

  • src/services/decision_signal_outcome_service.py
  • src/repositories/decision_signal_outcome_repo.py
  • src/services/decision_signal_summary.py
  • src/agent/memory.py
  • src/agent/agents/base_agent.py
  • src/services/backtest_service.py
  • api/v1/endpoints/decision_signals.py
  • api/v1/schemas/decision_signals.py
  • apps/dsa-web/src/pages/DecisionSignalsPage.tsx
  • apps/dsa-web/src/components/decision-signals/*
  • docs/decision-signals.md

验证建议 / Verification

  • 后端:覆盖 outcome/feedback 为空、unable、样本不足、样本充足、按股票/action/phase 聚合等路径。
  • Agent:覆盖 AGENT_MEMORY_ENABLED=false 完全无行为变化;开启后只注入低敏摘要。
  • 前端:覆盖详情页复盘摘要、loading/error/empty 状态。
  • 文档:更新 DecisionSignal 专题和 full-guide;如新增用户可见复盘视图,同步 changelog。

回滚方式 / Rollback

  • 首版应保持只读/低敏消费,回滚可通过关闭 AGENT_MEMORY_ENABLED 或 revert 对应 PR。
  • 若新增 sidecar 表或索引,PR 需说明旧 outcome/feedback 数据保留和手动清理策略。
  • 回滚后现有 DecisionSignal、feedback、outcome 数据不应被删除,普通分析/告警/通知/组合风险链路继续可用。

Source: ZhuLinsen/daily_stock_analysis