读书笔记小工具:AI 自动提炼要点 + 生成知识卡片

项目背景

很多人读书喜欢做笔记,但整理起来费时费力。手写一段话,要手动提炼重点,排版成好看的格式,还要归档。

我做了个小工具,把原始笔记丢进去,AI 自动帮你做三件事:提炼核心观点、总结关键金句、生成可复用的 Markdown 知识卡片。跑在 VPS 上,零人工干预。

技术选型

  • Python 3.10+:主语言
  • OpenAI / 兼容 API:调用 LLM 做文本分析(可用任何兼容 OpenAI 格式的 API,比如通义千问、智谱)
  • pathlib + glob:文件读取
  • rich:终端美化输出

全程不需要框架,一个脚本搞定。

实现步骤

第一步:安装依赖

pip install openai rich

第二步:创建配置

创建 .env 文件,填上你的 API Key 和基础 URL:

OPENAI_API_KEY=sk-xxxxxxxx
OPENAI_BASE_URL=https://api.deepseek.com/v1

安装 python-dotenv 来读取配置:

pip install python-dotenv

第三步:写核心代码

创建 note_card_generator.py

import os
import glob
from pathlib import Path
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL"),
)

PROMPT_TEMPLATE = """你是一个知识整理助手。请对以下读书笔记进行处理:

1. 提炼 3-5 个核心观点,每个观点不超过 30 字
2. 找出 1-2 句最有价值的原文金句
3. 给出一个一句话总结
4. 打上 3 个以内的标签

原始笔记:
{note}

请按以下 Markdown 格式输出:

# 📌 {book_name}

## 核心观点
- 观点一
- 观点二
- 观点三

## 金句
> 原文金句

## 一句话总结
一句话总结

## 标签
#标签1 #标签2

书名从笔记内容中自行判断。如果无法判断书名,用"未命名"代替。
"""


def generate_card(text: str, book_name: str = None) -> str:
    """调用 LLM 生成知识卡片"""
    if book_name is None:
        book_name = "未命名"

    prompt = PROMPT_TEMPLATE.format(note=text, book_name=book_name)

    response = client.chat.completions.create(
        model=os.getenv("MODEL_NAME", "gpt-4o-mini"),
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3,
    )

    return response.choices[0].message.content.strip()


def save_card(card_text: str, book_name: str, output_dir: str = "cards"):
    """保存知识卡片到文件"""
    Path(output_dir).mkdir(exist_ok=True)

    safe_name = "".join(c if c.isalnum() else "_" for c in book_name)
    filename = f"{output_dir}/{safe_name}.md"

    with open(filename, "w", encoding="utf-8") as f:
        f.write(card_text)

    return filename


def batch_process(notes_dir: str = "notes", output_dir: str = "cards"):
    """批量处理目录下的所有笔记文件"""
    note_files = glob.glob(f"{notes_dir}/*.md") + glob.glob(f"{notes_dir}/*.txt")

    if not note_files:
        print(f"在 {notes_dir} 目录下没有找到笔记文件")
        return

    for filepath in note_files:
        with open(filepath, "r", encoding="utf-8") as f:
            content = f.read().strip()

        if not content:
            continue

        book_name = Path(filepath).stem
        print(f"📖 处理: {book_name}...")

        card = generate_card(content, book_name)
        saved_path = save_card(card, book_name, output_dir)

        print(f"✅ 卡片已保存: {saved_path}\n")


if __name__ == "__main__":
    batch_process()

第四步:准备笔记文件

notes/ 目录下放你的读书笔记,文件名即书名:

mkdir -p notes

创建 notes/设计心理学.md

唐纳德在《设计心理学》中提到,好的设计应该让用户无需说明书就能知道怎么用。
他把"可见性"列为第一个原则。按钮应该长得就像按钮,开关应该让人一眼看出是开还是关。

书中举了一个经典的门锁例子:门把手的形状暗示了你应该拉还是推,
如果门把手是拉杆样式,但实际需要推才能打开,这就是设计的失败。

唐纳德还提出了"反馈"的重要性。每一步操作都应该有即时反馈,
让用户知道自己做对了还是做错了。比如微波炉启动时有声音,洗衣机结束时有提示音。

核心思想:以用户为中心的设计,而不是以技术为中心。

第五步:运行

python note_card_generator.py

输出效果:

📖 处理: 设计心理学...
✅ 卡片已保存: cards/设计心理学.md

生成的 cards/设计心理学.md 内容示例:

# 📌 设计心理学

## 核心观点
- 好的设计让用户无需说明书就能使用
- 可见性是设计的第一原则
- 操作必须有即时反馈
- 设计应以用户为中心

## 金句
> 如果门把手是拉杆样式,但实际需要推才能打开,这就是设计的失败。

## 一句话总结
设计要让产品功能自然可见,操作反馈即时明确,真正以用户认知习惯为导向。

## 标签
#设计原则 #用户体验 #人机交互

运行效果

跑完脚本后,你在 cards/ 目录就能看到整理好的知识卡片。每张卡片结构统一,方便后续导入 Obsidian 或 Notion 做知识管理。

你可以加更多笔记文件,一次性批量处理:

# 放 10 篇笔记到 notes/ 目录
cp book_notes/*.md notes/

# 一次全部生成
python note_card_generator.py

优化方向

  1. 增加查重功能:对比已有卡片,避免重复记录相似内容
  2. 对接 Obsidian Vault:直接写入指定 vault 目录
  3. 添加图片支持:配合 AI 图像模型生成每本书的封面
  4. Web 界面:用 Streamlit 搭一个上传笔记、预览卡片的简单页面
  5. 支持多模型:加入本地模型(如 Ollama)作为免费替代方案
  6. 定时任务:用 cron 每天早上自动处理前一天添加的笔记

这个工具最值钱的地方在于,它把"记录→整理→输出"三个环节串起来了。你只需要专注写笔记,剩下的交给 AI。

试试把你的读书笔记丢进去,看看 AI 整理出的卡片和你自己的整理有什么差异?

这篇文章对你有帮助吗?