This commit is contained in:
2026-08-05 10:28:44 +08:00
commit 0bacf2e0a4
103 changed files with 9415 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
# rag-local 本地知识库
纯本地的 RAG(检索增强生成)知识库系统,基于 SQLite 全栈文件型存储,无外部数据库依赖。
## 功能
- **文档流水线**:上传 txt / md / pdf / docx / html → 自动解析 → 标题感知分块 → 向量化 + 全文索引
- **混合检索**sqlite-vec 向量 KNN + FTS5 全文 BM25RRF 融合排序,中文 gse 分词
- **RAG 问答**:SSE 流式对话,检索引用(含来源与得分)随回答展示,会话历史持久化
- **知识图谱**:解析时 LLM 抽取实体与关系,问答时实体链接 + 一跳邻居注入提示词,图谱页可视化实体/关系
- **单用户门禁**:启动生成访问令牌,登录后 JWT 鉴权
## 技术栈
| 层 | 技术 |
|---|---|
| 后端 | Go + GoFrame v2 + EinoLLM 编排) |
| 存储 | SQLitemodernc 纯 Go 驱动 + sqlite-vec 扩展) |
| 全文 | SQLite FTS5 + gse 中文分词 |
| 前端 | Vue 3 + Element Plus + Vite(前后端不分离,单端口) |
| 部署 | Docker Compose 一键启动 |
三个 SQLite 文件各司其职:
| 库 | 文件 | 内容 |
|---|---|---|
| business | `data/business.db` | 数据集/文档/分块/向量/全文/解析任务/知识图谱 |
| system | `data/system.db` | 系统配置(令牌、默认模型)与模型配置 |
| chat | `data/chat.db` | 会话与消息 |
## 快速开始(Docker
```bash
docker compose up -d --build
```
- 浏览器打开 http://localhost:8080
- 启动日志中查看访问令牌(`docker compose logs rag-local` 搜索"访问令牌"
- 登录后按以下流程使用:
1. **设置** 页添加对话模型与向量模型(OpenAI 兼容接口,如 Ollama / vLLM / one-api),并点击"测试"验证连通
2. **数据集** 页新建数据集,绑定向量模型(不绑定则仅全文检索)
3. 进入数据集上传文档,等待解析完成
4. **问答** 页选择知识库开始提问,回答可展开查看引用来源
5. **知识图谱** 页查看解析时抽取的实体与关系
数据保存在 `./data``./workspace`,删除容器不丢失。
## 本地开发
```bash
# 后端(Go 1.26+
go run . # 监听 :8080,启动日志打印访问令牌
# 前端(开发热更新)
cd ui-src
npm install
npm run dev # Vite 开发服务器,API 代理见 vite.config.js
```
生产构建时前端产物在 `ui-src/dist`,由 Go 直接托管。
## 模型配置
任意 OpenAI 兼容接口均可使用:
- **对话模型**`/v1/chat/completions`,支持 SSE 流式):用于问答与知识图谱实体抽取
- **向量模型**`/v1/embeddings`):用于分块向量化与语义检索;维度须与 `config.yml``vector.dim` 一致(默认 1024
示例(Ollama):
```bash
# 拉取模型
ollama pull qwen2.5:7b
ollama pull nomic-embed-text
# 设置页配置:
# 对话模型:endpoint http://localhost:11434/v1,模型名 qwen2.5:7b
# 向量模型:endpoint http://localhost:11434/v1,模型名 nomic-embed-text,维度 768
```
> 注意:向量维度变更需清空 `data/business.db` 重建(vec0 表建表维度固定)。
## 配置说明(config.yml
| 配置 | 说明 |
|---|---|
| `server.address` | 监听地址,默认 `:8080` |
| `server.clientMaxBodySize` | 上传文件上限,默认 200MB |
| `vector.dim` | 向量维度,须与向量模型一致 |
| `database.cache.ttl` | DAO 查询缓存秒数 |
## API 概览
| 分组 | 接口 |
|---|---|
| `/system-config` | 登录、设置读写、令牌查看/重新生成 |
| `/model-config` | 模型配置 CRUD、连通性测试 |
| `/dataset` | 数据集 CRUD |
| `/document` | 上传、列表、删除、重新向量化 |
| `/chunk` | 分块列表、编辑(改后自动重向量化) |
| `/parse-task` | 解析任务列表、失败重试 |
| `/conversation` `/message` | 会话管理、消息列表、SSE 问答流(`/message/chat` |
| `/kg-entity` `/kg-relation` | 知识图谱实体/关系列表 |
所有接口除 `/system-config/login` 外均需 `Authorization: Bearer <JWT>`
## 项目结构
```
common/ 通用层:HTTP 服务/鉴权/文件解析/中文分词/向量 JSON
kb/
consts/ 表名、状态、常量
model/ entity / dto / domain
dao/ 数据访问(每表一个文件)
service/ 业务逻辑(每表一个文件 + chat_service 问答编排)
controller/ 接口层(每表一个文件)
ui-src/ Vue 3 前端
docs/ 实现方案文档
```