RAG 原理与技术选型
公开教程 · 无需登录

RAG 原理与技术选型

RAG(Retrieval-Augmented Generation,检索增强生成)先从资料中检索依据,再让生成模型依据这些证据作答。本课实现简短回答:仅当存在命中切片时才调用生成模型,并标注出处。流式长对话安排在第 5 课。

1RAG 解决什么问题

模型记忆中的知识,不等同于你的资料

大模型的参数中并不包含本校讲义,却仍可能把未见过的问题回答得煞有介事。RAG 的做法是:提问时先检索本班材料,将命中的切片连同出处一并交给模型,使回答能够回溯到原文。若未检索到依据,则不应生成任何内容。

1 切分长文切分为切片
2 嵌入文本转换为向量
3 入库正文入关系库,向量入向量库
4 检索关键字、向量或混合检索
5 生成有切片才生成简短回答
提问 只用这一句 检索本班切片 关键字、向量或混合 有切片 连同编号一并交给模型 简短回答 正文以 [1] 标注出处 没有切片 返回「资料中未找到相关内容」,不调用生成模型
先检索,再生成。当本班材料中不存在依据时,不将问题提交给生成模型。

2主流技术方案与本课选型

环节 常见技术 本课选型
切分 固定窗口、按分隔符、按标题层级;亦有按句子或语义边界切分的方法 自动窗口、自定义分隔符、Markdown 标题;默认约 800 字,重叠约 10%
嵌入 调用兼容 OpenAI /embeddings 接口的嵌入模型,得到固定维度的浮点向量 仅在服务端调用课程网关;向量维度与 Qdrant collection 保持一致,密钥不下发到浏览器
向量库 Qdrant、Milvus、pgvector、Chroma、Weaviate 等,相似度度量多采用余弦距离 Compose 中的 Qdrant;集合 campusclaw_chunks,度量方式为余弦
关键字 倒排索引。英文常用 BM25;中文须借助 ngram 或分词器,否则全文索引无法正确切词 MySQL FULLTEXT ... WITH PARSER ngram,token 长度为 2
混合排序 分数加权求和,或 RRF(Reciprocal Rank Fusion,倒数名次融合) 两路先按绝对分数过滤,再执行 RRF(k = 60)。名次分不是相关性阈值
重排序 使用交叉编码器对前若干条候选重新打分,通常比单次向量检索更准确,但延迟更高 本课不实现
编排框架 LangChain、LlamaIndex,以及 Dify 一类带可视化界面的知识库产品 不引入框架。由 Go 服务自行完成切分、向量嵌入与检索,便于对照规约逐条验收
切片正文保留在 MySQL,向量库仅保存向量与若干标识。向量主键等于 knowledge_chunks.id——这是本课的关联方式,而非将整段原文重复存入 Qdrant。
嵌入模块 输入:一段切片或问句 输出:一条向量 入库与向量检索时使用 关键字检索不调用该模块 对话模块 输入:材料标题、切片正文与问题 输出:带 [1] 标注的简短回答 仅在已检索到切片之后触发 没有依据时不触发该模块 浏览器 只调用本站 /api 不持有网关密钥 页面中不展示向量分量
嵌入与对话是两个独立模块、两次不同的调用。学生须区分「将文本转换为向量」与「依据切片撰写回答」这两件事。