
每天刷文章、看视频、收藏资料一天下来似乎很充实但到了月底回头一看真正能调用的知识少得可怜。这不是个例而是大多数人在信息输入阶段都会踩的坑。本文要分享的是一套用 AI 配合 Obsidian 搭建的智能学习产出工作流核心思路是把 Obsidian 当作本地知识库和操作界面把 AI 当作加工引擎让每条收集到的资料都能自动完成摘要、提炼、延伸和归档最终变成每天可执行的行动。1. 为什么要用 AI Obsidian 搭学习产出工作流1.1 学习输入与产出之间的断裂大多数人记笔记的方式可以概括为“复制粘贴”三个阶段看到一篇好文章复制链接保存到收藏夹复制标题心情好的时候再粘贴到笔记软件里。但收藏不等于学会复制不等于理解。真正的问题在于输入环节和产出环节之间缺少了一个“加工”的步骤。什么叫做加工就是读完一段内容之后能够用自己的话概括核心观点能够提炼出和自己工作相关的行动项能够提出进一步的问题并把这些内容放到一个未来能找到的地方。没有这个加工步骤笔记就只是信息堆而不是知识资产。长期下来知识库越堆越大能调用的却越来越少这就是很多人每年买课、每年记笔记、却没有看到明显成长的根本原因。1.2 AI 与 Obsidian 组合能补齐什么Obsidian 是一个基于本地 Markdown 文件的笔记工具它没有把笔记锁在某个数据库里所有内容都是纯文本方便检索、备份和程序化处理。这是它和其他笔记软件最大的不同笔记天生就是“可编程”的你完全可以用脚本去读写每一篇笔记。而 AI 大模型擅长的事情恰恰是阅读长文本、概括要点、提取结构、生成追问。这两者结合起来就正好补上了加工环节的缺口。AI 负责把一篇杂乱的文章变成结构化的摘要、知识点和行动建议Obsidian 负责把这些结果保存、关联和沉淀下来。换句话说AI 是加工引擎Obsidian 是知识仓库两者之间用 Markdown 文件作为唯一的数据交换格式既简单又稳定。1.3 什么情况下值得建这套工作流如果你只是偶尔记录几条灵感那这套工作流确实有点重直接用系统自带备忘录就够了。但如果你每周会阅读大量公众号文章、技术文档、课程笔记或者经常需要把学习内容转化为周报、分享稿、项目方案那么这套工作流的价值就会非常明显。它适合的人群大致有三类第一类是需要持续输入新知识的内容创作者比如技术博主、产品经理、运营第二类是经常要输出方案或总结的职场人第三类是想要把读书、听课、刷文章变成系统知识体系的学习者。判断标准其实很简单如果你每天花在“收集资料”上的时间超过 30 分钟就已经值得把这套自动化工作流建起来了。2. 环境准备与工具选型2.1 基础环境清单这套工作流需要的环境并不复杂核心只有三样东西。Obsidian 客户端Windows、macOS、Linux 都有官方客户端直接到官网下载即可。安装过程不需要额外配置创建一个 Vault知识库目录就能开始使用。如果你之前已经建过 Vault也可以把后续的目录结构直接加进去。Python 3.9 及以上用来写 AI 加工脚本。Obsidian 本身不依赖 Python但通过脚本读写 Markdown 文件、调用大模型接口Python 是成本最低的方案。Windows 用户在安装 Python 时记得勾选“Add Python to PATH”否则命令行可能找不到 python 命令。一个大模型接口可以是 OpenAI 兼容接口也可以是本地模型运行时。具体选型方案见下一小节。版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。Obsidian 的插件版本更新非常频繁社区插件的安装路径和名称可能会随版本变化遇到不一致时以你当前版本的实际界面为准。2.2 AI 服务接入的三种方式第一种是 OpenAI 兼容接口。现在很多大模型服务商都提供与 OpenAI Chat Completions 格式一致的接口只需修改 base_url 和 model 名称就能切换。这种方式的优点是接入简单、效果稳定缺点是需要网络请求并且按 token 计费。对于每天几十篇笔记的加工量成本通常非常低但具体费用要根据实际使用量估算。第二种是本地模型。用 Ollama 这类工具可以在本地运行 Qwen、Llama 等开源小模型。优点是数据不出本机、免费、离线可用缺点是效果和响应速度取决于机器配置一般消费级电脑跑中小尺寸模型可以接受但生成质量会比大模型服务差一些。如果你对数据隐私要求很高可以考虑这种方式。第三种是工作流平台。像 Dify、Coze 这类平台可以把 AI 能力封装成可视化工作流再对外提供 API。适合需要多步判断、多工具调用的场景比如先摘要再分类再生成行动项。缺点是上手成本略高适合有额外自动化需求的同学。本文的示例脚本走第一种方式但代码结构上只依赖标准的 HTTP 接口改成其他两种方式也不复杂。2.3 插件清单与作用为了不让工作流变得复杂我们只选择四个插件它们分别负责模板、捕获、查询和剪藏。插件安装位置作用TemplaterObsidian 社区插件市场模板引擎生成日记、周报和笔记模板QuickAddObsidian 社区插件市场快捷捕获入口把任意内容快速放入 InboxDataviewObsidian 社区插件市场按 Frontmatter 元数据查询和聚合笔记Web Clipper浏览器插件商店一键把网页内容剪藏到指定目录这四个插件都是 Obsidian 生态里非常成熟的老牌插件使用范围广、资料多。安装方法是在 Obsidian 的“设置”中找到“第三方插件”关闭“安全模式”后搜索插件名即可。如果下载插件速度较慢可以尝试使用镜像源或者去 GitHub Releases 手动下载插件压缩包再解压放到 Vault 目录下的.obsidian/plugins文件夹中。3. 工作流核心原理拆解3.1 三层架构收集、加工、产出在动手配置之前先把工作流的整体架构讲清楚。这套体系可以拆成三层。第一层是收集层。所有外部输入都先进入一个统一的收件箱目录 Inbox不做任何整理。这样做的目的是降低记录成本你不需要在记录的瞬间思考“这条笔记该放哪里”只需要确保它进入 Inbox 即可。记在 Inbox 里的内容可以是一段摘录、一个灵感、一个会议要点甚至可以只是一条链接。第二层是加工层。脚本定时扫描 Inbox对未处理的笔记调用 AI 接口生成核心观点、可执行知识点、延伸思考和建议归档分类并把结果追加到原笔记末尾同时打上已处理标记。这一步替代了过去“人工读一遍、概括一遍、归类一遍”的工作。第三层是产出层。经过加工后笔记不再只是原文摘录而是包含摘要和行动建议的知识卡片。你可以通过 Dataview 查询本周处理了哪些笔记也可以直接把 AI 生成的行动项复制到每日计划里。所谓学习产出指的就是这些能落地的行动项和以后能随时调用的知识卡片。收集层Inbox - 加工层AI 脚本 大模型接口 - 产出层知识卡片 / 行动项3.2 用 YAML Frontmatter 统一笔记元数据要让脚本和 Dataview 能自动识别笔记状态必须在每篇笔记的头部写入统一的元数据也就是 YAML Frontmatter。它是一段放在 Markdown 文件最顶部的键值对左右两侧用三个短横线包裹。--- 日期: 2025-01-15 来源: 公众号文章 状态: 待整理 tags: [inbox, 学习方法] ---把元数据设计成统一结构最大的好处是机器可读。当脚本读到“状态: 待整理”时就知道这是一篇尚未加工的笔记处理完成后再把状态改成“已加工”Dataview 查询时就能快速过滤。这里有一个容易忽略的细节YAML Frontmatter 必须放在文件的第一行前面不能有任何空行或空格否则 Obsidian 无法正确解析。3.3 AI 的角色边界初稿交给模型终稿留给自己很多人在使用 AI 辅助学习时容易走入两个极端要么完全不相信 AI 生成的内容要么全盘接受 AI 的输出。正确的做法是明确人机协作的边界。AI 适合做的是结构化加工概括、提炼、生成延伸问题、判断分类。这些任务对错误容忍度相对较高即使某个表述不准确你也能在阅读时快速发现。AI 不适合做的是价值判断和事实核验比如“这个观点对不对”“这个数据是否真实”这些问题必须由你来判断。所以在设计工作流时我建议把 AI 的输出定位为“第一版草稿”而不是“最终答案”。脚本生成的摘要和行动项应该以独立区块追加在原文后面不覆盖原文也不自动移动到最终目录。等你人工审核过后再决定是保留、修改还是删除。4. 完整实战从零搭一套可运行的智能学习产出工作流下面进入实操环节。整个流程分为五个步骤创建目录结构、编写模板、编写脚本、运行验证、配置自动执行。4.1 创建 Vault 目录结构在你的 Obsidian Vault 根目录下创建以下目录结构。命名方式参考了 PARA 方法和 Inbox 收件箱思想既简洁又容易扩展。MyVault/ ├── 00-Inbox/ # 所有外部输入先进这里 ├── 10-Sources/ # 文章、视频、书籍等原始资料 ├── 20-Areas/ # 长期关注的领域 ├── 30-Projects/ # 有明确目标和截止时间的项目 ├── 40-Archive/ # 归档区 ├── 50-Templates/ # 模板文件 └── scripts/ # Python 脚本和日志目录建好之后在“设置”里把 Obsidian 的默认新笔记位置设置为00-Inbox这样通过 Obsidian 新建的笔记也会自动进入收件箱不会散落在根目录。4.2 编写日记模板和快捷捕获入口在50-Templates目录下新建一个日记模板.md内容如下。这个模板用 Templater 语法自动填充日期、星期、目标等字段。--- 日期: {{date:YYYY-MM-DD}} 星期: {{date:dddd}} 今日目标: 状态: 待整理 tags: [daily, inbox] --- ## 今日行动清单 - [ ] ## 今日收集 - 阅读摘录 - 灵感碎片 - 会议要点 ## 今日思考 ## 今日产出然后在 Obsidian 的命令面板中运行 Templater 的“Create new note from template”选择这个模板就能生成当天的日记。如果你希望每天自动生成日记可以配合 Periodic Notes 插件这里先不做扩展。接下来配置快捷捕获入口。打开 QuickAdd 设置新建一个 Capture 动作名称可以叫“捕获”。在 Capture 格式中填入手写模板并把新文件位置设置到00-Inbox目录。--- 来源: {{VALUE}} 日期: {{DATE:YYYY-MM-DD}} 状态: 待整理 tags: [inbox, captured] --- # {{VALUE}}QuickAdd 的 Capture 模式支持两个占位符{{VALUE}}表示你输入的内容{{DATE:YYYY-MM-DD}}表示当前日期。配置完成后给这个动作绑定一个快捷键比如 CtrlShiftX。之后无论你在哪里看到值得保存的内容按一下快捷键输入一句话Obsidian 就会自动把这条内容写入 Inbox。4.3 编写 AI 加工脚本这是整套工作流的核心。脚本的作用是扫描00-Inbox下的 Markdown 文件对未处理的笔记调用大模型接口生成结构化分析结果并追加到笔记末尾。下面是一个完整可运行的 Python 脚本请保存到scripts/ai_processor.py。# 文件路径MyVault/scripts/ai_processor.py AI 笔记加工脚本 功能扫描 00-Inbox 目录下的未处理笔记调用大模型 API 生成摘要、行动项和延伸问题并回写到原笔记末尾。 用法python3 scripts/ai_processor.py import os import sys import datetime from pathlib import Path import requests # ---- 配置区 ---- VAULT_ROOT Path.home() / Documents / MyVault INBOX_DIR VAULT_ROOT / 00-Inbox PROCESSED_TAG ai_processed API_KEY os.environ.get(LLM_API_KEY, ) API_URL os.environ.get(LLM_API_URL, https://api.openai.com/v1/chat/completions) MODEL os.environ.get(LLM_MODEL, gpt-4o-mini) MAX_NOTE_LENGTH 6000 # 截断长度防止上下文超限 def call_llm(user_prompt: str, system_prompt: str 你是一名严谨的学习教练擅长把笔记提炼成可执行的知识。) - str: 调用 OpenAI 兼容的 Chat Completions 接口 if not API_KEY: raise RuntimeError(未设置 LLM_API_KEY 环境变量) headers { Authorization: fBearer {API_KEY}, Content-Type: application/json, } payload { model: MODEL, messages: [ {role: system, content: system_prompt}, {role: user, content: user_prompt}, ], temperature: 0.3, } resp requests.post(API_URL, headersheaders, jsonpayload, timeout120) resp.raise_for_status() data resp.json() return data[choices][0][message][content].strip() def build_prompt(note_content: str) - str: 构造处理一篇笔记的提示词 return f请阅读下面这篇学习笔记完成以下任务 1. 用三句话概括核心观点 2. 提炼 3 个可以立即实践的知识点 3. 提出 2 个值得进一步思考的问题 4. 判断这篇笔记应该归档到哪个分类10-Sources / 20-Areas / 30-Projects / 40-Archive。 请用 Markdown 格式输出结构如下 ## 核心观点 ## 可执行知识点 ## 延伸思考 ## 建议归档 原文 {note_content} def process_note(file_path: Path) - bool: 处理单篇笔记返回是否处理成功 content file_path.read_text(encodingutf-8) # 跳过已经处理过的文件避免重复调用 API if PROCESSED_TAG in content: print(f[跳过] {file_path.name} 已处理过) return False print(f[处理] {file_path.name} ...) prompt build_prompt(content[:MAX_NOTE_LENGTH]) try: result call_llm(prompt) except Exception as exc: print(f[失败] {file_path.name}: {exc}) return False now datetime.datetime.now().strftime(%Y-%m-%d %H:%M) block f --- ## AI 分析 {result} 生成时间{now} 生成方式ai_processor.py {PROCESSED_TAG}: true # 追加到文件末尾保留原文 file_path.write_text(content.rstrip() block, encodingutf-8) print(f[完成] {file_path.name}) return True def main(): if not INBOX_DIR.exists(): print(f目录不存在: {INBOX_DIR}) sys.exit(1) notes sorted(INBOX_DIR.glob(*.md)) if not notes: print(00-Inbox 目录下没有 Markdown 文件) return success_count 0 for note in notes: if process_note(note): success_count 1 print(f处理完成成功 {success_count} 篇共扫描 {len(notes)} 篇) if __name__ __main__: main()脚本主要包含四个部分。配置区定义了 Vault 路径、Inbox 目录、API 地址和模型名称。这里的 API Key 通过环境变量读取而不是硬编码在脚本里目的是避免密钥泄露到笔记库或版本仓库中。API_URL默认指向 OpenAI 兼容地址如果你使用其他服务商只需要改成对应的接口地址即可。call_llm函数封装了请求逻辑。它把系统提示词和用户提示词一起发送给模型temperature设置为 0.3让输出尽量稳定、贴近原文内容少一些发散。超时时间设置为 120