一个本地优先的 AI 知识库系统(RAG),用于把本地文档接入向量检索与大模型对话流程。项目提供完整的 Web UI,支持知识库管理、文档上传、检索增强问答、聊天记录持久化,以及基于 Ollama 或 OpenAI 兼容接口的模型接入。
后端基于 Go + Gin,前端基于 React + Vite + TypeScript,向量数据库使用 Qdrant,适合个人或小团队在本地环境、自托管环境中快速搭建可用的知识库问答系统。
- 知识库管理:创建、删除知识库,查看文档列表
- 文档上传与索引:支持 TXT、Markdown、PDF 文件上传与解析
- 检索增强问答:基于 Qdrant 做向量检索并把命中内容注入对话上下文
- 聊天记录持久化:会话消息保存到本地 SQLite 数据库,重启后仍可恢复
- 配置持久化:模型配置与知识库状态保存到本地 JSON 文件
- Docker Compose 部署:支持一键拉起前端、后端、Qdrant
- 原生支持 Ollama 聊天与嵌入调用
- 支持 OpenAI 兼容 API 聊天模型接入
- Chat 与 Embedding 可分别配置 Provider、Base URL、Model、API Key
- 模型调用失败时支持降级提示,避免前端直接报错
- 文本自动切分与批量嵌入
- 候选结果动态召回
- 关键词覆盖增强重排
- MMR 去冗余选择
- 低置信度场景二次扩召回
- 嵌入缓存与可选语义缓存
- 可选 Hybrid Search、Semantic Reranker、Query Rewrite、Context Compression
- 本地个人知识库
- 团队内部文档问答
- 自托管 RAG 原型验证
- Ollama / OpenAI 兼容模型接入测试
- 检索策略实验与评估
| 层级 | 技术 |
|---|---|
| 后端 | Go + Gin |
| 前端 | React 18 + Vite 5 + TypeScript |
| 向量数据库 | Qdrant |
| 文档解析 | TXT / Markdown / PDF |
| 数据持久化 | JSON + SQLite |
| 模型接口 | Ollama / OpenAI Compatible API |
| 部署方式 | 本地启动 / Docker Compose |
ai-localbase/
├── backend/
│ ├── main.go
│ ├── internal/
│ │ ├── config/
│ │ ├── handler/
│ │ ├── model/
│ │ ├── router/
│ │ ├── service/
│ │ └── util/
│ ├── eval/
│ └── data/
├── frontend/
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── docker/
├── docs/
├── docker-compose.yml
├── docker-compose.qdrant.yml
└── docker-compose.app.yml
适合日常开发、调试接口、修改前端页面。
- Go 1.21+
- Node.js 18+
- Docker Desktop(用于启动 Qdrant)
- Ollama,或任意 OpenAI 兼容模型服务
在项目根目录执行:
docker compose -f docker-compose.qdrant.yml up -d启动后默认地址:
- HTTP:
http://localhost:6333 - gRPC:
localhost:6334
cd backend
go run .后端默认监听:http://localhost:8080
首次启动会自动创建:
backend/data/uploads/backend/data/app-state.jsonbackend/data/chat-history.db
cd frontend
npm install
npm run dev前端默认地址:http://localhost:5173
适合快速体验或自托管部署验证。
在项目根目录执行:
docker compose up --build默认启动以下服务:
| 服务 | 地址 |
|---|---|
| 前端 | http://localhost:4173 |
| 后端 | http://localhost:8080 |
| Qdrant HTTP API | http://localhost:6333 |
| Qdrant gRPC | localhost:6334 |
如果你不想本地编译,可以直接使用自动构建的 Docker 镜像:
docker compose -f docker-compose.prod.yml up -d前端地址:http://localhost:4173
后端地址:http://localhost:8080
📖 了解更多镜像构建、版本管理和部署细节,请查看 Docker 镜像与部署指南
如果你希望单独使用项目提供的完整应用编排文件,也可以执行:
docker compose -f docker-compose.app.yml up --build该文件同样会启动:
qdrantbackendfrontend
如果在启动或使用过程中遇到问题,请查看 故障排查指南,涵盖常见错误诊断、Docker + Ollama 集成、模型调用失败等问题的解决方案。
打开前端后,进入 Settings 页面,分别配置 Chat 与 Embedding。
Chat 配置
- Provider:
ollama - Base URL:
http://localhost:11434 - Model:
qwen2.5:7b或llama3.2 - API Key: 留空
Embedding 配置
- Provider:
ollama - Base URL:
http://localhost:11434 - Model:
bge-m3或nomic-embed-text - API Key: 留空
Chat 配置
- Provider:
openai - Base URL: 你的兼容接口地址,例如
https://your-api.example.com/v1 - Model: 对应聊天模型名
- API Key: 对应访问密钥
Embedding 配置
- Provider:
openai - Base URL: 你的兼容接口地址
- Model: 对应嵌入模型名
- API Key: 对应访问密钥
- 打开左侧知识库面板
- 创建一个新的知识库
- 选择 TXT、Markdown 或 PDF 文档上传
- 等待文档状态变为
indexed
- 切换到聊天界面
- 选择目标知识库
- 输入问题并发送
- 系统会自动完成检索、重排、上下文拼装与模型调用
默认本地数据位于:
backend/data/app-state.json:应用配置与知识库状态backend/data/chat-history.db:聊天记录backend/data/uploads/:上传文件
cd backend
go run .cd frontend
npm install
npm run devcd frontend
npm run buildcd backend
go test ./...docker compose -f docker-compose.qdrant.yml up -ddocker compose up --build后端环境变量由 backend/internal/config/config.go 加载,常用项如下:
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
8080 |
后端服务监听端口 |
UPLOAD_DIR |
data/uploads |
上传文件目录 |
STATE_FILE |
data/app-state.json |
应用状态文件 |
CHAT_HISTORY_FILE |
data/chat-history.db |
聊天记录 SQLite 文件 |
QDRANT_URL |
http://localhost:6333 |
Qdrant 地址 |
QDRANT_API_KEY |
空 | Qdrant API Key |
QDRANT_COLLECTION_PREFIX |
kb_ |
知识库集合名前缀 |
QDRANT_VECTOR_SIZE |
1024 |
向量维度 |
QDRANT_DISTANCE |
Cosine |
距离算法 |
QDRANT_TIMEOUT_SECONDS |
5 |
Qdrant 超时秒数 |
ENABLE_HYBRID_SEARCH |
false |
启用 Hybrid Search |
ENABLE_SEMANTIC_RERANKER |
false |
启用语义重排 |
ENABLE_QUERY_REWRITE |
false |
启用 Query Rewrite |
ENABLE_SEMANTIC_CACHE |
false |
启用语义缓存 |
ENABLE_CONTEXT_COMPRESSION |
false |
启用上下文压缩 |
注意:
QDRANT_VECTOR_SIZE必须与所使用的嵌入模型输出维度一致。切换嵌入模型时,如果维度变化,建议清理旧集合或创建新的知识库。
GET /:服务首页GET /health:健康检查POST /upload:通用上传入口
GET /api/configPUT /api/configGET /api/conversationsGET /api/conversations/:idPUT /api/conversations/:idDELETE /api/conversations/:idGET /api/knowledge-basesPOST /api/knowledge-basesDELETE /api/knowledge-bases/:idGET /api/knowledge-bases/:id/documentsPOST /api/knowledge-bases/:id/documentsDELETE /api/knowledge-bases/:id/documents/:documentId
POST /v1/chat/completionsPOST /v1/chat/completions/stream
当用户发起问题时,系统通常会执行以下步骤:
- 读取当前知识库与配置
- 为用户问题生成嵌入向量
- 在 Qdrant 中召回候选文档片段
- 对候选片段执行重排与去冗余
- 在低置信度场景下做二次扩召回
- 组装上下文并请求 Chat 模型
- 返回答案与命中文档来源
- 持久化当前会话记录
cd backend
go test ./...当前包含:
- 单元测试
- 检索策略测试
- 路由 E2E 测试
cd frontend
npm run build- 当前更适合本地单机或轻量自托管使用
- PDF 解析效果受文档排版复杂度影响
- 向量维度需与嵌入模型严格匹配
- 部分高级检索能力默认关闭,需通过环境变量手动启用
- 语义缓存、查询改写、上下文压缩等能力仍以实验性增强为主
- License: LICENSE
- 贡献指南: CONTRIBUTING.md
- 安全策略: SECURITY.md
- 更新记录: CHANGELOG.md
- 架构文档: docs/architecture.md
- 开源计划: docs/open-source-plan.md
- 嵌入维度自动适配
- 批量嵌入并发优化
- 更多文档类型支持
- 知识库导入与导出
- 多用户隔离与权限能力
如果这个项目对你有帮助,请给个 ⭐ Star!



