Files
rag-local/README.md
T
2026-08-05 10:28:44 +08:00

120 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/ 实现方案文档
```