什么是RAG,为什么要用RAG
RAG 定义
RAG = Retrieval-Augmented Generation,检索增强生成简单一句话:先检索、再生成。 大模型本身有固定的训练知识库,存在知识滞后、不知道你的私有资料(中北大学校园资料);RAG 把本地私有文档(你的校园 FAQ、校情介绍、培养方案)向量化存入向量数据库。用户提问时:
- 把用户问题转为向量,去向量库检索最相关的片段(检索阶段)
- 将检索出来的参考资料连同用户问题一起塞给大模型
- 大模型基于给的参考资料来组织语言回答(生成阶段)
- ✅私有知识:GLM 大模型的训练数据里没有最新中北选课、图书馆、校内通知这类专属校园资料,不做 RAG 它会瞎编。
- ✅减少幻觉:强制 AI 必须基于提供的文档回答,没有资料就回答 “暂无相关信息”,不能编造。
- ✅低成本:不用微调大模型,只准备文本知识库,节省算力和时间,非常适合毕设。
- ✅可更新:校园政策变了,只需要更新 txt 知识库,重建向量库,不用重新训练模型。
- ✅控制上下文长度:不会一次性把全部校园文档丢给大模型,只把和问题相关的片段传入,节省 token、降低接口费用。
如何准备和清洗校园数据
校园数据是 RAG 系统的知识底座,数据质量直接决定回答效果。建议从以下三个维度准备和清洗:
- 数据来源:优先收集教务处选课通知、图书馆开放时间、校历、培养方案、校园 FAQ 等官方文档,确保信息权威、口径统一。
- 清洗要点:去除页眉页脚、广告和重复段落;统一日期、时间、地点等格式;对 PDF 转文本产生的乱码和多余换行做归一化处理。
- 组织方式:按主题拆分文档(如选课、宿舍、图书馆),每个主题下保留完整语义段落,便于后续按块切分时保持上下文连贯。
文本分割的技巧(chunk_size、chunk_overlap 怎么调)
文本分割直接影响检索召回质量,建议按以下思路调参:
- chunk_size:一般从 200 到 500 字起步。校园问答多为短句,建议先用 300 字左右测试,再根据回答完整度微调。
- chunk_overlap:建议设为 chunk_size 的 10% 到 20%,避免关键信息恰好被切在边界上导致漏检。
- 验证方法:准备一组典型校园问题,逐个检查检索结果是否命中正确答案,据此反向调整参数。
中文嵌入模型的选择(为什么用 paraphrase-multilingual-MiniLM-L12-v2)
该模型支持中文在内的多种语言,体积小、推理快,适合毕设场景在本地 CPU 上运行。它能把中文问句和校园文档映射到同一向量空间,保证跨语言和同语言检索都能取得稳定效果。
向量检索的原理和效果展示
向量检索的核心是把用户问题编码为向量,再与知识库中的文档向量计算相似度,返回最相关的若干片段。效果展示建议包含:检索命中的原文片段、相似度得分,以及最终生成的回答,方便直观对比不同参数下的表现。
踩坑记录(编码问题?模型下载太慢?)
常见问题包括:读取 txt 时中文乱码(建议统一用 UTF-8 编码)、模型首次下载较慢(可提前下载到本地缓存)、向量库重建耗时(建议增量更新而非全量重建)。把这些坑记录下来,既能帮助自己排查,也能让读者少走弯路。