Obsidian AI 集成与最佳实践报告
Obsidian AI 集成与最佳实践报告
更新日期: 2026-03-14 文档版本: 1.0
目录
一、AI 集成方案概述
1.1 集成方式对比
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Local REST API | 功能完整,支持所有操作 | 需要 Obsidian 运行 | 脚本自动化、AI Agent |
| URI Scheme | 简单快速,无需插件 | 功能有限 | 快捷操作、跨应用 |
| Templater | 内置强大,支持 JS | 仅限 Obsidian 内部 | 模板自动化 |
| AI 插件 | 开箱即用 | 可能收费,依赖外部服务 | 日常 AI 辅助 |
1.2 架构图
┌─────────────────────────────────────────────────────────────────────────┐
│ Obsidian AI 集成架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Claude Code │ │ GPT/Claude │ │ 其他 AI │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ Local REST API │ │
│ │ (端口 27124) │ │
│ └────────┬───────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 读取笔记 │ │ 写入笔记 │ │ 搜索内容 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ Obsidian │ │
│ │ 仓库 (Vault) │ │
│ └────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
二、Claude Code 集成
2.1 配置 MCP 服务器
方式一:使用 Local REST API
创建 MCP 服务器配置文件:
// ~/.claude/claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp/index.js"],
"env": {
"OBSIDIAN_API_KEY": "your-api-key",
"OBSIDIAN_HOST": "127.0.0.1",
"OBSIDIAN_PORT": "27124"
}
}
}
}
方式二:直接 HTTP 调用
Claude Code 可以直接使用 Bash 工具调用 REST API:
# Claude Code 执行的命令示例
curl -X POST "https://127.0.0.1:27124/periodic/daily/" \
-H "Authorization: Bearer $OBSIDIAN_API_KEY" \
-H "Content-Type: text/markdown" \
-k \
-d "## AI 自动记录\n\n这是 Claude Code 自动添加的内容"
2.2 Claude Code 工作流示例
# Claude Code 自动化场景
## 场景 1:自动保存研究笔记
用户: "帮我把这份研究报告保存到 Obsidian"
Claude Code:
1. 调用 REST API 创建笔记
2. 保存到指定路径
## 场景 2:追加到日记
用户: "记录一下今天的进展"
Claude Code:
1. 调用 /periodic/daily/ 端点
2. 追加时间戳和内容
## 场景 3:搜索笔记
用户: "帮我找一下关于机器学习的笔记"
Claude Code:
1. 调用 /search/simple/ 端点
2. 返回匹配结果
2.3 Claude Code 提示词模板
# 给 Claude Code 的 Obsidian 集成指令
你已连接到我的 Obsidian 仓库,可以通过 Local REST API 操作笔记。
## API 配置
- Base URL: https://127.0.0.1:27124
- API Key: 已配置在环境变量中
## 可用操作
1. 创建笔记: PUT /vault/{path}
2. 读取笔记: GET /vault/{path}
3. 追加内容: POST /vault/{path}
4. 搜索笔记: POST /search/simple/
5. 追加日记: POST /periodic/daily/
## 使用规范
- 创建笔记时使用有意义的文件名
- 内容使用标准 Markdown 格式
- 追加日记时自动添加时间戳
- 搜索时使用精准关键词
三、Obsidian AI 插件
3.1 主流 AI 插件对比
| 插件 | 模型支持 | 特点 | 价格 |
|---|---|---|---|
| Copilot | OpenAI, Anthropic, Local | 对话式 AI,支持上下文 | 免费/付费 |
| Text Generator | 多模型 | 文本生成,模板支持 | 免费 |
| Khoj | 本地模型 | 私有化,支持搜索 | 免费 |
| Smart Connections | Embeddings | 语义链接,推荐相关笔记 | 免费 |
| BMO Chatbot | Ollama | 本地运行,完全私有 | 免费 |
3.2 Obsidian Copilot 配置
┌─────────────────────────────────────────────────────────────┐
│ Copilot 插件配置 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 模型设置: │
│ ├── OpenAI: gpt-4-turbo │
│ ├── Anthropic: claude-sonnet-4.6 │
│ └── 自定义: 你的 API 端点 │
│ │
│ 功能: │
│ ├── 💬 对话模式 - 和笔记对话 │
│ ├── 📝 文本生成 - 续写、改写 │
│ ├── 🔍 智能搜索 - 语义搜索 │
│ └── 📊 笔记分析 - 总结、提取 │
│ │
└─────────────────────────────────────────────────────────────┘
3.3 Khoj 本地 AI 配置
优点: 完全本地运行,隐私安全
- 安装 Khoj 桌面应用
- 安装 Obsidian Khoj 插件
- 配置模型路径
# khoj.yml
search-type: semantic
model: llama3
embeddings-model: all-MiniLM-L6-v2
3.4 Smart Connections 语义链接
工作原理:
1. 对所有笔记生成 Embeddings
2. 建立向量索引
3. 根据当前笔记推荐相关内容
使用方式:
- 侧边栏显示"相关笔记"
- 支持语义搜索
- 发现隐藏的知识关联
四、自动化脚本最佳实践
4.1 Python 自动化脚本库
#!/usr/bin/env python3
"""
Obsidian 自动化工具库
依赖: pip install requests python-dateutil
"""
import os
import json
import requests
from datetime import datetime
from pathlib import Path
from typing import Optional, List, Dict
class ObsidianVault:
"""Obsidian 仓库自动化工具"""
def __init__(self, api_key: str, vault_path: str = None):
self.base_url = "https://127.0.0.1:27124"
self.headers = {"Authorization": f"Bearer {api_key}"}
self.verify = False
self.vault_path = vault_path
def _request(self, method: str, endpoint: str, **kwargs) -> requests.Response:
"""发送请求"""
url = f"{self.base_url}{endpoint}"
kwargs["headers"] = {**self.headers, **kwargs.get("headers", {})}
kwargs["verify"] = self.verify
return requests.request(method, url, **kwargs)
# ========== 笔记操作 ==========
def create_note(self, path: str, content: str) -> bool:
"""创建笔记"""
resp = self._request("PUT", f"/vault/{path}",
headers={"Content-Type": "text/markdown"},
data=content.encode('utf-8'))
return resp.status_code == 204
def read_note(self, path: str) -> Optional[str]:
"""读取笔记"""
resp = self._request("GET", f"/vault/{path}")
return resp.text if resp.status_code == 200 else None
def append_note(self, path: str, content: str) -> bool:
"""追加内容"""
resp = self._request("POST", f"/vault/{path}",
headers={"Content-Type": "text/markdown"},
data=content.encode('utf-8'))
return resp.status_code == 204
def delete_note(self, path: str) -> bool:
"""删除笔记"""
resp = self._request("DELETE", f"/vault/{path}")
return resp.status_code == 204
# ========== 日记操作 ==========
def append_daily(self, content: str, date: datetime = None) -> bool:
"""追加到日记"""
endpoint = "/periodic/daily/"
if date:
endpoint = f"/periodic/daily/{date.year}/{date.month:02d}/{date.day:02d}/"
timestamp = datetime.now().strftime("%H:%M")
formatted_content = f"\n## {timestamp}\n{content}"
resp = self._request("POST", endpoint,
headers={"Content-Type": "text/markdown"},
data=formatted_content.encode('utf-8'))
return resp.status_code == 204
def get_daily(self, date: datetime = None) -> Optional[str]:
"""获取日记内容"""
endpoint = "/periodic/daily/"
if date:
endpoint = f"/periodic/daily/{date.year}/{date.month:02d}/{date.day:02d}/"
resp = self._request("GET", endpoint)
return resp.text if resp.status_code == 200 else None
# ========== 搜索 ==========
def search(self, query: str) -> List[Dict]:
"""搜索笔记"""
resp = self._request("POST", "/search/simple/",
json={"query": query})
return resp.json() if resp.status_code == 200 else []
# ========== 文件夹操作 ==========
def list_directory(self, path: str = "") -> Dict:
"""列出目录内容"""
endpoint = f"/vault/{path}/" if path else "/vault/"
resp = self._request("GET", endpoint)
return resp.json() if resp.status_code == 200 else {}
# ========== 高级功能 ==========
def quick_capture(self, content: str, title: str = None) -> bool:
"""快速收集到 Inbox"""
if title is None:
title = datetime.now().strftime("%Y-%m-%d %H%M%S")
path = f"00-Inbox/{title}.md"
full_content = f"# {title}\n\n创建时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n{content}"
return self.create_note(path, full_content)
def log_event(self, event_type: str, description: str) -> bool:
"""记录事件到日志"""
content = f"\n### {event_type}\n时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n{description}\n"
return self.append_daily(content)
def find_backlinks(self, note_path: str) -> List[str]:
"""查找反向链接(简化版)"""
note_name = Path(note_path).stem
results = self.search(f"[[{note_name}]]")
return [r.get('path', '') for r in results]
# ========== 使用示例 ==========
if __name__ == "__main__":
# 初始化
vault = ObsidianVault(api_key=os.environ.get("OBSIDIAN_API_KEY"))
# 快速收集
vault.quick_capture("今天学到了 Obsidian REST API 的用法", "学习笔记")
# 追加日记
vault.append_daily("完成了 Obsidian 自动化脚本的编写")
# 记录事件
vault.log_event("任务完成", "Obsidian 研究文档已创建完成")
# 搜索
results = vault.search("Obsidian")
print(f"找到 {len(results)} 条相关笔记")
4.2 定时任务脚本
#!/usr/bin/env python3
"""
Obsidian 定时任务
配合 cron 或 launchd 使用
"""
from datetime import datetime, timedelta
from obsidian_automation import ObsidianVault
import os
def daily_summary():
"""每日总结任务"""
vault = ObsidianVault(api_key=os.environ["OBSIDIAN_API_KEY"])
# 获取今日日记
today_content = vault.get_daily()
# 追加总结模板
summary_template = """
---
## 📊 今日总结
**完成事项:**
- [ ] ...
**明日计划:**
- [ ] ...
**笔记统计:** 共记录 X 条内容
"""
vault.append_daily(summary_template)
def weekly_review():
"""每周回顾"""
vault = ObsidianVault(api_key=os.environ["OBSIDIAN_API_KEY"])
# 创建周回顾笔记
today = datetime.now()
week_num = today.isocalendar()[1]
path = f"Reviews/{today.year}-W{week_num:02d}.md"
content = f"""# 第 {week_num} 周回顾
时间范围: {(today - timedelta(days=today.weekday())).strftime('%Y-%m-%d')} - {today.strftime('%Y-%m-%d')}
## 本周重点
-
## 完成的项目
-
## 学到的东西
-
## 下周计划
-
"""
vault.create_note(path, content)
# cron 配置示例
# 0 21 * * * /usr/bin/python3 /path/to/obsidian_tasks.py daily
# 0 20 * * 0 /usr/bin/python3 /path/to/obsidian_tasks.py weekly
五、Templater 高级用法
5.1 动态模板示例
<%*
// 会议记录模板
let meetingTitle = await tp.system.prompt("会议主题");
let attendees = await tp.system.prompt("参会人员(逗号分隔)");
let date = tp.date.now("YYYY-MM-DD");
let time = tp.date.now("HH:mm");
tR += `# ${meetingTitle}
日期: ${date}
时间: ${time}
参会: ${attendees}
## 议程
1.
2.
3.
## 讨论内容
## 决议
-
## 待办事项
- [ ]
`;
%>
5.2 调用外部 API
<%*
// 获取天气信息
let weather = await fetch("https://api.open-meteo.com/v1/forecast?latitude=39.9&longitude=116.4¤t_weather=true")
.then(r => r.json());
let temp = weather.current_weather.temperature;
let wind = weather.current_weather.windspeed;
tR += `# 日记 - ${tp.date.now("YYYY-MM-DD")}
## 天气
🌡️ 温度: ${temp}°C
💨 风速: ${wind} km/h
## 今日事项
-
`;
%>
5.3 自动分类模板
<%*
// 根据关键词自动选择文件夹
let title = tp.file.title;
let content = tp.file.content;
// 定义关键词映射
const categoryMap = {
"工作": "01-Projects",
"学习": "03-Resources/Learning",
"生活": "02-Areas/Life",
"想法": "00-Inbox/Ideas"
};
// 匹配分类
let targetFolder = "00-Inbox"; // 默认
for (let [keyword, folder] of Object.entries(categoryMap)) {
if (title.includes(keyword) || content.includes(keyword)) {
targetFolder = folder;
break;
}
}
// 移动文件
await tp.file.move(`/${targetFolder}/${title}`);
%>
六、URI Scheme 自动化
6.1 基础 URI 格式
obsidian://动作?参数1=值1&参数2=值2
6.2 常用 URI 示例
# 打开笔记
open "obsidian://open?vault=MyVault&file=Notes/MyNote"
# 新建笔记
open "obsidian://new?vault=MyVault&name=NewNote&content=Hello%20World"
# 搜索
open "obsidian://search?vault=MyVault&query=关键词"
# 打开今日日记
open "obsidian://daily?vault=MyVault"
6.3 Advanced URI 插件
安装 Advanced URI 插件后,功能更强大:
# 追加内容到笔记
open "obsidian://advanced-uri?vault=MyVault&filepath=Notes/MyNote&data=追加的内容&mode=append"
# 执行命令
open "obsidian://advanced-uri?vault=MyVault&commandid=editor:save-file"
# 打开设置
open "obsidian://advanced-uri?vault=MyVault&settingid=editor"
6.4 macOS Shortcuts 集成
创建快捷指令:
1. "获取剪贴板内容"
2. "URL" 操作: obsidian://new?vault=MyVault&name=QuickNote&content=[剪贴板内容]
3. "打开 URL"
七、工作流设计建议
7.1 知识收集工作流
┌─────────────────────────────────────────────────────────────┐
│ 知识收集工作流 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 📱 移动端 │
│ └── 快速捕获 → 00-Inbox/ │
│ │
│ 💻 浏览器 │
│ └── Obsidian Web 扩展 → 00-Inbox/WebClips/ │
│ │
│ 🤖 AI Agent (Claude Code) │
│ └── REST API → 00-Inbox/AICaptures/ │
│ │
│ 📝 每周整理 │
│ └── 00-Inbox → 01-Projects/02-Areas/03-Resources │
│ │
└─────────────────────────────────────────────────────────────┘
7.2 日记工作流
# 日记自动化流程
## 每日自动
- [x] 早上: Templater 自动创建日记
- [x] 晚上: 自动追加总结模板
- [x] AI: 自动提取今日关键词
## 每周
- [ ] 周日: 自动生成周回顾
- [ ] AI: 分析本周笔记趋势
## 每月
- [ ] 月末: 生成本月报告
- [ ] 归档: 移动到月度文件夹
7.3 项目管理工作流
# 项目笔记结构
## 创建项目
1. Templater 模板创建项目笔记
2. 自动创建子文件夹
3. 初始化看板
## 项目进行中
- REST API 追加进度更新
- 自动关联相关笔记
- AI 生成进度报告
## 项目完成
- 自动移动到 Archives
- 生成项目总结
- 更新索引
7.4 AI 辅助工作流
用户输入 → Claude Code
│
├── 理解意图
│
├── 搜索相关笔记 (REST API)
│
├── 分析内容
│
├── 生成/更新笔记
│
└── 追加到日记
八、最佳实践总结
8.1 文件夹结构建议 (PARA + 改进)
MyVault/
├── 00-Inbox/ ← 快速收集,定期整理
│ ├── QuickNotes/
│ ├── WebClips/
│ └── AICaptures/
├── 01-Projects/ ← 当前项目
│ └── ProjectName/
│ ├── Notes/
│ ├── Resources/
│ └── Archive/
├── 02-Areas/ ← 持续关注领域
│ ├── Work/
│ ├── Health/
│ └── Learning/
├── 03-Resources/ ← 参考资料
│ ├── Articles/
│ ├── Books/
│ └── Templates/
├── 04-Archives/ ← 归档
├── 05-Daily/ ← 日记
├── 06-Reviews/ ← 回顾
└── Templates/ ← 模板文件
8.2 命名规范
# 推荐命名格式
## 日记
YYYY-MM-DD.md
2026-03-14.md
## 项目笔记
P-项目名-模块-功能.md
P-MyApp-API-认证.md
## 资源笔记
R-类型-标题.md
R-Book-原子习惯.md
## 会议记录
M-YYYY-MM-DD-主题.md
M-2026-03-14-产品评审.md
8.3 自动化原则
- 最小必要: 只自动化真正重复的任务
- 渐进增强: 从简单开始,逐步增加复杂度
- 可恢复: 保留撤销和恢复的能力
- 可观测: 记录自动化操作的日志
九、参考资源
官方资源
- Obsidian 官网: https://obsidian.md
- 插件市场: https://obsidian.md/plugins
- 官方论坛: https://forum.obsidian.md
插件文档
- Local REST API: https://github.com/coddingtonbear/obsidian-local-rest-api
- Templater: https://silentvoid13.github.io/Templater/
- Advanced URI: https://github.com/Vinzent03/obsidian-advanced-uri
社区资源
- PKMer: https://pkmer.cn
- Obsidian 中文论坛: https://forum-zh.obsidian.md
AI 集成
- Obsidian Copilot: https://github.com/logancyang/obsidian-copilot
- Khoj: https://khoj.dev
- Smart Connections: https://github.com/brianpetro/obsidian-smart-connections
文档生成时间: 2026-03-14