Skip to content

用对话使用知识库

只要 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,从编译页面回答,带来源路径引用。

你: 不确定在哪个库——全部搜一遍。

agentkb: "*" 联邦查询——跨所有已注册知识库合并结果,每条命中 标注来自哪个库。

还有一种你有时应该希望听到的回答:

agent: 你的知识库中没有关于这个问题的可信匹配。

这是检索引擎的弃答——真实的回答,不是失败。端正的 agent 会如实转述,而 不是用猜测填充。如果这个问题重要,说明该 cook 相关材料了。

"我的知识库最近怎么样?"

你: 给 work 做个体检。

agenthealth(工作区完整性)和 stale(什么在等待编译),然后 总结:"健康。2 个编译页面的来源有更新;5 条捕获等待 cook。"

你: 能修的修一下。

agentsync(如果 health 报了缺失技能或过期文件),并精确报告 更新了哪些文件。至于 stale 页面和未编译捕获,它会提议一次 /cook—— 编译始终是有人参与的评审动作,它不会背着你 cook。

stale 的输出是待办清单,不是警报——它告诉你下次维护时该重新编译什么。 许多笔记本来就不需要编译。

"把我的笔记编译一下"

你: 把 work 里的新材料 cook 一下。

agent 加载 cook 技能,读陈旧报告来圈定本次范围(inbox 捕获优先—— 它们被捕获就是为了被编译),把笔记蒸馏成带 sources: 引用的编译页面, 并保持 SCHEMA.md 分类同步。

这是唯一一个本该由 agent 行使判断的环节——所以它是引导 agent 的技能, 而不是一个盲目触发的工具。

完整的循环

有知识库的一周是这样的:

  1. 对话产生捕获("记住这个")——零摩擦;
  2. 提问得到带引用的回答——或诚实的弃答;
  3. 当某个主题的弃答积累起来,就是该 cook 的信号——捕获和笔记变成 编译页面;
  4. 偶尔做个体检,保持工作区健康。

以上一切在 CLI 里同样成立(knowlery queryknowlery stale……)—— 同一个引擎,同样的答案。终端优先的版本见 CLI 工作流, 完整工具参考和行为准则见 Agent 与 MCP

Released under the MIT License.