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
- 用户查看某只股票时,系统能提示:“最近同类 buy 信号 5d 表现偏弱,本次应降低置信度”。
- Agent 问股时,不只看到历史报告,还能看到历史信号 outcome 和用户反馈。
- DecisionAgent 最终合成时可以引用低敏复盘摘要,而不是重复犯同类错误。
- Skill / strategy 权重能基于真实 tagged outcome 慢慢校准,样本不足时保持中性。
- 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.pysrc/repositories/decision_signal_outcome_repo.pysrc/services/decision_signal_summary.pysrc/agent/memory.pysrc/agent/agents/base_agent.pysrc/services/backtest_service.pyapi/v1/endpoints/decision_signals.pyapi/v1/schemas/decision_signals.pyapps/dsa-web/src/pages/DecisionSignalsPage.tsxapps/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