乐于分享
好东西不私藏

OpenClaw 测试团队实践(四)

OpenClaw 测试团队实践(四)

上一篇,Agent 知道自己在给谁干活了——人格告诉它”你是谁”,安全告诉它”哪里不能动”。

但关掉会话再开一个,它还记得吗?

一、关机就失忆

装好了人格、写好了安全规矩,Agent 第一次干得漂亮。解绑测试点,5 个聚焦节点,我直接能进用例草稿。

第二天,我让它帮我分析另一条测试链路。它问我的第一句话是:”你们设备的联网形态有哪些?”,昨天刚教过它,它忘得干干净净。我又需要再次重复一次需求。又过了两天,我让它帮忙看一条需求,又使用表格形式输出了测试项,缺少了所属模块、功能,无法让我直接使用。

同一件事教三遍,模型每次都在”聪明地回答”,但每次回答的起点都是零,就像一条只有7秒钟记忆的鱼,让人无可奈何的实习生,每天都要教相同的东西,就是不知道记下来

这不是它不够聪明。它差的不是聪明,是记性。

我把这个问题拆了一下:

维度
没有 memory 的 Agent
有 memory 的 Agent
重复错误
你纠正过的它下次还犯
纠正写进记忆,不再犯
上下文成本
每次从零开始教
上次教过的自动带上
token 去向
花在”教它认识我”上
花在业务逻辑上
趋势
用一个月和用一天没区别
用得越久越好用

最后一行是关键——Agent 的价值不是”一次干得好”,是”越用越好用”。记忆是它越用越好的关键,所以经常听见有人讲“养龙虾”、“调教AI”。

二、记忆不是垃圾桶

那什么样的事情要记下来,什么事情不用记下来?AI怎么知道要记下来?

在一些教程中,会按日期保存记忆,比如昨天一份、今天一份,但是我认为这种方式并不太好,记得内容太多了,并不是每天的对话都有必要记下来。所以我采用了部分记忆的形式,把一些经常遇到的问题、AI出过错的全部让AI记下来,比如某次遇到的公司网络 TLS 的问题、Python 在 Windows 上的编码坑、PPT 生成时踩的六个坑,全往记忆文件里堆,因为我担心后面再遇到相同的问题,AI会不断的重复查找、搜索的过程,有时候AI出错了,会在错误的路上不断尝试。但是堆完发现:Agent 启动时要读的文件越来越长,token 花在”读记忆”上的比例越来越高,留给业务逻辑的空间反而被挤小了。我过分的堆记忆,并没有节省 token,反而浪费了 token。

记忆不是垃圾桶,是长期操作系统配置——这条原则是被撑过之后才长出来的。

我把记忆拆成了三层:

存什么
读写规则
生命周期
FACT.md
6 个月后还有价值的长期规则、环境约束、稳定偏好
改前先判断”值不值得长期存”,只做最小变更
永久
JOURNAL.jsonl
一次性事件:踩过的坑、纠正过的做法、项目里程碑
只追加不改,按时间排
归档型,不主动加载
Agent 专项记忆
persona、voice、corrections-log 等
按需加载,MEMORY.md 只做索引
跟 Agent 走

三层的设计思路是分层记忆:索引层自动加载,详情层按需打开。MEMORY.md 全文不到 20 行,只放索引和触发时机——”启动新任务时至少打开 persona 加 corrections-log”。Agent 每次启动只花几十个 token 读索引,真正需要时才去读详情。

整个记忆的运转方式如下:

flowchart TD    A[会话启动:读索引层 MEMORY.md] --> B[按需加载详情层]    B --> C[带着记忆干活]    C --> D{你纠正了吗?}    D -->|没有| E[完成]    D -->|纠正了| F[判断:6个月后还有价值吗?]    F -->|是| G[写入 FACT.md]    F -->|否,但值得留痕| H[追加到 JOURNAL]    F -->|一次性,不值得记| I[不记]    G --> A    H --> A
这张图的核心不是"存",是"筛选"——纠正了不等于要记,记了不等于永久存。三条过滤规则:
  1. 6 个月后还有价值吗?
     有 → FACT.md;没有 → 下一条
  2. 能从代码、文件、git 历史推导出来吗?
     能 → 不记,别重复
  3. 是一次性事件吗?
     是 → JOURNAL 留痕,不进 FACT

三层加三条,干的事就一件:让记忆只留值得留的,token 只花值得花的地方

三、记忆是怎么长出来的

记忆不是一开始就设计好的。是我纠正过它之后,才一条一条长出来的。

第一条:测试用例定义

有一次 Agent 帮我拆用例,它把”按系统逻辑执行得到错误结果”分到了反向用例。这个定义不合规——按 IEEE/ISTQB 主流定义,反向用例是输入非法、系统按设计拒绝或报错,不是”系统出错了就算反向”。我纠正了并把它写进了长期记忆:

用户的《测试用例设计规范》中,正向/反向等概念统一采用 IEEE/ISTQB 主流定义。不接受”按系统逻辑执行得到错误结果=反向”这种非主流定义。

写进去之后,它再也没犯过这个错。

第二条:拆分查漏

做语音产品能力拆分的时候,Agent 按需求文档拆完,但是在人工确认阶段,发现漏了两个行业常识行为:唤醒 15 秒保持窗口、流式断句拒识。虽然在需求文档中并没有明确写,但这是语音产品”该有但没有写出来”的隐含行为,恰恰是测试最容易漏的地方。我纠正之后写进了长期记忆:

能力层/测试点拆分不是文档搬运:除需求基线对照外,必须用领域常识做完整性挑战,主动列出”该领域行业标准行为但文档未提”的清单提请用户确认。

这条规则现在每次拆分都自动加载。Agent 不光搬文档,还会去想”这个领域还有什么文档没提但行业一定有的”。

第三条:功能谱系图边界

启动功能谱系图项目的时候,Agent 想一次性把谱系图和测试用例治理全做完——功能点、能力、契约、测试点、用例、责任人,一口气全拆。我并没有同意这么做,因为工作量非常大,虽然AI能够处理,但是为了让每一项处理都能够达到预期,需要一定的人工干预,并且功能非常多、需求梳理耗时,测试点和用例的质量又不齐,需要单独治理。谱系图本身能先创造价值,应该分阶段落地。这条也写进了记忆。

三条放在一起看:

纠正
不记会怎样
记了之后
用例定义用非主流分法
每次拆用例都要重新教一遍标准
自动按 IEEE/ISTQB 拆,不再偏
能力拆分只搬文档不补常识
语音产品漏掉唤醒窗口、漏掉拒识
主动列”文档没提但行业一定有的”清单
谱系图想一口气做完
每次都贪多,阶段不清
按阶段拆,先落地再迭代

Agent 越来越好用,不是模型升级了,是记忆积累了你跟它之间的校正历史。

每一次纠正,如果只是嘴上说说,下次它还会犯。写进记忆,才是一条校正变成一条规则。

四、Token 预算:该记什么、该忘什么

记忆要花 token。上下文窗口就那么大,每多读一条记忆,业务逻辑的空间就少一点。所以记忆的第二条铁律是极简记忆——非必要绝对不记,不要什么都往里塞。

以下是我决定一件事要不要进长期记忆的三个判断:

判断
不进
6 个月后还有价值吗
是 → FACT.md
否 → 下一条
能从别处推导吗
不能 → 记
能 → 不记,省 token
是一次性事件吗
否 → 看前两条
是 → JOURNAL 留痕

这和前面系列文章提到的极简主义是一脉的:AGENTS.md 主文件 200 行以内,专项文件按需加载——大头留给业务逻辑,不喂给冗长的规则说明。记忆也是同样的逻辑:索引层常驻,详情层按需,长期层只放值得放的。

一个反例:我刚开始用的时候,把”公司网络下 git clone 会 TLS 失败”这个坑写进了长期记忆。后来我发现,这个信息每次启动都要读,但不是每次都要用——它只在装 skill 的时候才有价值。我把这条从”每次必读”降级为”JOURNAL 留痕”,装 skill 的时候再去翻。省下来的 token,用在业务逻辑上。

记忆的效率不在于”存了多少”,在于”每次启动时花了多少 token 读到了多少有用的东西”。

五、个人用 vs 团队用

如果只是个人电脑上自己用,记忆怎么管都行——自己的纠正、自己的偏好、自己的 token 预算,出了事自己兜底。但放到团队,必须要考虑工程化的落地实践,“再小的一件事,放到十四亿人头上就是大事”,虽然我们的团队并不大,但是也需要考虑效率和成本问题。

谁的纠正进共享记忆? 我纠正 Agent 用 IEEE/ISTQB 定义来分用例,这条写进共享记忆,全团队受益。但 A 同事习惯用 Appium、B 同事习惯用 Pytest——这种个人偏好不能进共享记忆,进了就会打架。

谁的偏好是标准? 测试组写测试点的规范是团队标准,必须进共享记忆。但我个人的工作习惯——这种是我的,不该让团队的 Agent 也读。

新人入职怎么用? 这才是记忆最大的团队价值——新人不用从零开始教 Agent。继承团队的 FACT.md,Agent 就知道我们设备没有 5G、知道我们用 IEEE/ISTQB 标准、知道我们测试组不接 App 标记同步。团队记忆是组织知识的载体,新人进来不是面对一个空白的 Agent,是面对一个已经被整个团队校准过的 Agent。

但这带来一个治理问题:谁有权写共享记忆?写错了谁背锅?

维度
个人记忆
团队共享记忆
写入权限
自己说了算
需要审核机制
纠正来源
个人的校正历史
全团队的校正历史
出错影响
影响一个人
影响全团队
治理方式
自己管
必须明确谁有权改、改了要留痕

这个问题我现在还没有完美答案,但有一条底线:团队共享记忆的变更必须留痕——谁、什么时候、改了什么、为什么。这和(三)里 SAFETY.md 的变更日志是同一个逻辑。

六、对照

回过头看没有记忆的 Agent:

维度
没有 memory
有 memory
重复错误
你纠正过的它下次还犯
纠正写进记忆,不再犯
上下文成本
每次从零开始教
上次教过的自动带上
趋势
用一个月和用一天没区别
用得越久越好用
知识沉淀
你知道的东西没法传给它
你的校正历史变成它的规则

没有记忆的 Agent,像一个每次见面都失忆的搭档——你得把昨天聊过的全重新说一遍。有了记忆的 Agent,像一个跟你磨合过很久的同事——它知道你的规矩、你的偏好、你纠正过它什么,新任务进来直接干。

它变好用不是因为它变聪明了,是因为它记住了你教过它什么。

记忆这件事,说到底就是——你教它一遍,它得记住。记不住的搭档,教再多也白搭。记住了,一条纠正变成一条规则,下回不用你再说,它自己就知道了。 这就是我们怎么把一个 Agent 从临时工变成真正助手的方法。只有不断的使用、调教、纠错,它才算真的进到了你的工作流里,而不是只在你屏幕上路过了一下。