黑曜石ChromaDB同步
将您的黑曜石保险库同步到ChromaDB进行语义搜索,并与Claude Code的MCP集成。
概述
该项目提供:
- 黑曜石插件 -通过内置聊天界面将保险库内容同步到ChromaDB后端
- 后端API -FastAPI服务器处理摄取、嵌入和查询
- MCP服务器 -用于Claude代码集成的模型上下文协议服务器
特性
支持的文件类型
| 类型 | 扩展 | 分块策略 |
|---|---|---|
| Markdown | .md | 基于标头的层次结构 |
.pdf | 基于重叠的页面 | |
| Excel | .xlsx | 基于行的标题上下文 |
| CSV | .csv | 基于行的自动分隔符检测 |
| Word | .docx | 基于段落的标题层次结构 |
插件功能
- 右侧边栏面板 -集成搜索、聊天和同步控件
- 语义搜索 -在vault中查找相关内容
- AI 聊天 -RAG与Ollama的问答
- @提及 -聊天中的参考笔记
@note-name - 斜杠命令 -
/search,/summarize,/related - 文件夹标签 -按基于文件夹的类别筛选查询
- 增量同步 -内容哈希防止对未更改的文件重新索引
- 状态栏 -实时同步状态和文档计数
Claude代码的MCP工具
search_vault-带folder_tag过滤的语义搜索synthesize_answer-RAG供电问答list_collections-显示可用收藏list_folder_tags-列出用于筛选的文件夹标签get_file_chunks-获取文件的所有块
建筑
┌─────────────────┐ HTTP ┌─────────────────┐ HTTP ┌─────────────────┐
│ Obsidian │ ──────────── │ Backend API │ ──────────── │ ChromaDB │
│ Plugin │ :8002 │ (FastAPI) │ :8000 │ (Vector DB) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
│ HTTP (Ollama)
▼
┌─────────────────┐
│ Ollama │
│ (LLM for RAG) │
└─────────────────┘
┌─────────────────┐ SSE ┌─────────────────┐
│ Claude Code │ ──────────── │ MCP Server │ ─────── Backend API
│ │ :8004 │ (FastAPI/SSE) │
└─────────────────┘ └─────────────────┘快速开始
1.部署堆栈
docker compose up -d这将开始:
- 端口8003上的ChromaDB(内部8000)
- 端口8002上的后端API
- 端口8004上的MCP服务器
2.安装黑曜石插件
复制 plugin/ 将内容保存到您的保险库 .obsidian/plugins/chromadb-sync/ 目录。
或通过BRAT安装: https://github.com/your-repo/obsidian-chromadb-sync
3.配置克劳德代码(可选)
创建 .mcp.json 在您的项目中:
{
"mcpServers": {
"obsidian-chromadb": {
"type": "sse",
"url": "http://your-server:8004/sse"
}
}
}配置
后端环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
CHROMADB_URL | http://localhost:8000 | ChromaDB服务器URL |
OLLAMA_URL | http://localhost:11434 | Ollama服务器URL |
OLLAMA_MODEL | llama3.2:latest | RAG合成模型 |
EMBEDDING_MODEL | all-MiniLM-L6-v2 | 句子转换模型 |
HNSW_SPACE | cosine | 向量相似性度量 |
LOG_LEVEL | INFO | 日志记录级别 |
插件设置
可通过黑曜石设置UI进行配置:
将军
- 后端URL和集合名称
- 同步间隔(周期性同步)
标记语言
- 按标题分组切换
- 最大块大小
- 块大小和重叠
电子表格(XLSX/CSV)
- 每块行数
- 最大块大小
Word文档(DOCX)
- 块大小和重叠
过滤
- 文件夹包含/排除
- 文件模式排除
- 文件夹标签映射
API终点
同步端点
| 方法 | 路径 | 描述 |
|---|---|---|
| 职位 | /sync/markdown | 同步标记文件 |
| 职位 | /sync/pdf | 同步PDF文件 |
| 职位 | /sync/xlsx | 同步Excel电子表格 |
| 职位 | /sync/csv | 同步CSV文件 |
| 职位 | /sync/docx | 同步Word文档 |
查询端点
| 方法 | 路径 | 描述 |
|---|---|---|
| 职位 | /query | 语义搜索 |
| 职位 | /query/synthesize | RAG合成 |
管理端点
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /collections | 列出收藏 |
| 职位 | /collections/folder-tags | 获取文件夹标签 |
| 职位 | /delete | 删除文件块 |
| 职位 | /delete/folder | 删除文件夹块 |
| 得到 | /ollama/models | 列出可用的Olama型号 |
文档架构
ChromaDB中存储的每个块包括:
{
id: "path/to/file_chunk_0",
document: "chunk text content...",
metadata: {
source: "path/to/file.md",
filename: "file.md",
chunk_index: 0,
total_chunks: 5,
file_type: "markdown|pdf|xlsx|csv|docx",
content_hash: "sha256...",
folder_tag: "category",
// Type-specific fields:
header_path: "Section > Subsection", // markdown
page_start: 1, // pdf
sheet_name: "Sheet1", // xlsx
row_start: 1, // xlsx/csv
heading_path: "Chapter > Section", // docx
}
}发展
插件开发
cd plugin
npm install
npm run dev # Watch mode
npm run build # Production build后端开发
cd backend
pip install -r requirements.txt
uvicorn server:app --reload --port 8002文档
看 docs/ 详细文档:
许可证
麻省理工学院
