用对话使用知识库
只要 agent 接入完成,下面的一切都是对话——没有命令、 不需要记路径。每个场景展示三件事:你说什么、agent 做什么,以及一个行为端正 的 agent 应该长什么样(行为准则内置在工具和技能里,你可以按这个标准要求它)。
"帮我建个知识库"
你: 在 ~/kb/research 建一个叫 research 的知识库。
端正的 agent: 先复述解析后的路径——"我将创建
/Users/you/kb/research并注册为research,确认吗?"——确认后才调用init_kb,完成后回报注册名和路径。
创建目录是你的决定;不复述路径就直接初始化的 agent 已经越界。新知识库当场 可查,之后想用 Obsidian 打开也是零迁移。
"我已经有一个了——把它接进来"
你: 把 /Users/you/vaults/work-kb 注册为 work。
端正的 agent: 复述路径,调用
register_kb,然后确认:"已注册work→ /Users/you/vaults/work-kb,现在就能按名字查询。"
注册只写地址簿——你 vault 里的任何文件都不会被碰。可能遇到的两种拒绝, 都是正确行为:
- 文件夹还不是 Knowlery 工作区。 agent 应转述两条修法:空文件夹可以用
init_kb创建;已有笔记的文件夹先用一条 CLI 命令初始化(knowlery init支持 brownfield,不动你的笔记),然后再注册。 - 名字被占用了。 agent 应呈现冲突并询问——绝不悄悄换个名字绕过去。
"帮我记住这个"
你: 把我们关于缓存策略的结论存进 work。
端正的 agent: 调用
capture并回显路径——"已存入inbox/2026-07-09-143012-caching-strategy.md,下次 /cook 之前它是未编译 状态。"
捕获落在 inbox/——永远不会直接进编译层。它立刻可被检索到,并出现在陈旧 报告的未编译笔记里,所以捕获的内容不会丢,只是还没编译。agent 绝不应该 在后台悄悄捕获:只存你要求保存的,并且总是回显路径。
"我知道些什么关于……?"
你: 关于 rollout 我们决定了什么?查 work。
agent 调用
query,从编译页面回答,带来源路径引用。你: 不确定在哪个库——全部搜一遍。
agent 用
kb: "*"联邦查询——跨所有已注册知识库合并结果,每条命中 标注来自哪个库。
还有一种你有时应该希望听到的回答:
agent: 你的知识库中没有关于这个问题的可信匹配。
这是检索引擎的弃答——真实的回答,不是失败。端正的 agent 会如实转述,而 不是用猜测填充。如果这个问题重要,说明该 cook 相关材料了。
"我的知识库最近怎么样?"
你: 给 work 做个体检。
agent 跑
health(工作区完整性)和stale(什么在等待编译),然后 总结:"健康。2 个编译页面的来源有更新;5 条捕获等待 cook。"你: 能修的修一下。
agent 跑
sync(如果 health 报了缺失技能或过期文件),并精确报告 更新了哪些文件。至于 stale 页面和未编译捕获,它会提议一次/cook—— 编译始终是有人参与的评审动作,它不会背着你 cook。
stale 的输出是待办清单,不是警报——它告诉你下次维护时该重新编译什么。 许多笔记本来就不需要编译。
"把我的笔记编译一下"
你: 把 work 里的新材料 cook 一下。
agent 加载
cook技能,读陈旧报告来圈定本次范围(inbox 捕获优先—— 它们被捕获就是为了被编译),把笔记蒸馏成带sources:引用的编译页面, 并保持SCHEMA.md分类同步。
这是唯一一个本该由 agent 行使判断的环节——所以它是引导 agent 的技能, 而不是一个盲目触发的工具。
完整的循环
有知识库的一周是这样的:
- 对话产生捕获("记住这个")——零摩擦;
- 提问得到带引用的回答——或诚实的弃答;
- 当某个主题的弃答积累起来,就是该 cook 的信号——捕获和笔记变成 编译页面;
- 偶尔做个体检,保持工作区健康。
以上一切在 CLI 里同样成立(knowlery query、knowlery stale……)—— 同一个引擎,同样的答案。终端优先的版本见 CLI 工作流, 完整工具参考和行为准则见 Agent 与 MCP。