> 让 AI 管家直接读写你的笔记系统,这才是真正的第二大脑。 ## 为什么要接思源笔记 OpenClaw 自带的记忆系统(MEMORY.md + daily notes)是给 AI 用的工作记忆。但我还需要一个给**人**用的知识库——一个我自己会翻、会搜、会整理的地方。 思源笔记是我用了两年多的本地笔记系统。975 篇文档、10.4MB,涵盖读书笔记、投资框架、日记、工作记录。如果 AI 能直接读写思源,那它就不只是一个聊天助手,而是一个真正能帮我管理知识的伙伴。 ## 创建 siyuan-notes Skill 除夕夜(2/14),我创建了第一个 OpenClaw skill:siyuan-notes。 思源笔记提供了完整的 HTTP API(`localhost:6806`),所有操作都是 POST 请求 + JSON body + Token 认证。我写了一个 helper 脚本 `siyuan-api.sh` 封装常用操作: ```bash # 追加到今天的 DailyNote bash scripts/siyuan-api.sh dailynote "- 今天学到了 xxx" # 创建新文档 bash scripts/siyuan-api.sh create "your-notebook-id" "/路径/文档名" "内容" # 全文搜索 bash scripts/siyuan-api.sh search "关键词" # SQL 查询 bash scripts/siyuan-api.sh query "SELECT id, content FROM blocks WHERE type='d' ORDER BY updated DESC LIMIT 10" ``` Skill 的核心是一个 SKILL.md 文件,告诉 AI 怎么用这些 API。OpenClaw 会在需要时自动加载对应的 skill。 ## 写入规则的演化 这部分踩了不少坑,格式改了好几版。 ### 第一版:wiki-link + 二级标题 最初让 AI 用 `[[关键词]]` 打双链,用 `##` 二级标题分隔每条记录。 问题: - `[[关键词]]` 在思源里是虚拟引用,不是真双链,反链面板看不到 - `##` 标题会"吃掉"后续内容——我在 DailyNote 里手写的速记会被归到 AI 的标题下面 ### 第二版:真双链 + 无序列表 改成 `((blockID 'anchor text'))` 格式的真双链,用无序列表代替标题: ```markdown - 概括性描述。((your-block-id 'claw 记录')) - 详细内容作为子列表缩进 - 可以继续展开多条 ``` 每条记录都带 `((your-block-id 'claw 记录'))` 标记,这样在思源的反链面板里能看到所有 AI 写入的内容。 这个格式和我自己手写速记的风格一致,互不干扰。 ### 修复历史记录 格式确定后,还回去修复了 2/14、2/16、2/17、2/18 所有用错格式的记录。这种技术债越早还越好。 ## siyuan-rag:给笔记加上语义搜索 思源自带全文搜索,但只能精确匹配关键词。我想要的是**语义搜索**——搜"投资风险管理"能找到"安全边际"和"止损策略"相关的笔记。 ### 项目搭建 `siyuan-rag` 是一个独立的 Python 项目(`~/projects/siyuan-rag`),架构很简单: 1. **索引**:从思源 API 抽取所有文档 → 分 chunk → embedding → 存入 ChromaDB 2. **搜索**:query embedding → 同时跑 BM25 全文匹配 + 向量相似度 → RRF 融合排序 Embedding 用的是 ModelScope 的 `Qwen/Qwen3-Embedding-0.6B`(1024 维),和 memorySearch 共用同一个模型。 ```bash # 索引 python cli.py index # 从思源抽取 471 chunks,全部入库 # 搜索 python cli.py search "投资学习框架" # hybrid search python cli.py vsearch "安全边际" # 纯向量搜索,score 0.65 ``` 部署为 systemd 服务,端口 8002,开机自启: ```bash # API 调用 curl -s http://localhost:8002/api/search \ -X POST -H "Content-Type: application/json" \ -d '{"query":"安全边际","top_k":3}' ``` ## quicknote 速记 Bot 假期最后一天的产物,也是我最满意的 workflow 之一。 ### 痛点 我之前用安卓的 HTTP Shortcuts 往思源发内容,痛点很多:不能语音、双链要手打、不能转发内容、没有草稿保存。 讨论了三个方案后,选了最简单的:**OpenClaw 新增一个 quicknote agent,绑定独立的 Telegram bot**。 ### 架构 ``` 用户 Telegram → quicknote bot → OpenClaw (gemini-2.5-flash) ↓ 整理 + 打双链 ↓ 思源笔记 DailyNote ``` quicknote 有独立的 workspace(`~/.openclaw/workspace-quicknote/`),独立的 SOUL.md 和 AGENTS.md,只做一件事:收到内容 → 整理 → 写入思源。 ### 图片处理 收到图片时,quicknote 会: 1. 从消息中提取图片文件路径 2. 用 curl 上传到思源 assets: ```bash curl -s -X POST http://localhost:6806/api/asset/upload \ -H "Authorization: Token your-siyuan-token" \ -F "assetsDirPath=/assets/" \ -F "file[]=@/path/to/image.jpg" ``` 3. 从返回的 `succMap` 获取资源路径 4. 在笔记中同时嵌入图片和描述: ```markdown - 图片描述。((your-block-id 'claw 记录')) -  ``` ### 智能双链 这是 quicknote 最有意思的部分。它会对内容中的关键词尝试打双链: 1. **提取关键词**:识别人名、书名、概念等 2. **思源全文搜索**:精确匹配已有文档 3. **RAG 语义搜索**:全文搜索没结果时,调 siyuan-rag API 做语义匹配 4. **找到 → 真双链**:`((blockID 'anchor text'))` 5. **找不到 → 新建文档**:在 `/References/关键词` 下创建空文档,拿到 doc_id 再打双链 最后一步是关键设计决策。搜不到时不是放弃,而是新建文档再打双链。空文档不是噪音——它是一个**节点**,反链面板会自动聚合所有提到它的 DailyNote 条目。这正是 DailyNote 工作流的核心优势:低摩擦地积累原子笔记之间的真实链接。 ## 日记系统 除了速记,我还设计了一套渐进式日记系统: ``` 日记 (YYYY-MM-DD) → 月摘要 (YYYY-MM) → 半年摘要 (S1/S2) → 年度摘要 (YYYY) ``` 每一层都是对下一层的精炼。自动化方面: - **晚间日记提醒**(21:30 cron):读当天 DailyNote,对比聊天记录,提示遗漏了什么 - **月度日记摘要**(每月 1 号 10:00 cron):自动生成上月摘要,写入思源 这样我只需要每天随手记,整理和摘要的工作交给 AI。 ## 小结 思源笔记联动的完整链路: - **siyuan-notes skill**:AI 读写思源的基础能力 - **siyuan-rag**:语义搜索,让 AI 能"理解"笔记内容 - **quicknote bot**:低摩擦的速记入口,图片 + 文字 + 智能双链 - **日记系统**:自动提醒 + 自动摘要,减少人工整理 这套系统跑起来之后,我记笔记的频率明显提高了——因为门槛降到了"给 Telegram bot 发条消息"。 Loading... > 让 AI 管家直接读写你的笔记系统,这才是真正的第二大脑。 ## 为什么要接思源笔记 OpenClaw 自带的记忆系统(MEMORY.md + daily notes)是给 AI 用的工作记忆。但我还需要一个给**人**用的知识库——一个我自己会翻、会搜、会整理的地方。 思源笔记是我用了两年多的本地笔记系统。975 篇文档、10.4MB,涵盖读书笔记、投资框架、日记、工作记录。如果 AI 能直接读写思源,那它就不只是一个聊天助手,而是一个真正能帮我管理知识的伙伴。 ## 创建 siyuan-notes Skill 除夕夜(2/14),我创建了第一个 OpenClaw skill:siyuan-notes。 思源笔记提供了完整的 HTTP API(`localhost:6806`),所有操作都是 POST 请求 + JSON body + Token 认证。我写了一个 helper 脚本 `siyuan-api.sh` 封装常用操作: ```bash # 追加到今天的 DailyNote bash scripts/siyuan-api.sh dailynote "- 今天学到了 xxx" # 创建新文档 bash scripts/siyuan-api.sh create "your-notebook-id" "/路径/文档名" "内容" # 全文搜索 bash scripts/siyuan-api.sh search "关键词" # SQL 查询 bash scripts/siyuan-api.sh query "SELECT id, content FROM blocks WHERE type='d' ORDER BY updated DESC LIMIT 10" ``` Skill 的核心是一个 SKILL.md 文件,告诉 AI 怎么用这些 API。OpenClaw 会在需要时自动加载对应的 skill。 ## 写入规则的演化 这部分踩了不少坑,格式改了好几版。 ### 第一版:wiki-link + 二级标题 最初让 AI 用 `[[关键词]]` 打双链,用 `##` 二级标题分隔每条记录。 问题: - `[[关键词]]` 在思源里是虚拟引用,不是真双链,反链面板看不到 - `##` 标题会"吃掉"后续内容——我在 DailyNote 里手写的速记会被归到 AI 的标题下面 ### 第二版:真双链 + 无序列表 改成 `((blockID 'anchor text'))` 格式的真双链,用无序列表代替标题: ```markdown - 概括性描述。((your-block-id 'claw 记录')) - 详细内容作为子列表缩进 - 可以继续展开多条 ``` 每条记录都带 `((your-block-id 'claw 记录'))` 标记,这样在思源的反链面板里能看到所有 AI 写入的内容。 这个格式和我自己手写速记的风格一致,互不干扰。 ### 修复历史记录 格式确定后,还回去修复了 2/14、2/16、2/17、2/18 所有用错格式的记录。这种技术债越早还越好。 ## siyuan-rag:给笔记加上语义搜索 思源自带全文搜索,但只能精确匹配关键词。我想要的是**语义搜索**——搜"投资风险管理"能找到"安全边际"和"止损策略"相关的笔记。 ### 项目搭建 `siyuan-rag` 是一个独立的 Python 项目(`~/projects/siyuan-rag`),架构很简单: 1. **索引**:从思源 API 抽取所有文档 → 分 chunk → embedding → 存入 ChromaDB 2. **搜索**:query embedding → 同时跑 BM25 全文匹配 + 向量相似度 → RRF 融合排序 Embedding 用的是 ModelScope 的 `Qwen/Qwen3-Embedding-0.6B`(1024 维),和 memorySearch 共用同一个模型。 ```bash # 索引 python cli.py index # 从思源抽取 471 chunks,全部入库 # 搜索 python cli.py search "投资学习框架" # hybrid search python cli.py vsearch "安全边际" # 纯向量搜索,score 0.65 ``` 部署为 systemd 服务,端口 8002,开机自启: ```bash # API 调用 curl -s http://localhost:8002/api/search \ -X POST -H "Content-Type: application/json" \ -d '{"query":"安全边际","top_k":3}' ``` ## quicknote 速记 Bot 假期最后一天的产物,也是我最满意的 workflow 之一。 ### 痛点 我之前用安卓的 HTTP Shortcuts 往思源发内容,痛点很多:不能语音、双链要手打、不能转发内容、没有草稿保存。 讨论了三个方案后,选了最简单的:**OpenClaw 新增一个 quicknote agent,绑定独立的 Telegram bot**。 ### 架构 ``` 用户 Telegram → quicknote bot → OpenClaw (gemini-2.5-flash) ↓ 整理 + 打双链 ↓ 思源笔记 DailyNote ``` quicknote 有独立的 workspace(`~/.openclaw/workspace-quicknote/`),独立的 SOUL.md 和 AGENTS.md,只做一件事:收到内容 → 整理 → 写入思源。 ### 图片处理 收到图片时,quicknote 会: 1. 从消息中提取图片文件路径 2. 用 curl 上传到思源 assets: ```bash curl -s -X POST http://localhost:6806/api/asset/upload \ -H "Authorization: Token your-siyuan-token" \ -F "assetsDirPath=/assets/" \ -F "file[]=@/path/to/image.jpg" ``` 3. 从返回的 `succMap` 获取资源路径 4. 在笔记中同时嵌入图片和描述: ```markdown - 图片描述。((your-block-id 'claw 记录')) -  ``` ### 智能双链 这是 quicknote 最有意思的部分。它会对内容中的关键词尝试打双链: 1. **提取关键词**:识别人名、书名、概念等 2. **思源全文搜索**:精确匹配已有文档 3. **RAG 语义搜索**:全文搜索没结果时,调 siyuan-rag API 做语义匹配 4. **找到 → 真双链**:`((blockID 'anchor text'))` 5. **找不到 → 新建文档**:在 `/References/关键词` 下创建空文档,拿到 doc_id 再打双链 最后一步是关键设计决策。搜不到时不是放弃,而是新建文档再打双链。空文档不是噪音——它是一个**节点**,反链面板会自动聚合所有提到它的 DailyNote 条目。这正是 DailyNote 工作流的核心优势:低摩擦地积累原子笔记之间的真实链接。 ## 日记系统 除了速记,我还设计了一套渐进式日记系统: ``` 日记 (YYYY-MM-DD) → 月摘要 (YYYY-MM) → 半年摘要 (S1/S2) → 年度摘要 (YYYY) ``` 每一层都是对下一层的精炼。自动化方面: - **晚间日记提醒**(21:30 cron):读当天 DailyNote,对比聊天记录,提示遗漏了什么 - **月度日记摘要**(每月 1 号 10:00 cron):自动生成上月摘要,写入思源 这样我只需要每天随手记,整理和摘要的工作交给 AI。 ## 小结 思源笔记联动的完整链路: - **siyuan-notes skill**:AI 读写思源的基础能力 - **siyuan-rag**:语义搜索,让 AI 能"理解"笔记内容 - **quicknote bot**:低摩擦的速记入口,图片 + 文字 + 智能双链 - **日记系统**:自动提醒 + 自动摘要,减少人工整理 这套系统跑起来之后,我记笔记的频率明显提高了——因为门槛降到了"给 Telegram bot 发条消息"。 最后修改:2026 年 02 月 24 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏