VectifyAI/OpenKB
GitHub: VectifyAI/OpenKB
OpenKB 是一个开源的 LLM 知识库系统,解决传统 RAG 每次查询需重新检索而无法积累知识的问题。
Stars: 306 | Forks: 32
# OpenKB — 开源大模型知识库
Scale to long documents • Reasoning-based retrieval • Native multi-modality • No Vector DB
# 📑 什么是 OpenKB
**OpenKB (Open Knowledge Base)** 是一个开源系统(命令行界面),它使用 LLM 将原始文档编译成结构化的、互联的维基风格知识库,由 [**PageIndex**](https://github.com/VectifyAI/PageIndex) 提供支持,实现无向量的长文档检索。
这一理念基于 Andrej Karpathy 描述的一个 [概念](https://x.com/karpathy/status/2039805659525644595):LLM 生成摘要、概念页面和交叉引用,所有内容自动维护。知识会随着时间推移而积累,而不是在每次查询时重新推导。
### 为何不使用传统 RAG?
传统 RAG 在每次查询时都会从头重新发现知识,没有任何积累。OpenKB 将知识一次性编译成持久的维基,并持续更新。交叉引用已经存在。矛盾会被标记。综合反映所有已消费的内容。
### 功能特性
- **广泛格式支持** — PDF、Word、Markdown、PowerPoint、HTML、Excel、文本等,均通过 markitdown 支持
- **长文档扩展** — 长且复杂的文档通过 [PageIndex](https://github.com/VectifyAI/PageIndex) 树形索引处理,实现准确的无向量长上下文检索
- **原生多模态** — 检索并理解图表、表格和图像,而不仅仅是文本
- **编译维基** — LLM 管理并编译你的文档为摘要、概念页面和交叉链接,全部保持同步
- **查询** — 针对知识库提问(一次性)。LLM 遍历你编译的知识来回答
- **交互式聊天** — 多轮对话,支持跨会话恢复
- **健康检查** — 查找矛盾、空白、孤立内容和过期内容
- **监控模式** — 将文件放入 `raw/`,维基自动更新
- **Obsidian 兼容** — 维基是纯 `.md` 文件,使用 `[[wikilinks]]`。可在 Obsidian 中打开以查看图谱和浏览
# 🚀 快速开始
### 安装
```
pip install openkb
```
其他安装选项
- **从 GitHub 最新版本:**
pip install git+https://github.com/VectifyAI/OpenKB.git
- **从源码安装**(可编辑模式,用于开发):
git clone https://github.com/VectifyAI/OpenKB.git
cd OpenKB
pip install -e .
### 快速启动
```
# 1. 创建知识库目录
mkdir my-kb && cd my-kb
# 2. 初始化知识库
openkb init
# 3. 添加文档
openkb add paper.pdf
openkb add ~/papers/ # Add a whole directory
# 4. 提问
openkb query "What are the main findings?"
# 5. 或交互式聊天
openkb chat
```
### 设置你的 LLM
OpenKB 支持 [多 LLM 支持](https://docs.litellm.ai/docs/providers)(例如 OpenAI、Claude、Gemini),通过 [LiteLLM](https://github.com/BerriAI/litellm) 实现(固定到 [安全版本](https://docs.litellm.ai/blog/security-update-march-2026))。
在 `openkb init` 时设置模型,或在 [`.openkb/config.yaml`](#configuration) 中使用 `provider/model` 的 LiteLLM 格式(例如 `anthropic/claude-sonnet-4-6`)。OpenAI 模型可以省略前缀(例如 `gpt-5.4`)。
创建 `.env` 文件并填入你的 LLM API 密钥:
```
LLM_API_KEY=your_llm_api_key
```
# 🧩 OpenKB 的工作原理
### 架构
```
raw/ You drop files here
│
├─ Short docs ──→ markitdown ──→ LLM reads full text
│ │
├─ Long PDFs ──→ PageIndex ────→ LLM reads document trees
│ │
│ ▼
│ Wiki Compilation (using LLM)
│ │
▼ ▼
wiki/
├── index.md Knowledge base overview
├── log.md Operations timeline
├── AGENTS.md Wiki schema (LLM instructions)
├── sources/ Full-text conversions
├── summaries/ Per-document summaries
├── concepts/ Cross-document synthesis ← the good stuff
├── explorations/ Saved query results
└── reports/ Lint reports
```
### 短文档与长文档处理
| | 短文档 | 长文档(PDF ≥ 20 页) |
|---|---|---|
| **转换** | markitdown → Markdown | PageIndex → 树形索引 + 摘要 |
| **图像** | 内联提取(pymupdf) | 由 PageIndex 提取 |
| **LLM 读取** | 完整文本 | 文档树 |
| **结果** | 摘要 + 概念 | 摘要 + 概念 |
短文档由 LLM 完整读取。长 PDF 通过 PageIndex 构建为树形索引,LLM 读取树而非完整文本,从而在长文档中实现更优的检索。
### 知识编译
添加文档时,LLM 会:
1. 生成 **摘要** 页面
2. 读取现有的 **概念** 页面
3. 创建或更新跨文档的 **概念**,并进行综合
4. 更新 **索引** 和 **日志**
单个来源可能涉及 10-15 个维基页面。知识不断积累:每个文档都会丰富现有维基,而不是孤立存在。
# ⚙️ 使用方法
### 命令
| 命令 | 描述 |
|---|---|
| `openkb init` | 初始化新的知识库(交互式) |
|
openkb add <file_or_dir> | 添加文档并编译为维基 |
|
openkb query "question" | 在知识库上提问(使用 `--save` 将答案保存到 `wiki/explorations/`) |
| `openkb chat` | 启动交互式多轮聊天(使用 `--resume`、`--list`、`--delete` 管理会话) |
| `openkb watch` | 监控 `raw/` 并自动编译新文件 |
| `openkb lint` | 运行结构 + 知识健康检查 |
| `openkb list` | 列出已索引文档和概念 |
| `openkb status` | 显示知识库统计信息 |
### 交互式聊天
`openkb chat` 打开一个交互式聊天会话,操作你的维基知识库。与一次性 `openkb query` 不同,每轮对话都会保留历史记录,因此你可以在不重复上下文的情况下深入探讨话题。
```
openkb chat # start a new session
openkb chat --resume # resume the most recent session
openkb chat --resume 20260411 # resume by id (unique prefix works)
openkb chat --list # list all sessions
openkb chat --delete
# delete a session
```
在聊天中,输入 `/` 可访问斜杠命令(Tab 补全):
- `/help` — 列出可用命令
- `/status` — 显示知识库状态
- `/list` — 列出所有文档
- `/add ` — 不离开聊天即可添加文档或目录
- `/save [name]` — 将对话导出到 `wiki/explorations/`
- `/clear` — 开始全新会话(当前会话仍保留在磁盘)
- `/lint` — 运行知识库健康检查
- `/exit` — 退出(Ctrl-D 也有效)
### 配置
设置通过 `openkb init` 初始化,并存储在 `.openkb/config.yaml` 中:
```
model: gpt-5.4 # LLM model (any LiteLLM-supported provider)
language: en # Wiki output language
pageindex_threshold: 20 # PDF pages threshold for PageIndex
```
模型名称使用 `provider/model` 格式的 LiteLLM [格式](https://docs.litellm.ai/docs/providers)(OpenAI 模型可省略前缀):
| 提供商 | 模型示例 |
|---|---|
| OpenAI | `gpt-5.4` |
| Anthropic | `anthropic/claude-sonnet-4-6` |
| Gemini | `gemini/gemini-3.1-pro-preview` |
### PageIndex 集成
长文档因上下文限制、上下文衰减和摘要丢失而对 LLM 构成挑战。
[PageIndex](https://github.com/VectifyAI/PageIndex) 通过无向量、基于推理的检索解决此问题,构建一个树形层次索引,使 LLM 能够针对上下文进行推理式检索。
PageIndex 默认在本地运行,使用 [开源版本](https://github.com/VectifyAI/PageIndex),无需外部依赖。
#### 可选:云端支持
对于大型或复杂的 PDF,[PageIndex Cloud](https://docs.pageindex.ai/) 可提供额外功能,包括:
- 扫描 PDF 的 OCR 支持(通过托管的 VLM 模型)
- 更快的结构生成
- 可扩展的大文档索引
在 `.env` 中设置 `PAGEINDEX_API_KEY` 以启用云端功能:
```
PAGEINDEX_API_KEY=your_pageindex_api_key
```
### AGENTS.md
`wiki/AGENTS.md` 文件定义了维基结构和约定。它是 LLM 维护维基的指令手册。可自定义以更改维基组织方式。
运行时,LLM 会从磁盘读取 `AGENTS.md`,因此你的修改会立即生效。
### 与 Obsidian 配合使用
OpenKB 的维基是一个包含 `[[wikilinks]]` 的 Markdown 文件目录。Obsidian 原生渲染。
1. 打开 `wiki/` 作为 Obsidian 保险库
2. 浏览摘要、概念和探索内容
3. 使用图谱视图查看知识连接
4. 使用 Obsidian Web Clipper 将网页文章添加到 `raw/`
# 🧭 了解更多
### 与 Karpathy 方法的对比
| | Karpathy 流程 | OpenKB |
|---|---|---|
| 短文档 | LLM 直接读取 | markitdown → LLM 读取 |
| 长文档 | 上下文限制、上下文衰减 | PageIndex 树形索引 |
| 支持格式 | 网页剪辑 → .md | PDF、Word、PPT、Excel、HTML、文本、CSV、.md |
| 维基编译 | LLM 代理 | LLM 代理(相同) |
| Q&A | 查询维基 | 维基 + PageIndex 检索 |
### 技术栈
- [PageIndex](https://github.com/VectifyAI/PageIndex) — 无向量、基于推理的文档索引与检索
- [markitdown](https://github.com/microsoft/markitdown) — 通用文件转 Markdown 转换
- [OpenAI Agents SDK](https://github.com/openai/openai-agents-python) — 代理框架(支持通过 LiteLLM 接入非 OpenAI 模型)
- [LiteLLM](https://github.com/BerriAI/litellm) — 多提供商 LLM 网关
- [Click](https://click.palletsprojects.com/) — CLI 框架
- [watchdog](https://github.com/gorakhargosh/watchdog) — 文件系统监控
### 路线图
- [ ] 将长文档处理扩展到非 PDF 格式
- [ ] 支持大型文档集合的嵌套文件夹
- [ ] 概念(主题)树形索引,用于大规模知识库
- [ ] 数据库支持的存储引擎
- [ ] 用于浏览和管理维基的 Web UI
### 许可证
Apache 2.0。参见 [LICENSE](LICENSE)。
### 支持我们
如果你发现 OpenKB 有用,请给我们一个星标 🌟 — 并查看 [PageIndex](https://github.com/VectifyAI/PageIndex)!
[](https://x.com/PageIndexAI)
[](https://www.linkedin.com/company/vectify-ai/)
[](https://ii2abc2jejf.typeform.com/to/tK3AXl8T)
标签:DLL 劫持, Excel, HTML, LLM, Markdown, markitdown, OpenKB, PageIndex, PDF, PowerPoint, Ruby, SEO, Unmanaged PE, Word, 交互式聊天, 会话持久化, 向量检索, 图索引, 多模态, 多轮对话, 大语言模型, 开源, 摘要生成, 文档处理, 无向量数据库, 无需向量数据库, 查询合成, 树索引, 检索增强生成, 概念页面, 矛盾检测, 知识库, 知识编译, 结构化知识, 跨引用, 长文档检索