不假装修改模型权重。让过去发生过的问题、修复和结果,真正出现在下一次任务面前。
背景与约束
最初方案让模型为假设报告概率,再用校准公式更新配置。计算链路可以跑通,但新会话看不到当时的问题、根因和修复。经验停在一组数字里,没有进入下一次任务的上下文。
本案例把“学习”改成外部工程链:先保存可复查的案例,再在任务前召回,用测试、规则和面板确认这条通道一直开着。
我的工作
我先拆掉无法穿过会话边界的部分:月度校准、自报概率决策门,以及和重复问题关系不大的排名模块。
随后建立结构化案例库,每条案例保留问题、根因、修复和真实结果。错误描述会做归一化和关键词提取,再用 Jaccard 相似度召回 top-k,并压缩进有字符上限的历史案例区块,在任务开始前交给新的模型。
验证接到 TypeScript 编译、Vitest、ESLint、自定义检查和人工确认。退出码、耗时和输出尾部进入 outcome。另外提供 5 条 IDE 即时规则,以及 Cases、Outcomes、Turns、Trend 本地面板,让案例和结果可以在本地直接查看。
关键链路
任务发生
→ 记录问题、根因、修复和真实结果
→ 下一次任务前检索相似案例
→ [PAST_CASES] 进入模型上下文
→ 模型执行
→ 外部验证
→ task outcome
→ 回写案例库
案例入库接受 success、partial 或 failure。日志里可以保留尚未确认的记录,入库的是已经有结果的经验。
已经实现
- 问题、根因、修复和结果的案例结构;
- 文本归一化与关键词提取;
- Jaccard top-k 检索与字符预算;
- 任务前历史案例上下文注入;
- TypeScript、Vitest、ESLint 与自定义验证接入;
- 人工验证入口;
- 退出码、耗时和输出记录;
- 5 条即时规则;
- Cases / Outcomes / Turns / Trend 面板;
- 3 组共 40 项测试。
验证方式
| 组别 | 数量 | 覆盖 |
|---|---|---|
| 历史黑盒案例 | 14 | 阶段输入、退出码、弱 Kill、证据缺失和阶段跳转 |
| 假设相似性 | 9 | 固定样本、阈值、状态过滤和局部相似性 |
| 算法与数据不变量 | 17 | 概率范围、吸收态、时间衰减、文本归一化和签名稳定性 |
40 项测试当前全部通过。它们锁定案例结构、检索机械过程和数据不变量,构成这条经验通道的回归账本。
从事实推出的设计判断
自动验证应继续拆开 verification status、verification method 和 task outcome,避免断言失败、超时和人工待验写成同一个布尔值。这是存储语义的下一步,建立在现有 outcome 记录之上。
检索是否升级到 embedding,也用同一标注集、同一案例快照和同一字符预算对照。可解释基线先交付,对照实验后决定是否替换。
事实边界
本案例覆盖案例库、可解释召回、外部验证、即时规则、本地面板和 40 项测试。召回效果标注与长期趋势作为后续观测。
封面为视觉意象。

