本页目录
存在 ≠ 内容
"知道有这么一个原子,写的是 OWASP 输入校验规则",跟"把它那 1,841 字节的正文背在工作记忆里",是两回事。
维基百科把这两件事分开了。每个翻百科的人都知道有一篇讲素数的条目,但没人会真的把那 4,000 个词记在脑子里——要看的时候翻进去就行。维基百科的索引很小,条目本身很大,要读的时候才取。
Skill Wiki 之前的 agent 栈基本不区分这两件事。每个可能沾边的 skill,每一轮都把整篇正文糊进 prompt 里,理由是"以防万一"。Skill Wiki 拒绝的就是这一套。
Skill Wiki 怎么把两者分开
协议给 agent 留出两个截然不同的接触面:
| 接触面 | 成本 | 常驻上下文 | 包含什么 |
|---|---|---|---|
Index(_index.xml) | 约 3 KB,跟 corpus 大小无关 | 是 | id、kind、一行摘要、出边 |
| 原子正文(chunks/*.md) | 每个原子约 30 / 150 / 380 token | 否,按 id 按需取 | 完整描述、参数、例子 |
Index 是 agent 手里的地图,原子正文才是领土。
这样能拿到什么
成本可控
Token 成本只跟 agent 实际选了去读的内容挂钩,跟 corpus 多大没关系。1,000 个原子的 corpus 跟 50 个原子的,"挂在那等用"的成本是一样的。多出来的那个原子,没被用到之前是免费的。
污染可控
corpus 里几个写得不好的原子不会污染每一轮。它们待在 index 里,每一轮被检索阶段筛掉,没被选中就进不了上下文。SKILL.md 不一样:只要被加载,每一轮都被它带跑。
从推变成拉
传统模式是推——系统把"任务可能用得上的全部东西"提前推进上下文,赌模型能挑对部分。Skill Wiki 是拉:index 里写着"有一条原子讲 GDPR 删除权规则",要不要去读它的 summary、core 还是 full,由 agent 自己决定。
"完全对应"是字面意义上的对应
维基百科这个类比不是"差不多像",是结构上的同构。维基百科的 Special:AllPages 是一份 7 MB 的索引;加载它不等于把整本百科加载进来。MediaWiki 在运行时给读者一组稳定的 URL,条目在 URL 被请求的瞬间才实例化出来。把"URL"换成"原子 id","浏览器"换成"agent","MediaWiki"换成"MCP server"——这就是 Skill Wiki。
它推出了什么
后面五个决定都是从这条线推下来的:原子带类型(不是 blob 化的 skill)、边带类型(不是平铺的 related)、组合走 contract(不是自由组合)、再加上小 LLM 的编译期检查。它们都是把存在 ≠ 内容当真之后的自然结果。