Siyuan LLM Wiki Skill
简介
本 Skill 用于在思源笔记中复现 Karpathy 的 LLM Wiki 工作流。
Karpathy 的原始方案使用 Obsidian + Claude Code 维护一个 Markdown 知识库。本 Skill 将其迁移到思源笔记,利用思源的原生 SQL 查询、块级引用和 HTTP API,构建一个更强大的 AI 维护型个人知识库。
核心思想
不要把 LLM 当搜索引擎用,而是让它像程序员写代码一样,帮你持续维护一个结构化知识库。
- 你负责:找资料、提好问题、做判断
- Agent 负责:总结、交叉引用、分类整理、保持一致性
- 思源负责:存储、链接、查询、可视化
前置条件
- 思源笔记已安装并运行(v3.x 以上)
- 开启思源 HTTP API:
- 设置 → 关于 → API Token → 复制 Token
- 默认地址:
http://127.0.0.1:6806(如果修改过端口,请使用实际端口)
- 一个支持本地文件/网络请求的 AI Agent(Claude Code、Kimi CLI、Cursor 等)
- 在思源中创建一个笔记本,命名为
LLM-Wiki(或任意名字)
快速开始
1. 测试 API 连接
curl -X POST http://127.0.0.1:6806/api/system/version \
-H "Authorization: Token <你的Token>" \
-H "Content-Type: application/json" \
-d '{}'
注意:如果思源笔记使用了非默认端口(如 6808、4976 等),请替换为实际端口。
返回 {"code":0,"data":"3.x.x"} 即表示连接成功。
2. 获取笔记本 ID
curl -X POST http://127.0.0.1:6806/api/notebook/lsNotebooks \
-H "Authorization: Token <你的Token>" \
-H "Content-Type: application/json" \
-d '{}'
找到 LLM-Wiki 对应的 id 字段,记下来。
3. 让 Agent 开始工作
将本目录下的 agents.md 的内容复制给你的 Agent,然后告诉它:
"在思源笔记的 LLM-Wiki 笔记本中,帮我搭建一个知识库。这是思源的 API Token: xxx,笔记本 ID: xxx。"
Agent 会按照 agents.md 中的指南自动完成初始化。
工作流
Ingestion(吸收资料)
- 你将原始资料放入
raw/(可以是思源中的一个文件夹,也可以是本地目录) - 告诉 Agent:"把这篇文章整理进知识库"
- Agent 读取资料 → 分析 → 调用思源 API 创建结构化文档 → 自动建立链接
Query(查询知识)+ 记忆反写
- 你在思源中提问,或直接在 Agent 中提问
- Agent 调用思源的 SQL API 检索相关内容
- Agent 综合回答,标注来源
- Agent 判断这个回答是否值得永久保存(跨来源分析、新发现、矛盾、用户明确指示)
- 如果需要保存:在
syntheses/创建综合页,记录问题、分析过程、结论、引用来源 - 更新
index.md和log.md
核心洞察:不是保存聊天记录,而是保存对话中产生的结构化知识。每次查询都让知识库更 rich,这就是复利增长。
Maintenance(维护)
- 定期让 Agent 运行
lint:检查孤立页面、失效链接、重复概念 - Agent 自动修复或给你报告
目录结构
siyuan-llm-wiki/
├── SKILL.md # 本文件:使用说明
├── agents.md # Agent 操作指南(核心)
├── templates/ # 思源文档模板
│ ├── sy-source.md # 来源摘要模板
│ ├── sy-entity.md # 实体页模板
│ ├── sy-concept.md # 概念页模板
│ ├── sy-synthesis.md # 综合页模板
│ ├── sy-index.md # 索引页模板
│ └── sy-log.md # 日志页模板
├── examples/ # API 调用示例
│ └── api-calls.md
└── scripts/ # 辅助脚本(可选)
└── siyuan_api.py # Python API 封装
思源 vs Obsidian 的关键差异
| 方面 | Obsidian | 思源笔记 |
|---|---|---|
| Agent 操作 | 直接读写 .md 文件 | HTTP API |
| 查询 | Dataview 插件 | 原生 SQL |
| 粒度 | 文档级 | 块级 |
| 链接语法 | [[wikilink]] | [[文档]] / ((块ID)) |
| 双向链接 | Dataview 扫描 | ((块ID)) 建立真正的引用关系,[[文档名]] 只是普通链接 |
| 属性 | YAML frontmatter | 任意块属性 |
进阶技巧
使用 SQL 做复杂查询
思源的数据库 schema 核心表:
blocks- 所有内容块refs- 引用关系attributes- 块属性
示例查询:
-- 查找知识库中所有提到 "RAG" 的段落
SELECT id, content, path
FROM blocks
WHERE content LIKE '%RAG%'
AND path LIKE '/LLM-Wiki/%'
AND type = 'p'
ORDER BY updated DESC
LIMIT 20;
-- 查找被引用最多的实体页
SELECT defBlockID, COUNT(*) as ref_count
FROM refs
WHERE defBlockPath LIKE '/LLM-Wiki/entities/%'
GROUP BY defBlockID
ORDER BY ref_count DESC
LIMIT 10;
块属性作为元数据
思源可以给任意块设置属性(不只是文档),Agent 可以通过 API 打标签:
POST /api/attr/setBlockAttrs
{
"id": "20240430120000-xxx",
"attrs": {
"custom-importance": "high",
"custom-status": "reviewed",
"custom-source": "arxiv"
}
}
然后可以用 SQL 按属性筛选:
SELECT * FROM attributes
WHERE name = 'custom-importance'
AND value = 'high';
参考
- Karpathy 原始 Gist: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f
- 思源 API 文档: https://leolee9086.github.io/siyuan-kernelApi-docs/
- 思源社区 API 汇总: https://www.siyuan-note.club/llms.txt
- 思源 GitHub API 文档: https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md