| name | knowledge-base |
| description | **每次会话开始时,除非用户问题明显是简单闲聊或通用知识(如"你好"、"1+1等于几"),否则必须先调用 obsidian_index() 加载知识库索引。**
之后每次用户提问,先查看索引判断是否可能与已有知识相关。只要有一定可能性(不需要确定),就应该使用 obsidian_search 检索。宁可多查一次,不要错过相关知识。
适用场景:用户画像、历史决策、个人项目、偏好设置、之前讨论过的话题、@kb 关键词触发。
|
knowledge-base(知识库管理)
基于 Obsidian 的知识库技能,提供三大核心功能:
- 长期记忆 - 用户画像自动加载,关键信息自动存储
- 问答增强 - 智能判断 + 关键词触发,检索相关内容辅助回答
- 知识管理 - 写入时自动打标签、建立双向链接
何时使用
优先使用:
- 会话开始时,自动加载用户画像
- 用户提问包含
@kb、根据我的笔记、之前说过 等关键词
- 用户提问涉及个人项目、偏好、历史决策
- 用户明确要求记住某些信息
- 对话中出现值得长期保存的重要信息
不要使用:
- 纯粹的通用知识问答
- 与用户个人上下文无关的问题
- 用户明确表示不需要记录
依赖工具
本技能依赖以下 Obsidian 工具:
| 工具 | 用途 |
|---|
obsidian_index | 生成知识库紧凑索引(用户画像 + 笔记列表) |
obsidian_search | 检索相关笔记(支持模糊搜索) |
obsidian_read | 读取笔记内容 |
obsidian_write | 写入/更新笔记 |
obsidian_list_vaults | 获取可用 vault |
如果工具不可用,请先配置 Obsidian vault。
存储结构
{vault}/Knowledge/
├── user-profile.md # 用户画像(单文件)
├── qa-history/ # 问答历史
│ └── YYYY-MM/
│ └── YYYY-MM-DD-title.md
├── facts/ # 事实/知识点
│ └── YYYY-MM/
│ └── YYYY-MM-DD-title.md
└── _index.md # 可选:知识库索引
流程一:会话开始 - 加载上下文
触发条件
每次会话开始时自动执行。
执行步骤
一次调用即可完成:使用 obsidian_index 工具
obsidian_index(limit=30, include_profile=true)
该工具会自动:
- 加载用户画像(
Knowledge/user-profile.md),提取关键字段
- 收集知识库笔记,按修改时间排序
- 生成紧凑索引(标题 + 前 3 个标签)
- 返回合并后的索引字符串
返回格式
[用户画像]
- 称呼: Jerry
- 角色/职业: 后端开发
- 技术栈: Python, FastAPI, SQLite
- 回答风格: 简洁,代码优先
[知识库索引 - 5 条笔记]
- 原油价格与霍尔木兹海峡 [原油, 地缘政治]
- 事件驱动架构调试 [事件驱动, 调试]
- Redis 缓存方案决策 [Redis, 架构]
- WebSocket 重连问题 [WebSocket, 调试]
- API 端点配置 [API, 配置]
用途:当用户提问时,先查看索引判断是否有相关笔记,再决定是否检索。
流程二:问答增强 - 检索知识库
触发条件
满足以下任一条件时触发:
强制触发(关键词):
- 用户消息包含
@kb
- 用户消息包含
根据我的笔记
- 用户消息包含
之前说过、上次提到
智能判断触发:
- 提到
之前、上次、我说过、记得吗
- 涉及用户个人项目名称
- 涉及用户已存储的偏好或决策
- 问题与历史 qa 主题高度相似
执行步骤
-
提取检索关键词
- 从用户问题中提取核心概念
- 思考 2-5 个同义词/相关词,提高召回率
- 例如:用户问"国际油价" → 同义词:原油、石油、crude oil、能源价格
-
执行模糊搜索(推荐)
obsidian_search(
query="油价",
synonyms=["原油", "石油", "crude oil", "能源"],
fuzzy=true,
limit=5
)
fuzzy=true 启用模糊搜索,任一词匹配即返回
synonyms 提供同义词列表,扩大搜索范围
-
评估结果
- 0 条结果:跳过,直接回答
- 1-3 条相关:将摘要注入上下文
- 需要深入:使用
obsidian_read 读取 1-2 条最相关的完整内容
-
生成回答
- 结合知识库内容回答
- 标注来源,例如:
- "根据你之前提到的..."
- "我在你的知识库中找到了相关记录(日期)..."
检索策略:模糊优先 + 精简深入
| 阶段 | 行为 | 说明 |
|---|
| 关键词扩展 | 思考 2-5 个同义词 | 提高召回率 |
| 模糊搜索 | fuzzy=true + synonyms | 任一词匹配即返回 |
| 相关性判断 | 根据摘要和 matched_terms | 判断是否需要深入 |
| 按需深入 | obsidian_read | 仅读取 1-2 条最相关的 |
精确搜索(可选)
如果需要精确查找特定内容,可以不使用 fuzzy:
obsidian_search(query="霍尔木兹海峡", limit=5)
流程三:知识存储 - 自动判断与写入
触发条件
满足以下任一条件时触发:
显式触发:
- 用户说 "记住..."、"帮我记下..."
- 用户使用
/remember 命令
自动判断触发(对话中出现以下信号):
- 用户自我介绍或透露个人信息
- 用户明确表达偏好("以后回答简洁点")
- 重要决策或结论("我们决定用方案 A")
- 解决了复杂问题(值得记录的调试过程)
- 用户提供了重要的事实信息(API 地址、配置等)
分类规则
| 信号 | 存储位置 | 示例 |
|---|
| 用户自我介绍 | user-profile.md | "我是后端开发" |
| 明确偏好 | user-profile.md | "回答简洁点" |
| 要求记住的事实 | facts/YYYY-MM/ | "记住这个 API 地址" |
| 重要决策 | facts/YYYY-MM/ | "我们决定用方案 A" |
| 解决复杂问题 | qa-history/YYYY-MM/ | 调试了棘手的 bug |
执行步骤
-
判断是否需要存储
- 检查是否命中上述信号
- 如果不确定,不存储(宁缺毋滥)
-
确定存储位置
-
生成内容
- 使用对应模板(见 reference.md)
- 自动添加标签(见标签体系)
- 搜索相关笔记,添加双向链接
-
写入
- profile 类型:
obsidian_write(path, content, append=true)
- qa/fact 类型:
obsidian_write(path, content)
-
反馈用户(可选)
自动标签体系
kb/ # 知识库命名空间
├── kb/profile # 用户画像
├── kb/qa # 问答记录
├── kb/fact # 事实/知识点
topic/ # 主题标签(自动生成,最多 5 个)
├── topic/python
├── topic/fastapi
├── topic/event-driven
└── ...
source/ # 来源标签
├── source/conversation # 来自对话
├── source/user-input # 用户主动提供
└── source/agent-infer # agent 推断
双向链接规则
写入新笔记前,执行以下步骤:
- 提取内容中的关键实体(项目名、技术名等)
obsidian_search(query=实体, limit=10) 查找相关笔记
- 匹配并生成链接:
- 完全匹配:在正文中添加
[[笔记名]]
- 高相关:添加到 frontmatter 的
related 字段
显式命令
| 命令 | 功能 | 示例 |
|---|
/remember <内容> | 显式存储内容 | /remember API 地址是 https://api.example.com |
/recall <关键词> | 显式检索 | /recall 事件驱动 |
/profile | 查看用户画像 | /profile |
/kb status | 查看知识库状态 | /kb status |
/remember 命令处理
- 解析用户提供的内容
- 自动分类(fact 或 profile)
- 生成标签和链接
- 写入对应位置
- 反馈:"已记录到知识库。"
/recall 命令处理
- 使用关键词执行
obsidian_search
- 展示搜索结果摘要
- 如用户要求,读取完整内容
/profile 命令处理
- 读取
Knowledge/user-profile.md
- 展示当前用户画像
- 如用户要求修改,更新文件
/kb status 命令处理
- 使用
obsidian_list_vaults 获取 vault 信息
- 使用
obsidian_search 统计各类笔记数量
- 展示统计信息:
- vault 名称和状态
- 笔记总数
- 各类型数量(profile/qa/fact)
- 最近更新时间
配置选项
可在 config.yml 中配置:
skills:
knowledge-base:
enabled: true
vault: ""
root_folder: "Knowledge"
auto_load_profile: true
auto_save: true
index_on_start: true
index_limit: 30
search_trigger_keywords:
- "@kb"
- "根据我的笔记"
- "之前说过"
max_search_results: 5
max_tags: 5
配置说明
| 配置项 | 默认值 | 说明 |
|---|
index_on_start | true | 会话开始时是否生成知识库索引 |
index_limit | 30 | 索引包含的笔记数上限,按修改时间排序取最近 N 条 |
auto_load_profile | true | 会话开始时是否加载用户画像 |
auto_save | true | 是否自动保存对话中的重要信息 |
Token 消耗估算
| index_limit | 预估 tokens | 占 128K 窗口 |
|---|
| 10 | ~300 | 0.2% |
| 30 | ~900 | 0.7% |
| 50 | ~1500 | 1.2% |
| 100 | ~3000 | 2.3% |
执行检查清单
使用本技能时确认:
参考文档
详细的模板和示例见 reference.md。