OpenDocuments
Open source RAG tool for AI document search — connect GitHub, Notion, Google Drive and ask questions with cited answers
______________________________________________________________________
问题:知识分散,没有人工智能搜索
你的团队的知识被困在孤岛中:
- 工程文档 live in GitHub自述文件和维基页面
- 产品规格 分散在Notion数据库中
- 预算报告 坐在谷歌驱动器上的Excel文件中
- API文件 是自动生成的Swagger规格,没有人阅读
- 会议记录 汇流空间腐烂
- 入职指南 埋在
.docxS3上的文件
当有人问 _“我们的身份验证系统是如何工作的?”_ 或 _“人工智能团队的第三季度预算是多少?”_,他们花了15分钟搜寻5种不同的工具。他们可能仍然找不到答案。
解决方案:自托管AI文档搜索
打开文档 连接到所有文档源, 将所有内容编入统一的搜索引擎,以及 用自然语言回答问题 --有来源引用,这样你就可以确切地知道答案来自哪里。
npm install -g opendocuments
opendocuments init
opendocuments start打开 http://localhost:3000,然后走开。
打开文档 是专有企业人工智能搜索工具的免费开源替代品。这是一个在您自己的基础设施上运行的自托管RAG(检索增强代)平台。
最近的改进
- RAG精度检修:结构保持分块、上下文前缀、HyDE+多查询检索、父文档召回、命题增强、重新排序和自适应上下文拟合
- 工作区范围的团队模式:管理/聊天/文档API位于经过身份验证的工作区内,具有共享的会话链接以及会话和API-key身份验证支持
- 备份和恢复CLI:使用一个命令快照SQLite+LanceDB数据并恢复实例
- 插件硬化:插件搜索/安装路由仅限管理员,并使用经过验证的npm参数执行
- 一键式Ollama设置:
init汽车检测到Ollama,主动提出召回丢失的车型 .env自动加载:中的API密钥.env自动加载(无需手动导出)- 多回合对话:聊天会记住之前的上下文,以便后续提问
- 降级模式警告:未配置模型时清除横幅,并附上修复说明
- 增强的诊断:
opendocuments doctor检查Ollama连接、模型可用性和配置有效性 - 安全强化:FTS5注射预防、文件上传净化、OAuth状态限制、工作区隔离
______________________________________________________________________
真实世界用例
工程团队
_“如何根据我们的内部API进行身份验证?”_
OpenDocuments从您的GitHub仓库中提取答案 docs/auth.md,链接到相关的Swagger端点,并包含代码库中的代码示例——所有这些都在一个响应中。
# Index your repo and API docs
opendocuments index ./docs
opendocuments connector sync github
opendocuments ask "How does JWT token refresh work in our API?"适用于运营和人力资源团队
_“东京办公室的远程工作政策是什么?”_
OpenDocuments可以搜索您的Confluence HR空间、Google Drive上的员工手册和最新的政策更新电子邮件,即使有些文件是韩语的,有些是英语的。
opendocuments ask "도쿄 오피스 원격 근무 정책이 뭐야?" --profile precise
# Cross-lingual search finds both Korean and English documents面向产品经理
_“比较v2.0和v3.0的功能规格”_
OpenDocuments分解问题,搜索两个版本的规范,并给出一个结构化的比较表——引用每个源文档。
人工智能辅助开发(MCP)
使用OpenDocuments作为知识库 克劳德代码, 光标,或任何与MCP兼容的AI工具:
{
"mcpServers": {
"opendocuments": {
"command": "opendocuments",
"args": ["start", "--mcp-only"]
}
}
}现在,您的AI编码助手可以在编写代码时搜索您组织的整个文档语料库。
用于自托管知识库
在您自己的基础设施上部署。您的数据 永远不要离开你的网络 当通过Ollama使用本地LLM时。没有云依赖,没有供应商锁定,没有订阅费。
docker compose --profile with-ollama up -d
# Everything runs locally: LLM, embeddings, vector search, web UI______________________________________________________________________
快速开始
1.安装
npm install -g opendocuments2.初始化
opendocuments init交互式向导将:
- 检测您的硬件(CPU、RAM)并推荐最佳LLM
- 让你在两者之间做出选择 本地 (Ollama)或 云 (OpenAI、Claude、Gemini、Grok)模型
- 自动检测Ollama 并主动提出自动提取缺失的模型
- 验证云API密钥 保存之前
- 选择插件预设:
Developer,Enterprise,All,或Custom - 生成
opendocuments.config.ts和.env(API密钥自动加载)
3.开始
opendocuments start打开 http://localhost:3000 --您将看到一个聊天UI、文档管理器和管理仪表板。
第一次? 如果Ollama不跑,你会看到一个清晰的 降阶模式 带有逐步修复说明的横幅。跑 opendocuments doctor 用于全面诊断。4.为您的文档建立索引
# Index a local directory (recursively finds all supported files)
opendocuments index ./docs
# Watch mode: auto-reindex when files change
opendocuments index ./docs --watch
# Or drag-and-drop files in the Web UI5.提问
opendocuments ask "What's our deployment process?"______________________________________________________________________
运作原理
Your Documents OpenDocuments You
───────────── ────────────── ───
GitHub repos ──┐
Notion pages ──┤ ┌─────────────┐
Google Drive ──┤ ── Ingest ──► │ Parse │
Confluence ──┤ │ Chunk │ "How does
S3 buckets ──┤ │ Embed │ auth work?"
Swagger specs──┤ │ Store │ │
Local files ──┤ └──────┬───────┘ │
Web pages ──┘ │ ▼
┌──────┴───────┐ ┌─────────────┐
│ SQLite │ │ RAG Engine │
│ (metadata) │◄─┤ Search │
│ │ │ Rerank │
│ LanceDB │ │ Generate │
│ (vectors) │ │ Cite sources│
└──────────────┘ └──────┬──────┘
│
▼
"Auth uses JWT
tokens with
refresh flow.
[Source: auth.md]"RAG管道
- 意图分类 --了解您是在询问代码、概念、数据,还是想要进行比较
- 查询分解 --将复杂问题分解为子查询,以便更好地检索
- 跨语言搜索 --无论查询语言如何,都能查找韩语和英语的文档
- 混合搜索 --通过互易秩融合将密集向量搜索(语义)与FTS5稀疏搜索(关键字)相结合
- 重新排序 --按关键字重叠和基于模型的相关性对结果进行评分
- 置信度评分 --当不确定答案时,告诉你
- 幻觉守卫 --验证每个句子是否基于检索到的来源
- 三层缓存 --L1查询缓存(5分钟),L2嵌入缓存(24小时),L3网络搜索缓存(1小时)
______________________________________________________________________
支持的文件格式
| 格式 | 扩展名 | 如何解析 |
|---|---|---|
| Markdown | .md, .mdx | 标题层次结构、代码块分隔 |
| 纯文本 | .txt | 直接文本索引 |
.pdf | 页面级提取,扫描文档的OCR回退 | |
| Word | .docx | 带有标题检测的HTML转换 |
| Excel/CSV | .xlsx, .xls, .csv | 表感知分块(表头+行) |
| HTML | .html, .htm | 结构保留提取、脚本/导航剥离 |
| Jupyter笔记本 | .ipynb | Markdown单元格+带语言检测的代码单元格 |
| 电子邮件 | .eml | 标头解析(从/到/主题/日期)+正文提取 |
| 源代码 | .js, .ts, .py, .java, .go, .rs, .rb, .php, .swift, .kt +more | 带导入提取的函数/类级分块 |
| PowerPoint | .pptx | 幻灯片级文本提取 |
| 结构化数据 | .json, .yaml, .yml, .toml | 配置和模式索引 |
| 存档 | .zip | 占位符(计划完全提取) |
回退链:如果解析器失败,下一个解析器会自动尝试:
parserFallbacks: {
'.pdf': ['@opendocuments/parser-pdf', '@opendocuments/parser-ocr'],
}______________________________________________________________________
数据源
| 来源 | 它索引了什么 | 身份验证 | 它是如何同步的 |
|---|---|---|---|
| 本地文件 | 文件系统上支持的任何格式 | 无 | 文件监视(--watch) |
| 文件上传 | 在Web UI中拖放 | 无 | 即时 |
| GitHub | README、Wiki、代码文件、问题 | 个人访问令牌 | 轮询/webhook |
| 概念 | 页面、数据库、所有块类型 | 集成令牌 | 轮询 |
| Google 云端硬盘 | 文档、表格、幻灯片、上传的文件 | OAuth/服务帐户 | 轮询 |
| 亚马逊S3/谷歌云存储 | bucket中支持的任何格式 | AWS/GCP凭据 | 轮询 |
| 汇流 | 跨空间的Wiki页面 | API令牌+电子邮件 | 轮询 |
| Swagger/OpenAPI | 带参数和架构的API端点 | 无(公共规范) | 手动 |
| 网络爬虫 | 您注册的任何URL | 可选(Cookie/标头) | 定期 |
| 网络搜索(塔维利) | 实时web结果合并为答案 | Tavily API密钥 | 查询时间 |
______________________________________________________________________
模型提供者
云提供商
| 提供者 | 模型 | 嵌入 | 最适合 |
|---|---|---|---|
| 开放人工智能 | GPT-5.4、GPT-5.4-mini、GPT-4.1、o3、o4 mini | 文本嵌入-3小/大 | 通用、视觉、推理 |
| 人类 | 克劳德作品集4.6、克劳德十四行诗4.6、克劳德俳句4.5 | --(使用单独的提供者) | 长上下文(1M)、编码、分析 |
| 谷歌 | Gemini 3.1 Pro、Gemini 3.1 Flash Lite、Gemini 3.0 Deep Think | 文本嵌入-005 | 多模式、多语言 |
| 扩展应用识别 | Grok 4、Grok 4重型、Grok 4.1快速 | Grok嵌入 | 实时知识、代码 |
本地模型(通过Ollama)
| 模型 | 活动参数 | 总参数 | 视觉 | 韩语 | 最适合 |
|---|---|---|---|---|---|
| Qwen 3.5 27B | 27B(密集) | 27B | 是 | 优秀 | 通用(32GB+RAM) |
| Qwen 3.5 9B | 9B(密集型) | 9B | 是 | 优秀 | 中档(16GB RAM) |
| Qwen 3.5-122B-A10B | 10B(MoE) | 122B | 是 | 优秀 | 高质量、高效率 |
| Llama 4童子军 | 17B(MoE) | 109B | 是 | 良好 | 10M上下文窗口 |
| Llama 4小牛队 | 17B(MoE) | 400B | 是 | 良好 | 顶级开源质量 |
| DeepSeek V3.2 | 37B(MoE) | 671B | 否 | 良好 | 编码、推理 |
| 杰玛3 27B | 27B | 27B | 是 | 很好 | 轻量级,支持140多种语言 |
| 杰玛3 4B | 4B | 4B | 是 | 良好 | 低规格机器(8GB RAM) |
| K-EXAONE | 23B(教育部) | 236B | 否 | 最佳 | 韩国专业 |
| EXONE深32B | 32B | 32B | 否 | 最好 | 韩国推理 |
| Phi-4推理愿景 | 15B | 15B | 是 | 一般 | 紧凑型多式联运 |
嵌入模型
| 型号 | 尺寸 | 韩国 | 多式联运 | 地点 |
|---|---|---|---|---|
| BGE-M3 | 1024 | 优秀 | 否 | Ollama(默认) |
| 文本嵌入-3大 | 3072 | 良好 | 否 | OpenAI |
| 文本嵌入-005 | 768 | 好 | 不 | 谷歌 |
| nomic嵌入文本 | 768 | 一般 | 否 | 奥利玛(轻量级) |
自动推荐
opendocuments init 检测您的硬件并推荐最佳型号:
| 您的硬件 | 推荐型号 | 推荐嵌入 |
|---|---|---|
| 32GB+内存,GPU | Qwen 3.5 27B或Llama 4 Scout | BGE-M3 |
| 16GB内存 | 3.5 9B | BGE-M3 |
| 8GB RAM | Gemma 3 4B | nomic嵌入文本 |
| 任何(云) | 克劳德十四行诗4.6或GPT-5.4微米 | 文本嵌入-3大 |
______________________________________________________________________
三种使用方法
1.Web用户界面
功能齐全的仪表板位于 http://localhost:3000:
| 页面 | 你能做什么 |
|---|---|
| 聊天 | 使用流式答案、源引用、置信度评分、反馈按钮提问。在快速/平衡/精确配置文件之间切换。 |
| 文件 | 浏览索引文档,拖放上传,查看文档详细信息,使用垃圾桶/还原进行软删除。 |
| 连接器 | 查看连接器同步状态和上次同步时间。 |
| 插件 | 查看已安装的带有健康指示器的插件。 |
| 设置 | 切换暗/亮主题,更改RAG配置文件,查看服务器版本。 |
| 管理员 | 统计仪表板、搜索质量指标、分页查询日志、插件健康状况、连接器状态、审计日志。 |
键盘快捷键: Cmd+K 打开“命令选项板”。 Cmd+1-5 在页面之间导航。
2.CLI
面向高级用户和自动化的17个命令:
# Ask questions
opendocuments ask "What's the deploy process?"
opendocuments ask # Interactive REPL mode
opendocuments search "auth middleware" --top 10 # Vector search, no LLM
# Manage documents
opendocuments index ./docs --watch # Index + auto-reindex on changes
opendocuments document list # See all indexed docs
opendocuments document delete # Soft-delete
# Manage connectors
opendocuments connector sync # Sync all connectors
opendocuments connector status # Check sync status
# Pipe support for scripting
cat README.md | opendocuments ask "Summarize this" --stdin
opendocuments ask "List endpoints" --json | jq '.sources[].sourcePath'
# Administration
opendocuments doctor # Health check
opendocuments auth create-key --name "ci-bot" --role member
opendocuments export --output ./backup3.MCP服务器
19个用于人工智能辅助工作流程的工具。适用于Claude Code、Cursor、Windsurf和任何MCP客户端。
opendocuments start --mcp-only然后,您的AI助手可以:
- 编码时搜索组织的文档
- 创建新文件时为其建立索引
- 检查文档状态和连接器健康状况
- 查询配置
______________________________________________________________________
RAG配置文件
| | fast | balanced | precise | |--|--------|------------|-----------| | 速度 |~1s|~3s|~5s+| | 搜索深度 |10个文档|20个文档|50个文档| | 语义组块 |On | On | On| | 重新排序 |关闭|打开|打开| | 交叉编码器 |关闭|关闭|打开| | 跨语言 |关闭|韩语+英语|韩语+英文| | 上下文前缀 |关闭|打开|打开| | 多查询扩展 |关闭| 3次释义| 5次释义| | 海德 |关闭|关闭|打开| | 父文档检索 |关闭|打开|打开| | 块状增强 (命题/HQ)|关闭|关闭|打开| | 查询分解 |Off | Off |拆分复杂查询| | 网络搜索 |关闭|本地结果较弱时回退|始终合并| | 幻觉守卫 |关闭|检查电源接地|严格模式(注释未验证)| | 最佳 |快速查找,8B本地模型|日常使用,14B+模型|关键问题,云LLM|
随时切换:CLI标志(--profile precise)、Web UI切换或配置文件。
检索质量
OpenDocuments提供了一个重新设计的RAG管道,具有结构保持分块、上下文检索、HyDE+多查询+父文档检索、命题增强和交叉编码器重排序器——所有这些都通过上表进行配置文件门控。看 查看完整的添加列表。
使用评估工具对您自己的数据集进行基准测试:
cd packages/core && npx tsx tests/_fixtures/run-eval.ts报告的指标:hit@3, hit@5先生,nDCG@5--按意图和总计。
______________________________________________________________________
安全
个人模式(默认)
零配置。没有身份验证。仅限本地主机。只是工作。
团队模式
// opendocuments.config.ts
export default defineConfig({ mode: 'team' })| 功能 | 工作原理 |
|---|---|
| API密钥 | od_live_ 前缀,SHA-256散列,从不存储在明文中。适用于特定操作,可选过期。 |
| 角色 | admin (一切), member (读+写), viewer (只读) |
| 速率限制 | 默认情况下,每键覆盖60个请求/分钟。在内存中进行懒惰清理。 |
| PII补救措施 | 在发送到云端LLM之前自动屏蔽电子邮件、电话号码、信用卡、IP。可配置的模式和方法(替换/哈希/删除)。 |
| 审计日志 | 记录身份验证事件、文档访问、配置更改。可通过管理员API查询。 |
| 安全警报 | 检测野蛮武力企图、异常数据导出、API密钥滥用。 |
| OAuth SSO | 谷歌和GitHub使用HttpOnly cookie会话登录。 |
| 工作区隔离 | 每个向量搜索都是通过以下方式执行的 workspace_id 过滤器。文档、对话和API密钥的作用域是工作区。 |
______________________________________________________________________
配置
// opendocuments.config.ts
import { defineConfig } from 'opendocuments-core'
export default defineConfig({
workspace: 'my-team',
mode: 'personal',
model: {
provider: 'ollama',
llm: 'qwen3.5:27b',
embedding: 'bge-m3',
},
rag: { profile: 'balanced' },
connectors: [
{ type: 'github', repo: 'org/repo', token: process.env.GITHUB_TOKEN },
{ type: 'notion', token: process.env.NOTION_TOKEN },
{ type: 'web-crawler', urls: ['https://docs.example.com'] },
],
plugins: ['@opendocuments/parser-pdf', '@opendocuments/parser-docx'],
security: {
dataPolicy: {
autoRedact: { enabled: true, patterns: ['email', 'phone', 'credit-card'] },
},
audit: { enabled: true },
},
storage: { db: 'sqlite', vectorDb: 'lancedb', dataDir: '~/.opendocuments' },
})______________________________________________________________________
Docker部署
# Basic (cloud LLM)
docker compose up -d
# With local LLM (Ollama)
docker compose --profile with-ollama up -d
# With .env file for API keys
docker compose --env-file .env up -dDocker镜像包括所有包和插件。数据保存在命名卷中。安装您的配置:
docker run -v ./opendocuments.config.ts:/app/opendocuments.config.ts \
-v opendocuments-data:/data -p 3000:3000 opendocuments______________________________________________________________________
插件开发
创建自定义解析器、连接器或模型提供程序:
opendocuments plugin create my-parser --type parser
cd my-parser
npm install
npm run test
npm run dev # Watch mode
opendocuments plugin publish # Publish to npm四种插件类型: parser, connector, model, middleware每个都有一个带生命周期钩子的类型化接口(setup, teardown, healthCheck, metrics).
社区插件遵循命名约定: opendocuments-plugin-*
看 贡献.md 获取完整的插件开发指南。
______________________________________________________________________
TypeScript SDK
import { OpenDocumentsClient } from '@opendocuments/client'
const client = new OpenDocumentsClient({
baseUrl: 'http://localhost:3000',
apiKey: 'od_live_...',
})
const result = await client.ask('How does auth work?')
console.log(result.answer) // "Auth uses JWT tokens with..."
console.log(result.sources) // [{ sourcePath: 'docs/auth.md', score: 0.92 }]
console.log(result.confidence) // { level: 'high', score: 0.87 }______________________________________________________________________
可嵌入小部件
将聊天小部件添加到您的内部工具中:
OpenDocuments.widget({
server: 'http://localhost:3000',
apiKey: 'od_live_...',
workspace: 'public-docs',
})
______________________________________________________________________
发展
git clone https://github.com/joungminsung/OpenDocuments.git
cd OpenDocuments
npm run setup # Install + build (one command)
npm run test # 51 test suites, ~300 tests
npm run dev # Watch mode建筑
| 包 | 角色 | 测试 |
|---|---|---|
@opendocuments/core | 插件系统、RAG引擎、摄取管道、存储、身份验证、安全 | 159 |
@opendocuments/server | HTTP API(Hono)、MCP服务器、身份验证中间件、小部件 | 27 |
@opendocuments/cli | 17个CLI命令(Commander.js) | 3 |
@opendocuments/web | 7页的React SPA(Vite+顺风) | -- |
@opendocuments/client | TypeScript SDK | 3 |
| 5个模型插件 | Ollama、OpenAI、Anthropic、谷歌、Grok | 41 |
| 9个解析器插件 | PDF、DOCX、XLSX、HTML、Jupyter、电子邮件、代码、PPTX、结构化 | 37 |
| 8个连接器插件 | GitHub、Notion、GDrive、S3、Confluence、Swagger、WebCrawler、WebSearch | 38 |
看 贡献.md 获取约定、测试模式和插件开发指南。
______________________________________________________________________
文档
| 指南 | 说明 |
|---|---|
| 快速开始 | 安装并运行5分钟 |
| 建筑 | 包结构、数据流、设计决策 |
| 插件API:分析器 | 创建自定义文档解析器 |
| 插件API:连接器 | 连接外部数据源 |
| 插件API:模型 | 添加自定义AI提供商 |
| TypeScript SDK | 程序化API客户端 |
| 安全策略 | 漏洞报告 |
| 贡献 | 开发设置、约定、插件指南 |
______________________________________________________________________
