
🎯 博主简介
CSDN 「新星创作者」 人工智能技术领域博主,码龄5年 ,累计发布
180+篇原创文章,博客总访问量24万+浏览!
🚀 持续更新AI前沿实战知识,专注于 AI 技术实战,多个专栏详细解析,包括:
- 🔥 生产级 RAG 系统--- 架构设计、多路召回、混合检索、生产优化
- 🤖 多 Agent 协作系统 --- Swarm 架构、任务编排、状态管理
- 🔌 MCP 协议 --- 协议规范与深度实现
- ⚡ OpenClaw超详细教程 --- AI 助手框架进阶应用
- ✨ Agent记忆系统 --- 深度解析Agent记忆系统
- ✨ Hermes Agent + Obsidian 打造第二大脑:14篇文章讲透第二大脑搭建!
同时也涉猎计算机视觉、Java 后端与 Spring 生态、Transformer 等深度学习技术。坚持从架构到代码、从原理到部署的实战风格。每篇文章配套代码与扩展资料,欢迎交流探讨。📱:
安逸Ai--- 每天一点AI:资料、笔记、工具、趋势,一起进步。
📑 目录
- [1. 插件配置的价值](#1. 插件配置的价值)
- [1.1 Obsidian 插件系统概述](#1.1 Obsidian 插件系统概述)
- [1.2 我的插件配置原则](#1.2 我的插件配置原则)
- [2. 必备插件详解](#2. 必备插件详解)
- [2.1 Templater 模板系统](#2.1 Templater 模板系统)
- [2.2 Dataview 数据查询](#2.2 Dataview 数据查询)
- [2.3 QuickAdd 快速创建](#2.3 QuickAdd 快速创建)
- [2.4 Local REST API](#2.4 Local REST API)
- [3. 推荐插件](#3. 推荐插件)
- [3.1 Minimal Theme](#3.1 Minimal Theme)
- [3.2 Style Settings](#3.2 Style Settings)
- [3.3 Auto Link Title](#3.3 Auto Link Title)
- [3.4 Tag Wrangler](#3.4 Tag Wrangler)
- [3.5 Better Word Count](#3.5 Better Word Count)
- [3.6 Git](#3.6 Git)
- [4. 插件性能优化](#4. 插件性能优化)
- [4.1 插件数量控制](#4.1 插件数量控制)
- [4.2 资源密集型插件](#4.2 资源密集型插件)
- [4.3 我的插件列表](#4.3 我的插件列表)
- [5. 完整配置示例](#5. 完整配置示例)
- [5.1 模板文件夹结构](#5.1 模板文件夹结构)
- [5.2 仪表盘模板](#5.2 仪表盘模板)
- [5.3 每日日志模板](#5.3 每日日志模板)
- [5.4 项目模板](#5.4 项目模板)
- [6. Local REST API 高级用法](#6. Local REST API 高级用法)
- [6.1 API 认证配置](#6.1 API 认证配置)
- [6.2 Hermes Agent 集成](#6.2 Hermes Agent 集成)
- [6.3 Python 调用示例](#6.3 Python 调用示例)
- [7. 插件安全建议](#7. 插件安全建议)
- [8. 常见问题 FAQ](#8. 常见问题 FAQ)
1. 插件配置的价值
1.1 Obsidian 插件系统概述
Obsidian 本身只是一个 Markdown 编辑器,加上插件才能成为知识管理系统。
┌────────────────────────────────────────────────────────────────────────────┐
│ Obsidian 插件系统架构 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Obsidian 核心功能 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ 文件管理 │ 编辑器 │ 搜索 │ 图谱 │ 同步 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 插件生态扩展 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Templater ────▶ 模板自动化 │ │
│ │ Dataview ────▶ 数据查询 │ │
│ │ QuickAdd ────▶ 快速捕捉 │ │
│ │ Local REST API ────▶ Hermes 集成 │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────┘
插件类型:
| 类型 | 说明 | 示例 |
|---|---|---|
| 核心插件 | Obsidian 内置 | 快速切换、模板等 |
| 社区插件 | 第三方开发 | Templater、Dataview 等 |
| 内部插件 | 自行开发 | 可通过 Local REST API 调用 |
1.2 我的插件配置原则
┌────────────────────────────────────────────────────────────────────────────┐
│ 插件配置三原则 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ 原则一:只安装真正需要的插件 │
│ └── 每次安装前问自己:这个插件每天都会用到吗? │
│ │
│ 原则二:定期清理不用的插件 │
│ └── 超过 1 个月没用的插件,删 │
│ │
│ 原则三:插件越多,性能越差 │
│ └── 保持插件数量在可控范围内 │
│ │
└────────────────────────────────────────────────────────────────────────────┘
2. 必备插件详解
2.1 Templater 模板系统
为什么需要:每次创建笔记都要写 frontmatter、标题格式,太繁琐。Templater 让这一切自动化。
安装和配置
- 社区插件市场搜索 "Templater"
- 安装并启用
- 配置模板文件夹路径(建议
templates/)
核心语法
javascript
<%*
// JavaScript 代码块,可选
const today = tp.date.now();
%>
<% tp.date.now() %> // 当前日期时间
<% tp.date.now("YYYY-MM-DD") %> // 格式化日期
<% tp.file.title %> // 文件标题
<% tp.file.folder() %> // 文件夹路径
<% tp.file.path %> // 完整路径
<% tp.date.now("dddd") %> // 星期几
完整函数列表
| 类别 | 函数 | 说明 | 示例 |
|---|---|---|---|
| 日期 | tp.date.now() |
当前日期时间 | 2026-04-26 17:30 |
| 日期 | tp.date.now("YYYY-MM-DD") |
格式化日期 | 2026-04-26 |
| 日期 | tp.date.now("dddd") |
星期几 | Sunday |
| 日期 | tp.date.tomorrow() |
明天 | - |
| 日期 | tp.date.yesterday() |
昨天 | - |
| 日期 | tp.date.weekday() |
周几 | 1 (周一) |
| 文件 | tp.file.title |
文件标题 | - |
| 文件 | tp.file.folder() |
文件夹 | 工作/ |
| 文件 | tp.file.path |
完整路径 | - |
| 文件 | tp.file.cursor() |
光标位置 | - |
| 系统 | tp.system.prompt() |
用户输入 | - |
| 系统 | tp.system.suggester() |
下拉选择 | - |
我的每日日志模板
markdown
---
title: <% tp.date.now("YYYY-MM-DD") %>
date: <% tp.date.now("YYYY-MM-DD") %>
day: <% tp.date.now("dddd") %>
tags: [日志, 每日]
weather:
mood:
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---
# <% tp.date.now("YYYY-MM-DD") %> <% tp.date.now("dddd") %>
## 🎯 今日重点
1.
## 📝 今日记录
### 工作会议
-
### 学习内容
-
### 随手记
-
## 💡 灵感/想法
-
## 📌 明日计划
- [ ]
## 📊 复盘
- 完成:
- 未完成:
- 原因分析:
---
*由 Templater 自动创建于 <% tp.date.now("YYYY-MM-DD HH:mm") %>*
我的项目模板
markdown
---
title: <% await tp.system.prompt("项目名称") %>
date: <% tp.date.now("YYYY-MM-DD") %>
status: 进行中
tags: [项目]
project_type:
importance: medium
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---
# <% await tp.system.prompt("项目名称") %>
## 📋 项目概述
## 🎯 目标
1.
## 📅 里程碑
- [ ] 阶段一:
- [ ] 阶段二:
- [ ] 阶段三:
## 👥 团队成员
- 负责人:
- 成员:
## 📊 进度
## 📝 会议记录
- [[会议记录/<% tp.date.now("YYYY-MM-DD") %>]]
## 💡 经验教训
## 📎 资源
-
我的会议记录模板
markdown
---
title: "<% await tp.system.prompt("会议名称") %>"
date: <% tp.date.now("YYYY-MM-DD") %>
time: <% tp.date.now("HH:mm") %>
participants: []
tags: [会议]
type: meeting
project:
---
# 📋 <% await tp.system.prompt("会议名称") %>
**时间**:<% tp.date.now("YYYY-MM-DD HH:mm") %>
**参会人**:<% await tp.system.prompt("参会人,多人以逗号分隔") %>
**记录人**:<% await tp.system.prompt("记录人") %>
---
## 📋 议程
1.
## 💬 讨论
## ✅ 决策
1.
## 📌 待办
| 任务 | 负责人 | 截止日期 | 状态 |
|------|--------|----------|------|
| | | | [ ] |
## ❓ 待解决问题
---
高级用法:动态文件夹创建
javascript
<%*
// 每天首次打开时创建日志
const today = tp.date.now("YYYY-MM-DD");
const dailyPath = `1_日志/每日/${today}.md`;
if (!app.vault.getAbstractFileByPath(dailyPath)) {
await app.vault.create(dailyPath, `---
title: ${today}
date: ${today}
tags: [日志, 每日]
created: ${tp.date.now("YYYY-MM-DD HH:mm")}
---
# ${today}
## 🎯 今日重点
## 📝 记录
`);
}
%>
高级用法:用户交互
javascript
<%*
// 让用户选择项目
const projects = ["项目A", "项目B", "项目C"];
const selected = await tp.system.suggester(projects, projects);
%>
项目:<% selected %>
<%*
// 让用户输入多行文本
const notes = await tp.system.prompt("输入笔记内容", "", true);
%>
<% notes %>
2.2 Dataview 数据查询
为什么需要:普通搜索只能搜标题,Dataview 可以搜 frontmatter、标签、日期范围。
基础语法
┌────────────────────────────────────────────────────────────────────────────┐
│ Dataview 查询原理 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Obsidian 笔记(Markdown + Frontmatter) │
│ │ │
│ ▼ │
│ Dataview 解析 frontmatter │
│ │ │
│ ▼ │
│ 构建虚拟数据库(内存) │
│ │ │
│ ▼ │
│ SQL-like 查询 │
│ │ │
│ ▼ │
│ 渲染结果(TABLE / LIST / TASK) │
│ │
└────────────────────────────────────────────────────────────────────────────┘
基础查询:
markdown
```dataview
TABLE file.ctime, tags
FROM ""
WHERE file.folder = "工作"
SORT file.ctime DESC
LIMIT 10
```
查询类型详解
| 类型 | 语法 | 效果 |
|---|---|---|
| TABLE | TABLE col1, col2 |
表格显示,可排序列 |
| LIST | LIST title |
简单列表 |
| TASK | TASK WHERE !completed |
只显示任务 |
TABLE 示例:
markdown
```dataview
TABLE
title as 标题,
date as 日期,
tags as 标签
FROM "2_项目"
WHERE status = "进行中"
SORT date DESC
```
LIST 示例:
markdown
```dataview
LIST title
FROM "3_知识"
WHERE contains(tags, "方法论")
```
TASK 示例:
markdown
```dataview
TASK
FROM ""
WHERE !completed AND date <= 2026-04-26
SORT date
```
常用字段速查
| 字段 | 说明 | 示例 |
|---|---|---|
file.name |
文件名 | Python-装饰器 |
file.path |
完整路径 | 3_知识/Python-装饰器.md |
file.folder |
文件夹 | 3_知识/ |
file.ctime |
创建时间 | 2026-04-26 |
file.mtime |
修改时间 | 2026-04-26 |
file.cday |
创建日期 | 2026-04-26 |
file.tags |
标签数组 | ["工作", "Python"] |
file.lists |
任务列表 | - |
常用查询模板
仪表盘(Dashboard):
markdown
# 📊 工作台
## 📅 今日任务
```dataview
TASK
FROM ""
WHERE date = 2026-04-26 AND !completed
```
## 📝 近期笔记
```dataview
TABLE file.ctime as 创建时间
FROM "2_项目"
SORT file.ctime DESC
LIMIT 5
```
## ⚠️ 进行中的高优先级
```dataview
TABLE status, importance
FROM ""
WHERE status = "进行中" AND importance = "high"
```
## 📌 本周待办
```dataview
TASK
WHERE file.ctime >= 2026-04-20 AND !completed
LIMIT 10
```
我的索引页面:
markdown
# 📚 知识索引
## 📅 今日
```dataview
TABLE file.ctime as 创建时间
WHERE file.cday = date(today)
LIMIT 10
```
## 📊 本周新增
```dataview
TABLE file.ctime as 创建时间, tags
WHERE file.ctime >= date(today) - dur(7 days)
SORT file.ctime DESC
LIMIT 20
```
## ⚠️ 进行中项目
```dataview
TABLE status, importance, modified as 最后更新
WHERE status = "进行中"
SORT importance DESC
```
## 📈 统计数据
```dataview
TABLE WITHOUT ID
length(filter(row.file.tasks, (t) => !t.completed)) AS 待完成,
length(filter(row.file.tasks, (t) => t.completed)) AS 已完成
FROM ""
FLATTEN file.tasks AS row
WHERE file.folder = this.file.folder
GROUP BY file.link AS 文件
```
2.3 QuickAdd 快速创建
为什么需要:快捷键创建笔记,不用鼠标操作。
配置步骤
- 安装 QuickAdd 插件
- 创建捕捉命令(Capture)
- 设置快捷键
命令类型
| 类型 | 说明 | 触发方式 |
|---|---|---|
| Template | 用模板创建笔记 | 快捷键 |
| Macro | 执行宏命令 | 快捷键 |
| Capture | 捕获内容到指定位置 | 快捷键 |
我的配置
| 命令 | 快捷键 | 模板 |
|---|---|---|
| 新每日日志 | Cmd+Shift+D |
daily.md |
| 新临时想法 | Cmd+Shift+N |
inbox.md |
| 新项目笔记 | Cmd+Shift+P |
project.md |
| 新会议记录 | Cmd+Shift+M |
meeting.md |
QuickAdd 模板
markdown
---
title: "<% await tp.system.prompt("标题") %>"
date: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags: [临时, 收集]
type: inbox
---
# <% await tp.system.prompt("标题") %>
## 内容
<% await tp.system.prompt("内容") %>
## 来源
- URL: <% await tp.system.prompt("URL(可选)") %>
## 待处理
- [ ]
---
*由 QuickAdd 收集于 <% tp.date.now("YYYY-MM-DD HH:mm") %>*
markdown
---
title: "<% await tp.system.prompt("会议名称") %>"
date: <% tp.date.now("YYYY-MM-DD") %>
time: <% tp.date.now("HH:mm") %>
participants: []
tags: [会议]
type: meeting
---
# 📋 <% await tp.system.prompt("会议名称") %>
**时间**:<% tp.date.now("YYYY-MM-DD HH:mm") %>
**参会人**:
**记录人**:
---
## 📋 议程
1.
## 💬 讨论
## ✅ 决策
1.
## 📌 待办
- [ ]
## ❓ 待解决问题
---
2.4 Local REST API
为什么需要:让 Hermes Agent 可以操作 Obsidian。
安装
- 社区插件市场搜索 "obsidian-local-rest-api"
- 安装并启用
- 配置端口(默认 1973)
API 端点
bash
# 获取所有笔记列表
curl http://localhost:1973/api/notes
# 创建笔记
curl -X POST http://localhost:1973/api/notes \
-H "Content-Type: application/json" \
-d '{
"path": "test.md",
"content": "# Test\n\nHello world"
}'
# 读取笔记
curl http://localhost:1973/api/notes/test.md
# 更新笔记
curl -X PUT http://localhost:1973/api/notes/test.md \
-H "Content-Type: application/json" \
-d '{
"content": "# Updated\n\nNew content"
}'
# 删除笔记
curl -X DELETE http://localhost:1973/api/notes/test.md
# 搜索笔记
curl "http://localhost:1973/api/search?query=test"
# 获取文件夹列表
curl http://localhost:1973/api/folders
3. 推荐插件
3.1 Minimal Theme
为什么需要:默认主题太花哨,分散注意力。
我的配置:
json
{
"Minimal Theme": {
"font": "system-ui",
"font size": 16,
"line height": 1.5,
"hide app ribbon": true,
"collapse sidebars": false,
"status bar": true,
"focus mode": false
}
}
3.2 Style Settings
配合 Minimal Theme 微调细节。
常用配置:
json
{
"Style Settings": {
" Accent color": "#7c3aed",
"Border radius": "4px",
"Text spacing": "0.5em"
}
}
3.3 Auto Link Title
为什么需要 :手动输入 [[链接]] 时,自动补全标题。
3.4 Tag Wrangler
为什么需要:批量管理标签,查看标签统计。
功能:
- 重命名标签(批量更新所有笔记)
- 查看标签使用频率
- 折叠/展开标签
3.5 Better Word Count
为什么需要:在状态栏显示字数统计。
功能:
- 字数统计
- 字符数
- 阅读时间估算
- 选中区域字数
3.6 Git
为什么需要:笔记版本控制。
使用场景:
- 多人协作
- 需要版本历史
- 备份笔记变更
bash
# .gitignore 配置
"""
.obsidian/
# 保留插件配置
!.obsidian/community-plugins.json
!.obsidian/plugins.json
resources/
*.pdf
*.mp4
"""
4. 插件性能优化
4.1 插件数量控制
| 场景 | 推荐数量 | 说明 |
|---|---|---|
| 基础使用 | 5-8 个 | 只装最核心的 |
| 进阶使用 | 10-15 个 | 常用的效率插件 |
| 重度使用 | 15-20 个 | 需要的功能插件 |
⚠️ 超过 20 个插件会明显卡顿
4.2 资源密集型插件
| 插件 | 问题 | 建议 |
|---|---|---|
| Dataview | 频繁扫描全文 | 设置缓存 |
| Graph Analysis | 大图谱计算 | 控制笔记数量 |
| Various Complements | 自动补全耗 CPU | 关闭不需要的补全 |
| Style Settings | 频繁重绘 | 避免过度自定义 |
4.3 我的插件列表
核心插件(5个):
├── Templater # 模板系统
├── Dataview # 数据查询
├── QuickAdd # 快速创建
└── Local REST API # Hermes 集成
界面插件(3个):
├── Minimal Theme # 简洁主题
└── Style Settings # 样式微调
效率插件(5个):
├── Auto Link Title # 自动补全标题
├── Tag Wrangler # 标签管理
├── Better Word Count # 字数统计
└── Git # 版本控制
可选插件(按需启用):
├── Calendar # 日历视图
├── Projects # 项目管理
└── Templater (已列为核心)
5. 完整配置示例
5.1 模板文件夹结构
templates/
├── daily.md # 每日日志
├── project.md # 项目笔记
├── meeting.md # 会议记录
├── inbox.md # 收集箱
├── paper.md # 论文阅读
├── weekly-report.md # 周报
└── startup.md # 启动模板
5.2 仪表盘模板
markdown
---
title: Dashboard
tags: [系统, 索引]
created: 2026-01-01
---
# 📊 工作台 Dashboard
> 最后更新: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---
## 📅 今日概览
### 日期
<% tp.date.now("YYYY年MM月DD日 dddd") %>
### 天气
> 待填写
### 心情
> 待填写
---
## ⚠️ 紧急事项
```dataview
TASK
WHERE contains(tags, "紧急") AND !completed
LIMIT 5
📅 今日任务
dataview
TASK
WHERE file.cday = date(today) AND !completed
📊 本周进度
项目进度
dataview
TABLE
title as 项目,
status as 状态,
importance as 优先级
FROM "2_项目"
WHERE status = "进行中"
SORT importance DESC
LIMIT 10
本周新增笔记
dataview
TABLE
file.link as 笔记,
file.ctime as 创建时间
WHERE file.ctime >= date(today) - dur(7 days)
SORT file.ctime DESC
LIMIT 10
📚 快速链接
-
\[0_临时/inbox\|收集箱\]
-
\[1_日志/每日/\<% tp.date.now("YYYY-MM-DD") %\>\|今日日志\]
-
\[2_项目\|项目\]
-
\[3_知识\|知识库\]
由 Templater 自动更新于 <% tp.date.now("YYYY-MM-DD HH:mm") %>
### 5.3 每日日志模板
```markdown
---
title: <% tp.date.now("YYYY-MM-DD") %>
date: <% tp.date.now("YYYY-MM-DD") %>
day: <% tp.date.now("dddd") %>
tags: [日志, 每日]
weather:
mood:
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---
# <% tp.date.now("YYYY-MM-DD") %> <% tp.date.now("dddd") %>
## 🎯 今日重点
1.
## ⏰ 时间日志
### 上午 (9:00-12:00)
- 9:00
- 10:00
- 11:00
### 下午 (14:00-18:00)
- 14:00
- 15:00
- 16:00
- 17:00
### 晚上 (19:00-22:00)
- 19:00
- 20:00
- 21:00
---
## 📝 今日记录
### 工作会议
-
### 学习内容
-
### 代码/项目
-
### 随手记
-
---
## 💡 灵感/想法
-
---
## 📌 明日计划
- [ ]
---
## 📊 复盘
### 完成
- ✅
### 未完成
- ❌
### 原因分析
-
### 改进措施
-
---
## 📎 今日数据
| 指标 | 数值 |
|------|------|
| 工作时长 | 小时 |
| 完成任务 | 个 |
| 新增笔记 | 篇 |
| 深度工作 | 小时 |
---
*由 Templater 自动创建*
5.4 项目模板
markdown
---
title: <% await tp.system.prompt("项目名称") %>
date: <% tp.date.now("YYYY-MM-DD") %>
status: 进行中
tags: [项目]
project_type: <% await tp.system.suggester(["个人", "工作", "开源"], ["个人", "工作", "开源"]) %>
importance: <% await tp.system.suggester(["高", "中", "低"], ["high", "medium", "low"]) %>
start_date: <% tp.date.now("YYYY-MM-DD") %>
end_date:
members: []
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---
# <% await tp.system.prompt("项目名称") %>
> 项目状态:<% await tp.system.suggester(["🟢 进行中", "🟡 暂停", "🔴 已终止", "✅ 已完成"], ["进行中", "暂停", "已终止", "已完成"]) %>
## 📋 项目概述
**项目类型**:<% await tp.system.prompt("简要描述项目类型") %>
**核心价值**:
>
**关键成果**:
1.
---
## 🎯 目标
### 主要目标
1. **目标 1**:
- 衡量标准:
- 截止日期:
2. **目标 2**:
- 衡量标准:
- 截止日期:
### 次要目标
- [ ]
---
## 📅 里程碑
```dataview
TASK
FROM ""
WHERE project = "<% await tp.system.prompt("项目名称") %>"
SORT date
| 阶段 | 目标 | 截止日期 | 状态 |
|---|---|---|---|
| 启动 | 完成项目立项 | [ ] | |
| 规划 | 完成详细设计 | [ ] | |
| 执行 | 完成核心功能 | [ ] | |
| 收尾 | 完成测试上线 | [ ] |
👥 团队成员
| 角色 | 姓名 | 职责 |
|---|---|---|
| 负责人 | ||
| 成员 | ||
| 成员 |
📊 进度
当前阶段
完成度
- 20%
- 40%
- 60%
- 80%
- 100%
关键指标
| 指标 | 目标 | 当前 | 进度 |
|---|---|---|---|
📝 会议记录
-
\[会议记录/\<% tp.date.now("YYYY-MM-DD") %\>\]
💡 经验教训
做得好的
需要改进
📎 资源
文档
链接
附件
📌 后续计划
下一步
风险识别
| 风险 | 影响 | 概率 | 应对措施 |
|---|---|---|---|
---
## 6. Local REST API 高级用法
### 6.1 API 认证配置
```json
// 在 Obsidian 设置中启用 Token 认证
{
"api.token": "your-secure-token-here",
"api.enabled": true
}
6.2 Hermes Agent 集成
yaml
# hermes 配置
obsidian:
enabled: true
api_url: "http://localhost:1973"
api_token: "your-token"
# 自动同步
sync:
enabled: true
interval: 30 # 秒
# 默认文件夹
folders:
inbox: "0_临时"
daily: "1_日志/每日"
projects: "2_项目"
knowledge: "3_知识"
6.3 Python 调用示例
python
import requests
import json
class ObsidianAPI:
"""Obsidian Local REST API 封装"""
def __init__(self, base_url="http://localhost:1973", token=None):
self.base_url = base_url
self.headers = {"Content-Type": "application/json"}
if token:
self.headers["Authorization"] = f"Bearer {token}"
def get_notes(self):
"""获取所有笔记列表"""
response = requests.get(
f"{self.base_url}/api/notes",
headers=self.headers
)
return response.json()
def create_note(self, path: str, content: str) -> dict:
"""创建或更新笔记"""
response = requests.post(
f"{self.base_url}/api/notes",
headers=self.headers,
json={"path": path, "content": content}
)
return response.json()
def read_note(self, path: str) -> str:
"""读取笔记内容"""
response = requests.get(
f"{self.base_url}/api/notes/{path}",
headers=self.headers
)
return response.text
def delete_note(self, path: str) -> dict:
"""删除笔记"""
response = requests.delete(
f"{self.base_url}/api/notes/{path}",
headers=self.headers
)
return response.json()
def search(self, query: str) -> list:
"""搜索笔记"""
response = requests.get(
f"{self.base_url}/api/search",
params={"query": query},
headers=self.headers
)
return response.json()
# 使用示例
if __name__ == "__main__":
obsidian = ObsidianAPI()
# 创建笔记
obsidian.create_note(
path="测试笔记.md",
content="""---
title: 测试笔记
date: 2026-04-26
tags: [测试]
---
# 测试笔记
这是一个测试。
"""
)
# 搜索笔记
results = obsidian.search("测试")
print(f"找到 {len(results)} 条结果")
# 读取笔记
content = obsidian.read_note("测试笔记.md")
print(content)
7. 插件安全建议
┌────────────────────────────────────────────────────────────────────────────┐
│ 插件安全 Checklist │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 只安装社区验证插件(经过安全审查) │
│ ✅ 定期更新插件(修复安全漏洞) │
│ ✅ 备份插件列表(方便迁移) │
│ ✅ 谨慎授予插件权限(最小权限原则) │
│ ❌ 不要安装来源不明的插件 │
│ ❌ 不要在插件中输入敏感信息 │
│ │
└────────────────────────────────────────────────────────────────────────────┘
bash
# 备份插件列表
ls .obsidian/plugins/ > plugins_backup.txt
# 备份插件配置
cp -r .obsidian/plugins/ ~/backup/plugins/
# 恢复插件配置
cp -r ~/backup/plugins/* .obsidian/plugins/
8. 常见问题 FAQ
Q1: 插件装了十几个,冲突得一塌糊涂?
markdown
# 解决方案:
1. 先禁用所有插件
2. 逐个启用,每次启用一个
3. 测试是否正常
4. 找到冲突的插件,保留一个
# 推荐的最小插件集:
- Templater
- Dataview
- QuickAdd
- Local REST API
Q2: Dataview 查询很慢?
yaml
# 优化方案:
1. 设置 Dataview 缓存
# 设置 → 插件选项 → Dataview → 启用缓存
2. 限制查询范围
```dataview
TABLE title
FROM "2_项目" # 只查询特定文件夹
WHERE status = "进行中"
- 减少查询频率
设置 → 插件选项 → Dataview → 索引间隔调大
**Q3: 如何迁移插件配置?**
```bash
# 方案一:备份整个 .obsidian 目录
cp -r .obsidian ~/backup/.obsidian-$(date +%Y%m%d)
# 方案二:只备份插件配置
cp .obsidian/plugins.json ~/backup/plugins.json
cp .obsidian/community-plugins.json ~/backup/community-plugins.json
# 方案三:用 Git 同步
cd your-vault
git init
git add .obsidian/plugins/
git commit -m "Update plugins config"
Q4: Templater 模板不生效?
markdown
# 检查清单:
1. 模板文件夹是否设置正确?
设置 → 插件选项 → Templater → 模板文件夹
2. 模板文件是否在模板文件夹内?
3. 文件是否用 Templater 创建的?
# 必须用 Templater 的 "新建文件" 功能
# 普通方式创建的文件不会触发模板
4. 语法是否正确?
# <%* %> 包裹 JavaScript
# <% %> 包裹表达式
Q5: QuickAdd 快捷键冲突?
markdown
# 解决方案:
1. 查看冲突
# 设置 → 快捷键 → 搜索 "QuickAdd"
2. 修改快捷键
# 选择冲突的命令 → 设置新的快捷键
3. 推荐快捷键
- Cmd+Shift+D:每日日志
- Cmd+Shift+N:新建笔记
- Cmd+Shift+P:项目笔记
- Cmd+Shift+M:会议记录
Q6: Local REST API 无法连接?
markdown
# 排查步骤:
1. 确认插件已启用
# 设置 → 第三方插件 → Local REST API
2. 确认端口配置
# 默认是 1973,可在插件设置中修改
3. 检查防火墙
# macOS:系统偏好设置 → 安全性与隐私 → 防火墙
4. 测试连接
curl http://localhost:1973/api/notes
📚 扩展阅读
下一篇预告 :第六篇 - 分层记忆系统
系列目录 :《Hermes Agent + Obsidian 打造第二大脑》总目录