Skip to content

07. 训练者记忆:从单笔交易走向长期习惯

上一章练习参考答案

第一题,产品早期建议只保留一个 primaryProblem,因为训练最怕一次指出十个问题,用户反而不知道下一步练什么。多个问题可以放到扩展字段或详细报告里。

第二题,顶层结构化值便于统计和过滤,sections 便于阅读和展示。这样前端既能做卡片,也能保留完整解释。

第三题,可以增加 reviewIdcreatedAtmodelVersionpromptVersiontoolTraceIdconfidencetagsuserId。这些字段后面做审计和回归测试很有用。

新问题:单笔复盘看不到长期习惯

第六章的报告已经能用了。但训练产品真正有价值的地方,不是评价一笔交易,而是发现用户反复犯的同一类错误。

用户会问:

“我最近是不是一直在追突破?”

如果系统只看当前 tradeId,它只能说这笔交易有没有追。它看不到“最近 20 笔里 13 笔都没有等回踩”。

所以第七章引入训练者记忆。

TrainingMemory

伴生工程里先用一个简单组件模拟记忆:

java
@Component
public class TrainingMemory {

    public String summaryFor(String tradeId) {
        return "最近 12 笔训练交易里,有 7 笔出现突破后立刻追入,"
                + "其中 5 笔没有等待回踩确认。";
    }
}

真实系统里,记忆可以来自数据库、向量库、训练日志或用户画像。但早期不要一上来就做复杂记忆系统。

先问自己:这条记忆会不会改变本次复盘建议?

如果不会,就不要展示。

记忆怎么进入报告

ReviewCoachService 会把记忆写入两个地方:

java
String memorySummary = trainingMemory.summaryFor(trade.tradeId());

sections.put("memory", memorySummary);

return new ReviewReport(
        ...,
        memorySummary,
        nextTask,
        sections);

这样前端可以单独展示“长期训练模式”,同时详细报告里也能引用它。

记忆不是聊天记录

很多人一听 Memory,就想到把所有历史对话都塞进去。

复盘教练不应该这样做。它要的是训练记忆,不是闲聊记忆。

更适合保存的是:

  • 最近多少笔出现同类错误。
  • 用户正在训练哪个 setup。
  • 用户最常破坏哪条规则。
  • 用户上次被要求练什么。
  • 这次是否延续了同一问题。

这些记忆能影响训练建议。普通寒暄不能。

本章效果

复盘响应里会出现:

json
{
  "memorySummary": "最近 12 笔训练交易里,有 7 笔出现突破后立刻追入,其中 5 笔没有等待回踩确认。",
  "sections": {
    "memory": "最近 12 笔训练交易里,有 7 笔出现突破后立刻追入,其中 5 笔没有等待回踩确认。"
  }
}

这会让教练的建议从“这笔错了”变成“这个问题反复出现,下一组要专门训练”。

这一章真正解决了什么

训练者记忆解决的是“长期模式识别”。

没有记忆,系统只能做单笔点评。有了记忆,系统才能像教练一样盯住用户反复犯的动作。

练习题

  1. 训练记忆应该保存原始对话,还是保存提炼后的训练标签?
  2. 用户要求“忘掉某段记录”时,记忆系统要怎么设计?
  3. 记忆摘要是每次实时生成,还是定时离线汇总?各有什么利弊?

Built with VitePress. Deployed on Cloudflare Pages.