项目概述
基于 RAG
技术实现基于文档内容的精准问答,支持在线演示(预置文档)与本地部署(自定义文档)双模式。
核心功能
支持 PDF/TXT/MD/DOCX
多格式文档上传;查询扩展与同义词映射增强召回;三路混合检索(向量相似度+关键词覆盖率+人名加权)+
两阶段排序优化相关性;SSE 流式输出 + 心跳保活。
Vue3
Vue Router
Node.js
Express
向量相似度计算
LLM API集成
SSE流式传输
-
多格式文档解析兼容性:PDF 和 DOCX
解析时遇到中文乱码、表格丢失等问题。通过组合使用 pdf-parse
和 mammoth.js,针对不同格式选择最优解析器。上传环节通过
iconv-lite 实现文件名编码自动检测,支持 UTF-8、GBK、GB2312
等多种编码转换,解决了中文文件名乱码问题。
-
检索召回率低,答非所问:向量检索对专业术语召回差、停用词过滤过度。采用查询长度自适应混合检索(长查询≥8字:向量60%+关键词30%+人名10%;短查询<
8字:向量50%+关键词40%+人名10%),并通过 expandQuery
同义词映射表扩展查询意图(如"rag"自动扩展为"检索增强生成
RAG
知识库问答"),优化停用词表。两阶段排序:先混合检索取候选集,再用关键词覆盖度
Rerank(混合分数80%+覆盖度20%),显著提升相关性。
-
大模型幻觉问题:LLM
可能编造文档外内容。通过 temperature=0.1 + top_p=0.5
压缩采样随机性,并在 Prompt
中设置多层约束(禁止编造、禁止外泄知识、兜底话术"根据现有资料无法回答"),同时在文件名拼接
Prompt 前通过 sanitizeFileName
过滤特殊字符,防止格式注入干扰模型输出。
-
API 调用不稳定: 向量化和 LLM
推理依赖外部
API,网络波动导致请求失败。实现指数退避重试机制(最大重试
3 次,基础延迟 1 秒),并对错误分类处理(4xx
客户端错误立即返回、429
限流/5xx/网络错误自动重试)。同时接入 express-rate-limit
做接口限流(每分钟 10 次),防止恶意调用。
-
SSE 长连接断开:RAG 问答采用 SSE
流式返回答案,长时间无数据传输导致连接被代理服务器断开。增加心跳保活机制(每
15 秒发送一次心跳包),保持连接稳定。