夜雨聆风学习资料网

ARTICLE · 1018267

AI 与 PDMS 联动探索(四)->两个 AI 工具,两份互相看不见的经验,Skill 单一知识库重构

AI 与 PDMS 联动探索(四)->两个 AI 工具,两份互相看不见的经验,Skill 单一知识库重构

上一篇末尾我说,闭环自己转着,我可以不在。那阵子我真以为自己解放了。

让 AI 自己出题,自己判卷,自己改。我把这套闭环同时跑在 WorkBuddy 和 Zcode 上,本意是提速。主力往前推,副手不验证也不陪跑,闲时顺手多跑几轮,把验证数量堆上去。

经验是真出得快。只是出了两摊。

直到有天我手痒,把两边 pml2-coder 的 SKILL.md 摆到一起,用 diff 比了一下。

屏幕上一片红。两份文件,已经长得不像同一个东西了。

我盯着那片红,先是有点懵,然后是后怕。

先看体量。WorkBuddy 这一侧,pml2-coder 的 SKILL.md 是 34.8KB。Zcode 那一侧,是 30.4KB。大小就不一样,内容更不一样。

我把两边各自的独有部分抠出来数。WorkBuddy 侧独有 27 行,全是拿 PML 写 JSON 增删改查那一套时踩出来的坑。do 循环终止守卫、define function 返回参数的话函数末尾必须带 is、MatchWild 三大陷阱、.Match 返回 REAL、文件 I/O 与异常守卫整节。Zcode 侧独有 6 行,主要是函数参数只读的表达式实参触发面,还有 heap_sort 和 siftdn 的实例。

一边记着 JSON 的坑,另一边记着另一批的坑。各持一半,谁都不全。

这下我明白之前好几次重跑是哪来的了。某一版在 WorkBuddy 侧踩过的 JSON 坑, AI 当经验写进了那一侧的 skill。过了些天换 Zcode 遇到类似的问题,它压根不知道有这坑,又原样踩了一遍,多耗了好几轮才爬出来。反过来,Zcode 那边的经验,WorkBuddy 侧也一无所知。谁跑哪个任务,就只对那个任务的坑有免疫力。另一半的坑,等于不存在。

分叉不是隐患,是既成事实。而且它还在长。因为闭环里 AI 每跑一轮 PoC(可行性验证),就会往自己那侧的 skill 里添新经验。两个工具各跑各的,添的当然不一样。我不动手收,它只会越分越开。

我得往下挖根因。为什么两份会不一样。根本原因其实有两个,都藏在文件本身的结构里。

根因一,稳定的和长个的,被我混进了同一个文件。SKILL.md 里其实有两种东西。一种是 Tier1,客观的语法铁律,注释用 -- 不用 !,循环用 do 不用 loop,这类几乎不变。另一种是 Tier2,实测踩出来的坑位原子,每一轮PoC(可行性验证)都在往上长。被我复制成两份的,恰恰是 Tier2 这高频写入的部分。低频的复制两份无所谓,高频的复制两份,必然分叉。这不是 AI 记性差,是结构在制造差异。

根因二,路径写死了。SKILL.md 里有一行指向自己语料检索表的路径,WorkBuddy 那份写的是 ~/.workbuddy/skills/pml2-coder/corpus/corpus_index.tsv,Zcode 那份写的是 ~/.zcode/skills/pml2-coder/corpus/corpus_index.tsv。两边家目录不一样,所以就算我想让两份内容完全一致,这个文件本身也做不到。路径成了持续制造差异的机器。

我还翻到一处更刺心的。skill 目录里挂着一份 cheatsheet 速查卡,跟主 SKILL.md 直接打架,差点把人带沟里。一条说字符串拼接用 & 不用 +,可 AVEVA 官方源码里 + 和 & 都行,这条早被 PoC 推翻却没同步。另一条正好反过来,cheatsheet 写 handle ANY...endhandle 可用,这回它是对的,handle 本就是用户手册里正经记载的 PML 错误捕获结构。错的是另一头那句想当然的 PML 没有异常机制,一句不实的结论就把一个能用的结构判了死刑。分叉的真实代价不是文件乱,是有人会照着错的写。

我意识到,问题不在哪边写得好,在于「知识被我放在了会分叉的地方」。要治本,得把知识从工具的安装目录里搬出来。

但第一步我走错了念头。我最初想,干脆让 Skill 变成纯指针,内容全搬走。这行不通。SKILL.md 是工具识别技能的入口契约,frontmatter 里的 name 和 description 决定什么时候触发它,工具只扫描自己的安装目录。指针必须留在各自目录里面,能做的只是让内容变薄。

想通这层,方案就清楚了。一句话,「入口可以复制,知识库只能有一个」。

我把结构切成三层。L0 是入口层,两个工具家目录里各放一份极薄的 SKILL.md,只留 frontmatter、触发条件、和一行指向知识库的指针。L1 是知识库层,放在项目里只存一份,notes/pml2-knowledge/ 这种目录,可被 git 管和 Obsidian 看到。L2 是会话层,工具私有的当日工作日志,无需共享。

关键判断是,该抽走的是 Tier2,不是全部。Tier1 稳定规范留在入口也无妨,几乎不变。真正要外置的是 Tier2 那些每批都在长的坑位原子。抽走之后,入口只剩 frontmatter、几条铁律、一段强制预读指令。内容固定了,就算复制两份,也不会再分叉。

这里有个顺序的坑,我差点掉进去。Zcode 那一侧有 6 行,是 WorkBuddy 没有的。要是我图省事,直接拿 WorkBuddy 那份当底本往外搬,那 6 行经验就永远找不回来了。

所以正确的顺序,是先把手里两份凑到一起拼成全量,再谈切分。先合并,再拆分,顺序不能反。那 6 行里记着的 heap_sort 和 siftdn 经验,正是「先合并」这件事的价值。它们要是在这步丢了,这套体系就缺了一块。

光有架构还不够。外置了知识,下次跑 PoC 时 AI 会顺手又往 SKILL.md 里写经验,分叉照旧长回来。所以薄版 SKILL.md 里我写死了一条硬约束。新增或修正经验,只写 02-pitfalls.md,禁止写回本文件。本文件只允许改 frontmatter 与指针,内容变更视为违规。本文件与另一工具侧 SKILL.md 内容必须完全一致,改动须同步两边。技术架构解决「能不能分叉」,纪律解决「会不会分叉」。

路径那个坑也顺手填了。pml2-coder 我把知识整体外置,入口 SKILL.md 只剩 frontmatter 和一行「去外面那个公共仓库取」的相对指针,不再写死 ~/.workbuddy 或 ~/.zcode 开头的绝对路径。以前入口里写死了「我家在哪儿」,两家地址不同,文件永远对不齐。现在两家都去同一个地方拿,地址怎么变都不影响,这条分叉诱因直接消失。

知识库里每条坑,我都按 7 维结构化。判断、错路、纠正、适用、不适用、失效信号、出处。前面六维好理解,第七维失效信号是我特意加的。经验最大的风险不是错,是过时了还被当真理。不少坑是固定场景里好几件事叠在一起才发作,单拎出来都不算毛病。换个场景,那几件事没凑齐,它可能就不犯了。给每条经验标上它在什么场景会失效,下次见到先分辨场景,而不是闭着眼信。

改完我量了下成果。pml2-coder 从 34.8/30.4KB 降到 3,311 字节。corpus 冗余从 616KB 两份压到 308KB 一份。项目 MEMORY.md 从 14.3KB 精简到约 6KB。26 条坑位原子全部迁移,zcode 独有的 heap_sort 和 siftdn 经验已并入。

我特意抽检了 15 个关键词,全命中。意思是,现在无论用 WorkBuddy 还是 Zcode 跑 PoC,两边都读得到全部经验。之前那种踩过的坑又踩一遍的事,应该没了。

但我得留一句实话。方案还剩一道缝,没堵上。

前面那些经验文字,能搬到一个统一的地方,让两个工具共用一份。可还有一批真正干活的脚本,搬不动。它们就像焊死在工位上的机器,离开原来的位置就罢工。pdmstty 底下有 19 个脚本文件,pdms-docs 也有一个,这两批东西写死了自己必须待在原来的 skill 文件夹里。一旦挪走,所有相关功能会当场报错崩掉。

所以这些脚本只能原地留着,两份都留。眼下两份内容还一致,可只要改了其中一边,我就得自己复制一份到另一边去对齐。这道缝其实有办法补,用系统自带的「目录联接」,让两个地方看起来像同一份。但这一步要赌另一个工具认不认这个联接,不认就又是一个坑。

这是整套方案里,目前唯一还得靠手动的环节。

改造之后我实跑了几轮新 PoC 验证体验。最明显的变化,是两侧都能读到全量经验了,之前那种「这一侧不知道那个坑」导致的重跑,肉眼可见地少。新的别扭也有,入口变薄之后,AI 写代码前得多读一次知识库文件,等于把一次文件读取的延迟,换来了不再分叉。这笔账我算得过来。

回到(三)那个半夜。我数着自己陪了多少趟验证,那时候我只觉得累,觉得 AI 离了我不行。

如今闭环自己转着,两份经验却各长各的,差点又把我栓到它身边。不是离了我不行,是离了「把知识收口」这一步不行。

重构完,两个工具读的是同一份知识库。可我刚松口气,没几天刷手机撞见一篇讲 Skill 自进化的文章,思路跟我这不谋而合。再一查,Google 刚发了一篇同主题的论文。我把那篇论文当镜子,给自己这套体系做了一次体检,又改了一轮。

下一篇预告:我把 Google 的 Skill 自进化论文当镜子,给自己这套体系做了一次体检,又动了一轮刀。那一轮,暴露出我这套闭环还缺三样东西。

回到那个下午。我坐在 TTY 前,满屏报错,以为 AI 不靠谱。

后来它学会写,学会自己出题,学会自己长大。

再后来我发现,让它长大的经验,也会自己跑偏。真正的联动,不是教会一个 AI,是让一群 AI,读同一本不会过期的真经。

封面由 AI 生成,经本人二次原创修改,仅用于技术交流,如有侵权请联系删除

相关学习资料

返回首页浏览学习资料