一个以本地优先的Graph-RAG系统,结合了基于元数据图关系的ChromaDB统一存储和用于智能问答的Gemini 2.5 Flash,适用于你的Obsidian知识库。
┌─────────────────┐ ┌─────────────────┐
│ Obsidian │ │ ChromaDB │
│ Vault │───▶│ (统一存储) │
│ │ │ 向量+图 │
└─────────────────┘ │ 元数据 │
│ └─────────────────┘
│ │
│ ▼
│ ┌─────────────────┐
│ │ DSPy │
└─────────────▶│ RAG引擎 │
│ + Gemini 2.5 │
│ (多跳检索) │
└─────────────────┘
│
▼
┌─────────────────┐
│ MCP服务器 │
│ (FastMCP) │
└─────────────────┘
│
▼
┌─────────────────┐
│ Claude Desktop │
│ 集成 │
└─────────────────┘
使用Claude Desktop、Cursor或Raycast最简单的方法:
# 交互式安装向导
uv run install.py
# 或非交互式,使用你的设置
uv run install.py --vault "/path/to/your/vault" --api-key "your_key"
安装程序会:
如果你更喜欢手动设置:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux
uv sync
cp configs/.env.example .env
# 编辑.env并添加你的GEMINI_API_KEY和知识库路径
# 完全索引(统一ChromaDB存储)
uv run scripts/reindex.py all
# 检查索引状态
uv run scripts/reindex.py status
Claude Desktop(stdio模式):
{
"mcpServers": {
"graph-rag-obsidian": {
"command": "uvx",
"args": ["--python", "3.13", "--from", ".", "graph-rag-mcp-stdio"],
"cwd": "/path/to/graph-rag-mcp-server",
"env": {
"GEMINI_API_KEY": "your_api_key_here",
"OBSIDIAN_RAG_VAULTS": "/path/to/your/vault"
}
}
}
}
Cursor(HTTP模式):
# 启动HTTP服务器
uv run graph-rag-mcp-http
# 配置Cursor MCP扩展以使用http://localhost:8765
Raycast(HTTP模式):
# 启动HTTP服务器
uv run graph-rag-mcp-http
# 安装生成的Raycast扩展
详细配置说明,请参阅SETUP.md。
# 交互式安装向导
uv run install.py
# Claude Desktop(stdio模式)
uvx --python 3.13 --from . graph-rag-mcp-stdio
# Cursor/Raycast(HTTP模式)
uv run graph-rag-mcp-http
# 带自定义端口的HTTP
uv run graph-rag-mcp-http --port 9000
# 直接stdio运行(替代方案)
uv run main.py # stdio模式
uv run src/mcp_server.py # stdio模式
# 完全索引
uv run scripts/reindex.py all
# ChromaDB统一存储
uv run scripts/reindex.py unified
# 检查状态
uv run scripts/reindex.py status
# 启动文件监视器
uv run scripts/reindex_watch.py start
# 测试文件检测
uv run scripts/reindex_watch.py test
使用DSPy增强你的知识库,通过智能PARA系统分类:
# 分析当前知识库分类状态
uv run scripts/enrich_para_taxonomy.py analyze --sample 100
# 预览丰富(干跑)在样本笔记上
uv run scripts/enrich_para_taxonomy.py enrich --limit 10 --dry-run
# 应用于特定笔记
uv run scripts/enrich_para_taxonomy.py enrich "path/to/note.md" --apply
# 使用过滤器批量丰富
uv run scripts/enrich_para_taxonomy.py enrich --limit 50 --folder "Projects" --apply
# 整个知识库丰富(新!)
# 预览整个知识库丰富
uv run scripts/enrich_para_taxonomy.py enrich-all --dry-run
# 应用于整个知识库(默认跳过已丰富的)
uv run scripts/enrich_para_taxonomy.py enrich-all --apply
# 强制重新丰富整个知识库
uv run scripts/enrich_para_taxonomy.py enrich-all --apply --force-all
# 自定义大型知识库的批处理大小
uv run scripts/enrich_para_taxonomy.py enrich-all --apply --batch-size 25
PARA分类功能:
#para/project/ai/automation该服务器为Claude提供了以下工具:
search_notes:跨知识库的向量搜索answer_question:带引用的RAG驱动问答graph_neighbors:通过图查找相关笔记get_subgraph:提取笔记子图create_note:创建带有自动丰富前言的新笔记list_notes:浏览知识库内容read_note:获取完整笔记内容get_note_properties:读取前言update_note_properties:修改前言add_content_to_note:追加内容get_backlinks:查找指向目标的笔记get_notes_by_tag:按标签查找笔记archive_note:将笔记移至归档create_folder:创建目录reindex_vault:重新索引统一ChromaDB存储enrich_notes:对笔记应用PARA分类法丰富.env中的关键设置:
# 必需
GEMINI_API_KEY=your_key_here
# ChromaDB配置
OBSIDIAN_RAG_CHROMA_DIR=/custom/path/to/.chroma_db
OBSIDIAN_RAG_COLLECTION=vault_collection
# 可选定制
OBSIDIAN_RAG_EMBEDDING_MODEL=all-MiniLM-L6-v2
OBSIDIAN_RAG_GEMINI_MODEL=gemini-2.5-flash
# 语义分块配置
OBSIDIAN_RAG_CHUNK_STRATEGY=semantic # 或“character”用于简单的分块
OBSIDIAN_RAG_SEMANTIC_MIN_CHUNK_SIZE=100
OBSIDIAN_RAG_SEMANTIC_MAX_CHUNK_SIZE=3000
OBSIDIAN_RAG_SEMANTIC_MERGE_THRESHOLD=200
# 向量搜索
results = search_notes("机器学习算法", k=5)
# 带上下文的问答
answer = answer_question("我对transformers了解到了什么?")
# 查找相关笔记
neighbors = graph_neighbors("深度学习", depth=2)
# 获取反向链接
backlinks = get_backlinks("神经网络")
# 按标签查找
tagged_notes = get_notes_by_tag("ai")
# 创建带有自动丰富的新笔记
note = create_note(
title="机器学习突破",
content="# 关键发现\n\n发现了新的优化技术...",
folder="研究",
tags=["ml", "优化"],
para_type="project", # PARA分类提示
enrich=True # 应用AI丰富
)
# 读取笔记
content = read_note("研究/AI进展.md")
# 更新属性
update_note_properties("研究/AI进展.md", {
"status": "完成",
"tags": ["ai", "研究", "已完成"]
})
create_note工具创建格式正确的Obsidian笔记,包括:
示例创建的笔记:
---
created: '2025-08-23T20:30:00.000000'
modified: '2025-08-23T20:30:00.000000'
para_type: project
para_category: ai/research
para_confidence: 0.85
key_concepts:
- 机器学习优化
- 梯度下降改进
- 性能基准测试
tags:
- ml
- 优化
- para/project
- para/project/ai/research
- tech/ai/ml/optimization
potential_links:
- '[[优化技术]]'
- '[[2025年研究日志]]'
enrichment_version: '1.0'
last_enriched: '2025-08-23T20:30:00.000000'
enrichment_model: gemini-2.5-flash
---
# 机器学习突破
你的内容在这里...
步骤1:分析你的知识库
uv run scripts/enrich_para_taxonomy.py analyze --sample 100
显示当前分类状态和丰富潜力。
步骤2:在子集上测试(干跑)
uv run scripts/enrich_para_taxonomy.py enrich --limit 5 --dry-run
预览分类而不做更改。
步骤3:应用丰富
# 从小规模开始
uv run scripts/enrich_para_taxonomy.py enrich --limit 20 --apply
# 扩大规模
uv run scripts/enrich_para_taxonomy.py enrich --limit 100 --apply
示例丰富后的笔记:
---
para_type: project
para_category: AI/自动化
para_confidence: 0.9
key_concepts:
- AI代理开发
- 计算机使用自动化
- 基于地面的AI系统
tags:
- "#project/ai/自动化"
- "#area/ai/开发"
potential_links:
- "相关项目名称"
enrichment_version: "1.0"
last_enriched: "2025-08-23T17:59:32"
---
# 你的原始笔记内容保持不变
#para/project/ai/自动化系统将图关系存储为ChromaDB元数据:
# 笔记级元数据
metadata = {
"note_id": "my_note",
"title": "我的笔记标题",
"path": "/path/to/note.md",
"tags": "重要,ai,项目",
"links_to": "其他笔记,相关笔记",
"backlinks_from": "来源笔记,另一个笔记",
"vault": "我的知识库"
}
# 分块级元数据(语义分块)
chunk_metadata = {
"chunk_id": "my_note#chunk_0",
"chunk_type": "章节",
"header_text": "介绍",
"header_level": 2,
"importance_score": 0.8,
"sequential_next": "my_note#chunk_1",
"sequential_prev": "",
"parent_chunk": "my_note#header_0",
"child_chunks": "my_note#chunk_1,my_note#chunk_2",
"sibling_chunks": "my_note#chunk_3",
"semantic_chunk": True
}
安装测试依赖项并运行套件:
# 使用uv(推荐)
uv sync --extra test
uv run pytest -q
# 或使用本地虚拟环境
PYTHONPATH=. .venv/bin/pytest -q
常见调用:
# 仅单元/集成
PYTHONPATH=. .venv/bin/pytest tests/unit -q
PYTHONPATH=. .venv/bin/pytest tests/integration -q
# 覆盖率(阈值配置在pytest.ini中)
PYTHONPATH=. .venv/bin/pytest --cov -q
# 标记
pytest -m unit
pytest -m integration
pytest -m "not slow"
注意事项