RAG 是“先检索资料,再让模型结合资料回答”。它通常不重新训练模型,而是在每次提问时补充相关文本。
两条处理链
flowchart LR F[文件] --> T[提取文本] T --> C[切成片段] C --> E[Embedding向量化] E --> S[保存文本 元数据 向量] Q[问题] --> QE[同一Embedding模型] QE --> R[检索片段] S --> R R --> L[与问题一起交给聊天模型] L --> A[回答与来源]Embedding 模型负责把文本变成向量,聊天模型负责生成回答。二者可以不同;文档向量和问题向量必须来自兼容的模型与配置。维度相同也不代表不同模型的向量可以混用。
为什么要切片
整份文件可能超出模型限制,也可能把多个话题混在一起。切片保留标题、来源和版本,便于检索并定位原文。片段过短会丢上下文,过长会引入无关内容,需要用真实问题比较效果。
向量相似度表示检索排序依据,不是“答案正确概率”。阈值的含义与距离算法和库有关,不能从 metadata 中随意读取一个 distance 再当统一置信度。
怎样确认链路可用
先准备一份自己能核对的短文本:例如设备说明包含“RTSP 端口为 8554”。导入后查询“RTSP 端口是多少”,先检查检索片段是否命中,再检查答案。补测文本里没有答案的问题,观察是否明确说明资料不足。
没有检索结果时,可由程序直接返回“未找到相关资料”,避免仍调用模型要求它自行判断。命中也不保证生成正确,应保留来源并对照原文。提示词不能独自保证零幻觉。
资料管理
记录文件 ID、内容版本、片段 ID、模型与维度。重复导入需要更新或删除旧片段,不应不停新增副本。多用户知识库在检索前应用服务端权限过滤,不能只在前端隐藏资料。
先做 单文件检索实验。跑通以后,再添加 PDF 解析、增量更新或问答接口,不需要一开始堆上传、消息队列和多个向量库。
参考:Spring AI ETL、向量库。
评论