1、什么场景应该选择RAG而不是Fine-tuning?
RAG是给模型外挂知识库,Fine-tuning是模型微调,用自己的数据再训练模型,让模型具备某些能力,相当于把数据压缩到模型中。
1、知识需要频繁更新,比如:产品文档、政策、内部资料等,用RAG只需要更新向量库
2、需要引用知识的来源,比如:告诉用户答案的引用文档
3、数据量有限,Fine-tuning需要大量高质量数据,RAG有多少用多少,门槛低。
4、预算,rag开发快、部署简单、成本低,微调贵、慢、门槛高
2、文档分块策略有哪些?
1、固定长度
按字符数/Token数切分,实现简单,块大小可控,可能切断句子,破坏语义
适合:结构混乱、无格式、纯文本
2、LLM语义切片
用LLM判断语义边界,语义完整性最好,成本高,速度慢
适合:对精度要求极高、不差成本的场景
3、层次切片
按文档结构(标题/章节)切分,需要文档有清晰结构
适合:手册、文档、论文、说明书
4、滑动窗口
固定窗口 + 重叠区域,保留上下文连续性,存储空间增加、有冗余
适合:长文本、小说、连续叙述类内容
3、项目中用了什么分块策略?为什么选它?
句子切分:按标点符号切,比如:句号、问号、感叹号、换行、顿号,分好等。
示例:
项目中用滑动窗口 + 句子边界的混合策略
按句子边界切分,保证每个块语义完整
使用滑动窗口,设置20%重叠,确保跨块的信息不会丢失
【原因】
产品文档,内容之间有上下文依赖
小块检索精度高,但可能丢上下文
大块上下文完整,但噪声多,检索精度下降
20%重叠在存储开销和检索质量间取得平衡
4、描述下RAG系统流程?
R = Retrieve(检索)
A = Augmented(增强)
G = Generate(生成)
先从知识库中查资料
把查询的资料和用户问题给大模型
大模型根据这些上下文,生成答案
详细步骤如下,可以采用框架qwen-Agent、langchain等框架快速搭建
1、文档解析
将PDF、word、excel、html等非结构化文档中提取文本
2、文档切块
将长文档切分小块
3、向量化
使用Embedding模型将文本块向量化,比如:text-embedding-v4
4、向量存储
将向量存入向量数据库,构建知识库
5、向量检索
将用户问题向量化,再向量数据库中匹配,召回top-k个
6、rerank
使用rerank模型,对上一步的top-k,再精确匹配,找出最优的几个匹配项
7、prompt构建
将检索到的上下文,拼接到提示词中,作为LLM的上下文
8、生成
LLM根据上一步输入,生成回答
5、你在项目中用了哪个 Embedding 模型?为什么选它?
示例:
使用了 text-embedding-v4
【原因】
1、模型在中文理解上表现好
2、维度支持512/1024,选择1024,在精度和存储上平衡
3、生态兼容: 与通义千问系列模型配合使用,可无缝对接 LangChain、Qwen-Agent 等 RAG 框架,降低开发与运维复杂度
备注:
512维:一句话512个特征标签
1024维:一句话1024个特征标

6、如果RAG效果很差,你会从哪几个方面去调试?
【数据质量问题】
1、本身提供的数据文档错误、不准确。
【检索阶段】
1、召回内容不符合要求
a、top-k数量不够,增加top-k数量
b、相关性太低,更换Embedding模型,比如:更适配中卫的Embedding模型
2、排查文档分块
a、分块太大,噪声多,检索不准(减小chunk_size,添加Rerank)
b、分块太小,上下文丢失(增大chunk_size,增加overlap)
3、用户口语化问题
a、用户口语化问题未检索到,使用query改写,让问题更规范,提升检索匹配度
【生成阶段】
1、LLM生成能力不足,理解力差,更换模型
2、LLM幻觉,未遵循上下文
强化prompt指令,"请严格基于提供的上下文回答,不要编造内容"
3、生成的答案很简洁
修改Prompt指令,要求详细回答、按指定格式输出
7、向量检索有什么缺点?什么是混合检索?
向量检索是语义匹配,BM25是关键词匹配
向量检索缺点:可能匹配不准
1、对精确关键词匹配不敏感 (如产品型号、人名)
比如产品型号、人名、编号、术语,只看语义相似度,不看字面是否完全一致。
2、容易匹配不准,甚至漏掉字面完全匹配的内容
语义相似但实际不是同一个东西,也会被召回
混合检索 = 向量检索 + BM25匹配,结合向量检索和关键词匹配相结合。
【示例】
缺点 1:对精确关键词、编号、型号不敏感
例子:
文档里有:"苹果 15 Pro 电池容量 4400mAh"
用户问:"苹果 15 电池多少?"
向量检索可能会把
"苹果 14"、"苹果 15 标准版"、"苹果 15 Pro Max"
都当成语义相似,把正确的排到后面去。因为向量看语义,不看精确字。
8、RAG如何处理超长文档?
1、分层索引: 先检索摘要,再检索详细段落
2、长上下文模型: 使用支持128K+的模型 (如Qwen, Claude)
3、滑动窗口: 块之间重叠,保留上下文的分块策略
9、如何防止 LLM 幻觉?
1、Prompt明确指令,"仅基于背景知识回答,不确定时直接说不知道"
2、让LLM标注答案引用的来源
要求答案中标注来自哪段文档,避免无依据编造。
3、rerank重排
保证召回的上下文是准确、相关的
4、答案验证: 用另一个LLM检查答案是否有上下文支撑
5、降低 temperature: 减少随机性
减小生成随机性,让模型输出更保守、更稳定。
10、多模态 RAG 怎么做?
使用同一个多模态Embedding模型,将文本、图片映射到同一向量空间。
1、图片处理
使用多模态Embedding模型,将图片向量化
2、表格
转换为Markdown或json格式,保留结构,再进行向量化
3、PDF
文本通过解析提取,图片 / 图表通过 OCR 识别,分开处理后统一索引。
4、视频处理
视频抽帧得到图像,语音转文字得到文本,分别向量化后建立多模态索引。