Skip to content

liaocaoxuezhe/obsidian-rag

Repository files navigation

Obsidian RAG 本地检索增强生成系统

将你的 Obsidian 知识库转换为智能对话系统,支持语义检索和本地化部署。

中文 | English

功能特性

  • 🔍 语义检索:基于向量的相似度搜索,理解查询意图
  • 📝 Markdown 解析:完整保留 Obsidian 元数据和链接
  • 🌐 中英文支持:优化的多语言嵌入模型
  • 💾 本地部署:数据安全,无需联网
  • 🔄 增量更新:自动监测文件变化,无需重建索引
  • 🎯 混合检索:结合向量搜索和关键词匹配
  • 💬 对话接口:支持多轮对话和上下文理解
  • 🚀 MCP 集成:通过 Claude Code 直接使用 RAG 功能

快速开始

1. 环境准备

# 创建虚拟环境
python -m venv obsidian_rag_env

# 激活虚拟环境
source obsidian_rag_env/bin/activate  # macOS/Linux
#
obsidian_rag_env\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

2. 配置设置

方法一:环境变量配置(推荐)

# 复制配置文件
cp .env.example .env

# 编辑配置文件,设置你的 Obsidian 路径
nano .env

.env 文件中设置:

OBSIDIAN_VAULT_PATH=/path/to/your/obsidian/vault

方法二:命令行参数

每次运行时通过参数指定路径:

python src/build_index.py --vault-path /path/to/your/obsidian/vault

方法三:配置文件

config.yaml 中设置(可选,默认使用环境变量):

# Obsidian RAG 系统配置
obsidian_vault_path: "/path/to/your/obsidian/vault"

3. 建立向量索引

# 使用环境变量中的路径
python src/build_index.py

# 或直接指定路径
python src/build_index.py --vault-path /path/to/your/obsidian/vault

4. 启动对话系统

# 命令行模式
python src/chat.py

# 或启动 Web 服务
python src/web_server.py

# 或通过 MCP 集成使用 Claude Code (推荐)
# 查看 MCP_README.md 了解详细配置

使用方法

命令行查询

# 交互模式(使用环境变量中的路径)
python src/query.py

# 交互模式(指定路径)
python src/query.py --vault-path /path/to/your/obsidian/vault

# 单次查询
python src/query.py "你的问题"

# 高级查询
python src/query.py "问题" --top-k 10 --threshold 0.8 --tags "AI,机器学习"

Python API 使用

from obsidian_rag import ObsidianRAG

# 初始化系统
rag = ObsidianRAG(
    vault_path="/path/to/obsidian",
    config_path="config.yaml"
)

# 查询
results = rag.query("关于机器学习的学习路径")
for result in results:
    print(f"文件: {result['file_path']}")
    print(f"内容: {result['content']}")
    print(f"相似度: {result['score']:.3f}")
    print("---")

# 对话
response = rag.chat("我想学习机器学习,应该从哪里开始?")
print(response)

配置说明

Obsidian 路径配置

RAG 文件夹路径(Obsidian 保险库路径)支持三种配置方式,优先级从高到低

  1. 命令行参数(最高优先级):--vault-path /path/to/vault
  2. 环境变量(推荐):在 .env 文件中设置 OBSIDIAN_VAULT_PATH
  3. 配置文件:在 config.yaml 中设置 obsidian_vault_path

其他主要配置项

主要配置项位于 config.yaml.env 文件中:

  • 嵌入模型:默认使用 paraphrase-multilingual-MiniLM-L12-v2
  • 文本分割:块大小 500,重叠 50
  • 检索设置:返回前 5 个结果,相似度阈值 0.7
  • 数据库:使用 ChromaDB,存储在 ./data/chroma

环境变量说明 (.env)

# 必需配置
OBSIDIAN_VAULT_PATH=/path/to/your/obsidian/vault

# 可选配置
EMBEDDING_MODEL=paraphrase-multilingual-MiniLM-L12-v2
EMBEDDING_DEVICE=cpu  # cpu/mps/cuda
TOP_K_RETRIEVAL=5
SIMILARITY_THRESHOLD=0.7

项目结构

obsidian_rag/
├── src/                    # 源代码
│   ├── __init__.py
│   ├── config.py          # 配置管理
│   ├── document_parser.py # 文档解析
│   ├── text_chunker.py    # 文本分割
│   ├── embedding.py       # 向量化
│   ├── database.py        # 数据库操作
│   ├── retrieval.py       # 检索系统
│   ├── build_index.py     # 建立索引
│   ├── query.py           # 查询接口
│   ├── chat.py            # 对话系统
│   ├── web_server.py      # Web 服务
│   ├── mcp_server.py      # MCP 服务器
│   ├── update_index.py    # 增量更新
│   └── mcp_server_minimal.py  # MCP 简化服务器
├── data/                  # 数据存储
│   ├── chroma/           # 向量数据库
│   └── cache/            # 缓存文件
├── tests/                 # 测试文件
│   ├── test_basic.py     # 基础测试
│   ├── test_mcp*.py      # MCP 测试
│   └── test_vault/       # 测试数据
├── docs/                  # 文档
│   ├── MCP_*.md          # MCP 相关文档
│   └── PROJECT_SUMMARY.md
├── templates/             # 模板文件
├── requirements.txt       # 依赖列表
├── config.yaml           # 配置文件
├── .env.example          # 环境变量示例
├── setup.sh              # 安装脚本
├── run.sh                # 运行脚本
├── start_mcp_server.py   # MCP 启动脚本
├── .gitignore            # Git 忽略文件
├── LICENSE               # 许可证
└── README.md             # 说明文档

高级功能

增量更新

系统会自动监测文件变化,只更新修改过的文件:

# 手动触发增量更新
python src/update_index.py

元数据过滤

支持基于标签、文件夹、日期等元数据的精确过滤:

# 按标签过滤
results = rag.query("AI", tags=["机器学习", "深度学习"])

# 按文件夹过滤
results = rag.query("笔记", folders=["Zettelkasten"])

# 按时间范围过滤
results = rag.query("最近", start_date="2024-01-01", end_date="2024-12-31")

自定义嵌入模型

可以使用不同的嵌入模型:

from sentence_transformers import SentenceTransformer

# 使用自定义模型
rag = ObsidianRAG(
    embedding_model="your-custom-model",
    device="mps"  # 使用 Apple Silicon GPU 加速
)

性能优化

  • GPU 加速:设置 device=cudadevice=mps
  • 批量处理:调整 batch_size 参数
  • 缓存机制:启用嵌入向量缓存
  • 并行处理:使用多进程处理文档

常见问题

Q: 检索结果不准确怎么办?

A:

  • 调整相似度阈值
  • 增加返回结果数量 (top_k)
  • 优化文本分割策略
  • 尝试不同的嵌入模型

Q: 索引建立很慢?

A:

  • 使用 GPU 加速
  • 增加批处理大小
  • 启用并行处理

Q: 支持哪些文件格式?

A: 目前支持 Markdown (.md, .markdown),计划支持 PDF、TXT 等格式。

许可证

MIT License

MCP 集成 (Claude Code)

本项目支持通过 MCP (Model Context Protocol) 与 Claude Code 集成,提供无缝的 RAG 体验。

快速配置

  1. 安装 MCP 依赖:

    pip install mcp>=1.0.0
  2. 配置已自动添加~/.claude/plugins/config.json

  3. 在 Claude Code 中使用:

    • 直接对话询问关于您知识库的内容
    • 使用向量检索功能
    • 获取文档信息和列表

详细使用说明请查看 docs/MCP_README.md

贡献

欢迎提交 Issue 和 Pull Request!

About

Convert your Obsidian knowledge base into an intelligent conversational system, supporting semantic retrieval and localized deployment.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors