我把黄帝内经喂给了一个拆书skill,它交回来22个能调用的能力


原文地址:https://github.com/kangarooking/cangjie-skill


我硬盘里有个文件夹叫「读过」,塞着两百多个 txt 和 pdf,还有一堆当年手打的读书笔记。前阵子我想写点关于传播的东西,记得《疯传》里有个六要素的框架,翻笔记翻了二十分钟,找到的只有一句摘抄,后面跟着我自己写的四个字,有道理啊。

那一刻挺泄气的。这些年攒下来的东西说到底全是给我自己看的,而且大部分时候我根本不会回头看。

后来在 GitHub 上翻到 cangjie-skill,作者袋鼠帝,12.5k 星,977 个 fork,MIT 协议,当前版本 v2.5.0。它干的活跟我做笔记正好相反,你给它一本书的文本,它不产出读后感,产出一组能被 AI 助手直接调用的技能。我把它 clone 下来在 AISet 里跑了一轮,用的就是《黄帝内经》,素问加灵枢,官方示例仓库里拆出来是 22 个。

先说它怎么工作。核心方法论叫 RIA-TV++,名字拆开看有点唬人,来路其实很清楚。RIA 来自赵周那本《这样读书就够了》里的便签拆书法,讲的是读完之后怎么诠释怎么把东西挪到自己身上用。TV 是三重验证,后面那个加号是给 agent 执行补的两样内容,可执行步骤和适用边界。

整条流水线有七个阶段。阶段零先做整书理解,产出一份 BOOK_OVERVIEW.md,把主旨和骨架理清楚,顺带写下术语表和批判性意见。阶段一放五个提取器并行跑,各自从不同角度捞候选的方法论单元,汇成一个池子。阶段一点五做三重验证筛选,没通过的进 rejected 目录,连淘汰理由一起留着。阶段一点六是个晋级门,判断哪些单元值得做成独立技能,哪些只能挂在路由入口下面。阶段二构造能力卡,写进 .cangjie/capabilities/cards 目录。阶段三给卡片之间建链接,顺手生成一本全书共享的术语词典。阶段四压力测试,不合格的回炉。阶段五编译交付。

v2.5 有个变化我觉得是这套东西真正的分水岭。以前每个单元直接写成一个独立技能目录,现在改成先产出一份 Capability Bundle,也就是 verified.yaml 加一堆能力卡,这份 Bundle 是唯一事实源,再由 scripts/cangjie.py 确定性地编译成安装产物。编译有两种模式,single 是单路由入口,pack 是路由入口加少量晋级的独立技能。这个脚本还管诊断和编译,重规划输出和增量更新也归它,出了岔子能修复能回滚,评测和基准测试同样跑在里面,等于把整条流水线的运维收进了一个命令行工具。

再说坑,头一个是它不许你凭记忆拆书。SKILL.md 里写得很硬,必须有真实文本,PDF 和 EPUB 都行,TXT 或者字幕文件也收,实在不行给一份转写稿,没有就停下来问用户要。我一开始想省事,直接跟它说你肯定知道黄帝内经吧拆一下,它真就停在那儿不动了。后来我去找 txt,网上下的版本页眉页脚全混在正文里,还有一堆扫描错字,光清洗就花了我一个下午。

环境这块也绊了我一下。cangjie.py 是 Python 脚本,我在 Windows 上跑,python3 这个命令根本不认,得换成 py。仓库路径里带中文或者空格的话,脚本里某些路径拼接会出问题,我把它整个挪到纯英文短路径下面才顺当。插件包那事儿更绕,仓库本体是给命令行 Agent 用的技能定义,但作者另外准备了一个独立平台的插件安装包,那个包不在仓库里,得去 Release 页面下 tgz,还要连 sha256 校验文件一起下下来,校验通过了再从本地包安装,安装目录在用户目录下的 .dsh/packages 里面。我 clone 完仓库就以为齐活了,找了半天没找到入口在哪儿。

token 消耗也超预期,五个提取器并行跑,一本厚书下去上下文涨得飞快,《黄帝内经》全文我没能一口气跑完,中途断了两回,好在每本书目录下面有个 PIPELINE_STATE.md 记着当前阶段和进度,断点续跑全靠它,我第二次接着跑的时候它自己认出来停在阶段二,把前面已经产出的卡片直接复用,没有从头再来一遍。

编译模式是我自己选错的。一开始选了 pack,想着多拆几个独立技能出来显得丰富,结果装进去之后 Agent 路由开始乱跳,问它一个养生的问题它给我调了张阴阳五行的卡片,问它阴阳五行它又绕回养生。后来用 cangjie.py 的 replan 重新规划成 single,只留一个路由入口,反而稳了。官方给的建议本来就是 single 优先,不确定的时候先 single,我没听。

还有个手改检测的细节。我手动编辑过 cards 目录下的两个文件,想调一下措辞,后面跑 update 的时候它检测到手改,先把快照和影响分析摆出来问我怎么办,没有静默覆盖。这个设计挺克制,但代价是你想手工微调就得接受一整套事务性补丁的流程,不能像改普通 markdown 那样随手就改。

接下来说跟我自己那套知识库怎么接上。我在 AISet 里维护着一个 Wiki,分了好几层,原始资料放不可变的素材,实体页和概念页写人写产品写主题,指南放操作性的东西,概览放跨领域的综合总结,每个页面带 frontmatter,页面之间用双方括号互相链,index.md 和 log.md 做导航和日志。

接法很自然。蒸馏出来的 BOOK_OVERVIEW.md 我直接放进原始资料,补上来源链接和 sha256,当成不可变素材存着。GLOSSARY.md 里的术语拆出来进概念层,一个术语一个页面。DIGEST.md 是面向读者的精华长文,进概览层,它本来就是跨章节的综合总结。能力卡进指南层,每张卡补上 frontmatter,标题创建时间类型标签来源这几项都得填齐。verified.yaml 里有个 also_read 的关系表,我写了个小脚本把它转成双方括号的 wikilink,卡片之间就自动连起来了,不用手动去补。

rejected 目录我一开始想直接删掉,后来发现留着有用。淘汰理由写得很具体,比如某个单元只是作者的个人经历,不构成可复用的方法,这种判断反过来能帮我校正自己的 Wiki 该收什么不该收什么,我把这些理由摘出来记进了 log.md。还有个反方向的用法是我跑完之后才想到的,Wiki 里那些原始资料本身就是现成的文本源,可以直接喂给 cangjie-skill 做蒸馏,不用再去网上找 txt,等于知识库变成了输入而不只是输出的落脚点。

说点我自己的判断,这套东西真正的价值不在拆书,在于它把知识变成了可路由的能力。笔记这东西是给人看的,人看笔记得先想起来去翻,翻到了还得自己把书里的话翻译成当下能做的动作,中间损耗特别大。技能是给 agent 用的,靠触发条件自动匹配,中间那两道手续直接没了。cangjie-skill 强制每张卡都写清楚适用边界和可执行步骤,其实是在逼你把模糊的感悟变成明确的接口。

边界也比宣传里窄。看官方那张已生成 skill packs 的表就能看出来,方法论密度高的书拆得多,毛选五卷拆出 25 个,黄帝内经 22 个,商业类的普遍在十五个上下。叙事类和文学类就少得可怜,《我与地坛》只有 6 个,《明朝那些事儿》7 个。这个数字差本身就说明了问题,你拿一本小说去蒸馏,大概率只能得到一堆似是而非的人生道理。

三重验证这件事我也持保留态度,验证的执行者还是模型自己,让模型判断模型提取出来的东西对不对,这里头有循环论证的味道。我抽查了几张卡片,跟我读原书的印象对得上,但对不上的地方我也未必能发现,所以蒸馏结果我还是会挑几个关键单元回原文核一遍,尤其是那些看起来特别顺特别有道理的部分,越顺越要查。

我现在的用法是 Wiki 负责存和连,cangjie-skill 负责把存进来的东西变成能调用的能力,两边各干各的,中间靠几个转换脚本缝合,脚本加起来不到一百行,写起来费劲的是 also_read 那段,因为它给的关系是带权重的,我得决定多低的权重就不建链接了。跑通一本之后我又拆了《影响力》,12 个能力,比黄帝内经顺多了,主要是文本干净。

以上,既然看到这里了,觉得有用就顺手点个在看,我下回接着拆下一本。

阅读全文