内容
# 知识库
**一个MCP知识库,将零散的文档、论文和代码转化为适合代理的上下文,具备丰富性、跨源链接和维基合成。**
大多数RAG系统在文件夹上进行语义搜索就停止了。对于真正的代理工作流来说,这还不够。代理需要找到正确的源,了解源的类型,连接不同集合中的相关材料,并返回可追溯和可用的上下文。知识库就是为这一层设计的:一个本地优先的研究界面,帮助代理在混合内容中搜索、丰富、追踪和合成知识。
## 演示
<!-- TODO: 添加GIF/截图,展示多源搜索、跨源发现和维基合成 -->
*通过一个MCP界面搜索文档、论文、维基页面和丰富的源。*
## 关键功能
- **混合搜索** 跨PDF、EPUB、文档站点、视频、代码和网页,具有六个评分信号和交叉编码器重新排序
- **四阶段丰富** 为每个块添加标题、摘要、概念标签、实体提取、重要性分数和章节级合成
- **维基合成** 生成实体、概念和比较页面,具有声明级出处和验证状态
- **跨源情报** 通过模糊实体合并、共现图和Jaccard相似性索引,揭示不同源之间的联系
- **23个MCP工具** 设计用于渐进式披露:紧凑的搜索结果、可扩展的上下文、维基页面、图探索、递归生成和健康审计
## 快速设置
```bash
git clone https://github.com/sidskarkii/Lore.git
cd Lore
./scripts/setup.sh
# 注册Claude Code
claude mcp add lore -- /path/to/Lore/.venv/bin/python -m lore --mcp-stdio
```
## 架构
```
代理(Claude Code,Cursor等)
|
| MCP(stdio)
v
+-----------+ +-----------+ +-----------+
| 搜索引擎 | | 丰富管道 | | 维基层 |
| 搜索引擎 | | 丰富管道 | | 维基层 |
+-----+-----+ +-----+-----+ +-----+-----+
| | |
v v v
+-----------+ +-----------+ +-----------+
| LanceDB | | 存档 | | SQLite |
| 向量 | | 每源 | | 事件 |
+-----------+ +-----------+ +-----------+
```
## 检索基准
在93个代理式查询(关键词、实体、事实、比较、概念)上进行测试,跨越一个5,080块的语料库,具备完整的四阶段丰富功能。
| 配置 | MRR@5 | Recall@10 | Hit Rate |
|--------|------:|----------:|---------:|
| 仅限向量 | 0.256 | 0.430 | 36.6% |
| 仅限BM25 | 0.427 | 0.527 | 50.5% |
| 混合RRF(无重新排序) | 0.332 | 0.462 | 40.9% |
| **完整管道** | **0.431** | **0.538** | **51.6%** |
完整管道将MRR@5提高了**68%**,优于仅限向量的配置。按查询类型划分:
| 查询类型 | 向量 | BM25 | 完整管道 |
|------------|-------:|-----:|--------------:|
| 关键词 | 0.167 | **0.487** | 0.435 |
| 实体 | 0.223 | 0.460 | **0.542** |
| 事实 | 0.223 | **0.475** | 0.350 |
| 比较 | 0.375 | 0.321 | **0.429** |
| 概念 | 0.333 | 0.355 | **0.395** |
没有单一信号在所有情况下都表现最佳。向量在关键词查找上失败。BM25在跨源比较上失败。完整管道是唯一一个在实体、比较和概念查询上均有领先表现的配置。
## 工作原理
**搜索。**
查询同时命中六个信号:向量相似性(EmbeddingGemma ONNX)、BM25全文检索、实体增强(通过模糊实体索引)、互惠排名融合、FlashRank交叉编码器重新排序和查询意图检测(将维基结果与块结果分开)。重新排序后,根据交互历史、重要性增强和会话感知去重应用Wilson分数。
**丰富。**
每个摄入的源都经过一个四阶段的管道。第一阶段提取关键词(KeyBERT)和实体(spaCy)。第二阶段使用带有滚动关键字典的LLM生成每个块的标题、摘要、概念标签和重要性分数。第三阶段使用概念账本合成章节级摘要,跟踪想法如何演变。第四阶段生成书籍/文档级摘要。每个阶段都从原始文本开始,而不是从前一阶段的输出开始。
**维基层。**
知识库生成综合的维基页面(实体、概念、源、比较),聚合所有源的证据。每个声明存储哪些块支持它,来自多少个源,并获得验证状态。矛盾检测使用嵌入相似性和否定不对称性来查找跨页面冲突。递归生成发现缺失的页面,并根据链接压力、证据计数、源多样性和图中心性对候选进行排名。
**跨源合成。**
模糊实体索引(Jaro-Winkler,类型感知阈值)自动链接不同源中的提及。实体和关键词共现图(NPMI加权,Louvain社区)揭示主题结构。当摄入新内容时,重叠的维基页面会主动重新生成,以便知识能够立即复合。
## 支持的源
| 源 | 提取 | 备注 |
|--------|-----------|-------|
| PDF | pymupdf,基于字体的标题检测 | 章节模式备用,标题验证 |
| EPUB | 基于脊柱的,递归标题 | EPUB3兼容 |
| YouTube | yt-dlp字幕 + 元数据 | 章节映射到章节,标签映射到关键词 |
| 音频/视频 | sherpa-onnx Whisper medium.en | ONNX Runtime,自动下载 |
| 网页 | trafilatura | 文章内容提取 |
| Markdown/MDX | 直接分块 | 文档站点摄入,智能文件过滤 |
| 代码 | 语言感知分块 | .py, .js, .ts, .java, .go, .rs等 |
## LLM提供商
> **注意:** 丰富和维基生成对每个文件进行多次LLM调用。一个大型PDF可以使用50k+个令牌。请使用免费或低成本的提供商。
在项目根目录的`.env`中配置:
```bash
LORE_CUSTOM_BASE_URL=https://integrate.api.nvidia.com/v1
LORE_CUSTOM_API_KEY=your-api-key-here
LORE_CUSTOM_MODEL=nvidia/nemotron-3-super-120b-a12b
```
与任何OpenAI兼容的端点配合使用: [Nvidia NIM](https://build.nvidia.com/) (免费层), [OpenRouter](https://openrouter.ai/) , [Ollama](https://ollama.com/) (本地),或任何自托管API。
如果未配置提供商,并且知识库在Claude Code下运行,它将自动使用 **Claude CLI提供商** ,继承您的订阅。零配置但速度较慢。
核心搜索无需LLM。只有丰富和维基生成需要LLM。
## 数据布局
```
~/.lore/
store/ LanceDB向量存储
archive/ 每源:meta.json,chunks.json,summaries
wiki/ 页面,清单,过期跟踪
models/ 自动下载的重新排序器 + 转录模型
app.db SQLite(交互,事件,摄入日志)
```
## 技术栈
Python 3.10+,LanceDB,ONNX Runtime,FlashRank,sherpa-onnx,SQLite,KeyBERT,spaCy,rapidfuzz,networkx,MCP SDK,FastAPI,PyMuPDF,trafilatura。所有模型在首次使用时自动下载。在Apple Silicon上运行并优化。