e54c3fff84dada6bb6417ddaea9d422a734a167b
rag-local 本地知识库
纯本地的 RAG(检索增强生成)知识库系统,基于 SQLite 全栈文件型存储,无外部数据库依赖。
功能
- 文档流水线:上传 txt / md / pdf / docx / html → 自动解析 → 标题感知分块 → 向量化 + 全文索引
- 混合检索:sqlite-vec 向量 KNN + FTS5 全文 BM25,RRF 融合排序,中文 gse 分词
- RAG 问答:SSE 流式对话,检索引用(含来源与得分)随回答展示,会话历史持久化
- 知识图谱:解析时 LLM 抽取实体与关系,问答时实体链接 + 一跳邻居注入提示词,图谱页可视化实体/关系
- 单用户门禁:启动生成访问令牌,登录后 JWT 鉴权
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Go + GoFrame v2 + Eino(LLM 编排) |
| 存储 | SQLite(modernc 纯 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)
docker compose up -d --build
- 浏览器打开 http://localhost:8080
- 启动日志中查看访问令牌(
docker compose logs rag-local搜索"访问令牌") - 登录后按以下流程使用:
- 设置 页添加对话模型与向量模型(OpenAI 兼容接口,如 Ollama / vLLM / one-api),并点击"测试"验证连通
- 数据集 页新建数据集,绑定向量模型(不绑定则仅全文检索)
- 进入数据集上传文档,等待解析完成
- 问答 页选择知识库开始提问,回答可展开查看引用来源
- 知识图谱 页查看解析时抽取的实体与关系
数据保存在 ./data 与 ./workspace,删除容器不丢失。
本地开发
# 后端(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):
# 拉取模型
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/ 实现方案文档
Languages
Go
68.5%
Vue
26.6%
JavaScript
2.9%
Shell
1.6%
Dockerfile
0.4%