知识库自动记录方案
建立 Obsidian 知识库,实现对话产出的自动记录,支持敏感信息加密和博客同步
一、背景
1.1 问题现状
用户反馈:
- 记录太简单:之前的记录只有几行,等于什么也没记录
- 没有自动触发:Agent 完成任务后不会主动记录,需要用户提醒
- 长对话没有归纳:重要信息散落在对话中,无法追溯
- 敏感信息暴露:密钥、邮箱等直接写在公开文档中
1.2 目标
- 创建 Obsidian 格式知识库
- 实现自动记录技能(auto-journal)
- 敏感信息自动检测和加密
- 同步到博客(Quartz 4)
- 建立规范的记录模板
1.3 约束条件
- 存储位置:必须放 U 盘
/data/knowledge-base/(系统盘空间不足) - 敏感信息:邮箱、手机、key、密码必须加密或用占位符
- 格式要求:结构严谨,包含背景、过程、问题、教训
二、方案设计
2.1 技术选型
| 方案 | 优点 | 缺点 | 结论 |
|---|---|---|---|
| 直接写 MEMORY.md | 简单 | 不支持格式化,难以检索 | ❌ 放弃 |
| Obsidian Vault | wikilinks、图谱、插件生态 | 需要学习成本 | ✅ 采用 |
| Notion | 功能强大 | 需要网络,隐私问题 | ❌ 放弃 |
2.2 目录结构
/data/knowledge-base/
├── INDEX.md # 总索引
├── templates/ # 记录模板
│ └── 技术方案记录模板.md
├── daily/ # 每日记录
│ └── YYYY-MM-DD/
│ └── 事项名.md # 按事项拆分
├── projects/ # 项目文档
└── learning/ # 学习笔记
2.3 关键决策
| 决策点 | 选择 | 理由 |
|---|---|---|
| 文件粒度 | 按事项拆分 | 文件名即事项名,方便查找 |
| 时间戳 | ISO 8601 格式 | 方便追溯和 Agent 解析 |
| 敏感信息 | AES 加密 + 占位符 | 加密真实数据,文档用占位符 |
| 博客同步 | Quartz 4 | 支持 Obsidian wikilinks |
三、执行过程
3.1 步骤记录
步骤1:创建知识库目录
mkdir -p /data/knowledge-base/{daily,projects,learning,templates}结果:✅ 目录创建成功
步骤2:安装 Obsidian Skills
安装 5 个 Obsidian 相关技能:
obsidian-markdown:创建/编辑 Obsidian 格式笔记obsidian-bases:创建数据库视图json-canvas:创建白板obsidian-cli:CLI 操作 vaultdefuddle:网页提取 Markdown
结果:✅ 技能安装成功
步骤3:实现敏感信息加密
创建 /data/nanobot-workspace/scripts/sensitive_crypto.py:
- 自动检测:邮箱、手机、API Key、Token、IP、身份证号
- AES-256-CBC 加密
- 格式:
{{encrypted:密文|类型}}
结果:✅ 加密工具完成
步骤4:创建记录模板
创建 /data/knowledge-base/templates/技术方案记录模板.md,包含:
- 背景(问题现状、目标、约束)
- 方案设计(技术选型、关键决策)
- 执行过程(步骤、时间线)
- 遇到的问题(现象、原因、解决)
- 结果与验证
- 反思与改进(教训)
结果:✅ 模板创建完成
3.2 时间线
| 时间 | 事件 |
|---|---|
| 13:00 | 开始讨论知识库方案 |
| 14:00 | 安装 Obsidian Skills |
| 15:00 | 创建知识库目录结构 |
| 17:30 | 用户反馈记录太简单 |
| 18:00 | 改进记录格式,添加时间戳 |
| 19:00 | 实现敏感信息加密 |
| 19:24 | 用户指出密钥暴露问题 |
| 19:30 | 修复:密钥移到 .env,文档用占位符 |
| 19:40 | 创建规范模板 |
四、遇到的问题
问题1:记录太简单,没有价值
现象:用户反馈”记录太简单,等于什么也没记录”
原因分析:
- 没有明确的记录模板
- Agent 不知道该记录什么内容
- 触发条件不明确
解决方案:
- 创建详细的记录模板(7 个章节)
- 明确触发时机:完成任务后立即记录
- 文件名即事项名,方便查找
验证结果:✅ 新模板已创建,后续记录按模板执行
问题2:敏感信息直接暴露
现象:加密密钥直接写在公开文档中
原因分析:
- 安全意识不足
- 没有强制检查机制
解决方案:
- 密钥移到
.env文件(不提交 git) - 文档中一律用占位符
- 创建强制检测脚本
journal.sh
验证结果:✅ 密钥已移除,文档已脱敏
问题3:Agent 不主动触发记录
现象:完成任务后不记录,需要用户提醒
原因分析:
- auto-journal 技能描述不够明确
- Agent 把它当成”用户要求才执行”的功能
解决方案:
- 更新 SKILL.md,明确”完成任务自动触发”
- 写入 MEMORY.md 作为强制规则
- 每次完成任务后立即记录
验证结果:⏳ 待后续验证
五、结果与验证
5.1 最终产出
| 产出物 | 路径 | 状态 |
|---|---|---|
| 知识库目录 | /data/knowledge-base/ | ✅ 已创建 |
| 加密工具 | /data/nanobot-workspace/scripts/sensitive_crypto.py | ✅ 已完成 |
| 检测脚本 | /data/nanobot-workspace/scripts/journal.sh | ✅ 已完成 |
| 记录模板 | /data/knowledge-base/templates/技术方案记录模板.md | ✅ 已创建 |
| auto-journal 技能 | /data/nanobot-workspace/skills/auto-journal/ | ✅ 已更新 |
5.2 验证方法
# 检测敏感信息
bash /data/nanobot-workspace/scripts/journal.sh /path/to/file.md
# 搜索知识库
grep -r "关键词" /data/knowledge-base/ --include="*.md"5.3 遗留问题
- 自动记录仍未真正自动触发,需要 Agent 主动执行
- 长对话的自动归纳尚未实现
六、反思与改进
6.1 做得好的
- 知识库目录结构清晰
- 敏感信息加密方案完整
- 模板规范详细
6.2 需要改进的
- Agent 需要更主动地触发记录
- 记录内容需要更详细,不能偷懒
6.3 经验教训
⚠️ 重要教训,避免再次犯错
-
敏感信息绝对不能出现在公开文档中
- 错误做法:直接写密钥、邮箱、手机
- 正确做法:用占位符
xxx@example.com、138xxxxxxxx
-
记录要有价值,不能敷衍
- 错误做法:只写”完成了 xxx”
- 正确做法:按模板写背景、过程、问题、教训
-
完成任务后立即记录
- 错误做法:等用户提醒
- 正确做法:主动记录,不等用户
6.4 后续计划
- 每次完成任务后按模板记录
- 定期检查知识库质量
- 实现长对话自动归纳
七、参考资料
附录
相关文件
| 文件路径 | 说明 |
|---|---|
/data/knowledge-base/ | 知识库根目录 |
/data/nanobot-workspace/scripts/sensitive_crypto.py | 敏感信息加密工具 |
/data/nanobot-workspace/scripts/journal.sh | 记录前检测脚本 |
/data/nanobot-workspace/skills/auto-journal/SKILL.md | 自动记录技能文档 |