项目面向 IT 运维(建设维护)团队,服务对象约 20 名运维人员。团队长期积累了约 1 万份运维方案、操作手册、故障处理记录和制度文件,格式有 PDF、Word、Excel、PPT 等,过去分散在个人电脑和共享盘里,存在几个问题:
- 找资料靠问人;
- 文档多人同时修改容易互相覆盖,也没有历史版本;
- 处理故障主要靠个人经验,新人上手慢;
- 部分文档里有账号口令等敏感内容,没有权限隔离。
1. 文档管理:上传、分类管理(层级不限,可跨分类移动)、借出锁定与归还(锁写不锁读,同一时间只有一个人能编辑;锁超时由定时任务自动释放)、版本链与一键回退、回收站,以及完整的操作审计。
2. 权限控制:分公共文档和私密文档,可按人或按角色授权。权限在检索层强制生效,用户检索不到无权限的内容,连片段也看不到。
3. 全文检索:关键词和语义混合检索,结果显示原文片段并高亮命中词,可按分类筛选,检索历史保存在浏览器本地。
4. AI 总结:对检索结果一键生成归纳答案,每条结论都标注来源编号,点击可跳到原文;没有找到资料时直接说明,不让模型自由发挥。
5. 故障案例库:故障按结构化案例录入(现象/报错原文、根因、处置步骤、验证方法),可关联告警。用户描述故障后,AI 给出带出处的处置建议,并可反馈"有用/没用",反馈结果参与后续排序。
6. 在线预览与安全下载:PDF 和 Office 文档可在线预览;下载使用一次性票据,权限要求与预览一致。
7. 自动灌库与敏感信息扫描:上传后自动完成解析、切分和向量化入库。入库前扫描口令、密钥等敏感信息,在检索库中打码。
后端基于 Spring Boot 4 / Java 17,用 MyBatis 访问数据,用 Spring Security + JWT 做鉴权,Redis 存会话和一次性票据,Quartz 跑定时任务。前端用 Vue 2 + Element UI。文档解析用 RAGFlow(DeepDoc 版面分析 +
OCR),检索引擎是 Elasticsearch 8(BM25 关键词检索 + 向量混合检索,IK 中文分词)。向量模型为 bge-m3,通过 TEI 部署成服务,并配有重排模型。生成模型是 Qwen3-4B(GGUF 量化),由 llama.cpp 在纯 CPU
上推理。原文件存在 MinIO,用 AES-256-GCM 做应用层加密,磁盘分区再加 LUKS 加密,解密后的明文只放在 tmpfs 内存盘里。在线预览用 Gotenberg 把 Office 文档转成 PDF,再由 PDF.js 显示。服务统一用 Docker Compose
部署,nginx 负责请求转发,systemd 管理防火墙规则。
亮点与难点
1. 权限过滤下沉到检索层(安全核心):RAGFlow 原生没有文档级权限控制。项目对它做了 2 个文件、6 处 patch,在检索时强制注入 acl_kwd
权限过滤,缺少过滤条件时直接拒绝请求(fail-closed)。实测中发现,用两个字段表达权限会被 ES 按 AND 组合,导致结果错误,最后改为单字段。权限变更通过"待同步表 + 定时重试"异步写入 ES,返回结果前再用 MySQL
做一次权限校验,形成双保险。
2. 全链路应用层加密:每个文件的每个版本使用独立的 AES-256-GCM 数据密钥(DEK),DEK 再由主密钥(KEK)加密后存入 MySQL;MinIO 里只存密文,解密后的明文只出现在内存或 tmpfs
中,不写普通磁盘。数据所在分区再加一层 LUKS 加密。下载改为经过后端解密后流式返回,一次性票据通过 Redis GETDEL 原子消费,保证只能用一次。nginx 关闭上传和下载缓冲,避免明文落到网关服务器的磁盘上。
3. 纯 CPU 环境下的大模型落地:在无 GPU、内存通道只插了一半的服务器上实测后,选用了 Qwen3-4B。实现上严格控制喂给模型的上下文(只取前 5 条资料,总共不超过 3000 字),用信号量做"1 路执行 + 有限排队 +
超时拒绝"的并发控制,并通过提示词防注入、校验出处编号来抑制幻觉。实测单次回答约 2~5 秒。另外,检索和解析会争抢向量服务导致检索变慢,调整批大小和解析并发后,检索最慢耗时从 6.6 秒降到 2.0 秒。
4. 借出锁与版本链:采用"锁写不锁读",版本链只追加不修改,回退本身也会生成一个新版本,任何操作都可以追溯。每个关键操作都写入审计记录。
5. 故障知识结构化:故障案例不当作普通文档切片入库,一条案例就是一个检索单元,处置步骤不会被切断。报错码、日志关键字靠 BM25 精确匹配,避免向量检索分不清相近的错误码(例如 ORA-01555 和 ORA-01552)。
6. 工程质量:两百多个单元测试覆盖核心逻辑;每项功能都在真实的 MySQL、MinIO、ES 上做过端到端验证;部署脚本在部署前强制校验配置项。整个项目在一台与其他业务共用的服务器上完成:存储重新分区、配
LUKS、镜像只能从受限源拉取,没有影响其他业务的数据。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论