RAG 系统测试题 — 参考答案
#RAG #测试 #答案
题目见 [[RAG_测试题]]
第一部分:概念理解
Q1. RAG 的全称及解决的三个核心问题
全称:Retrieval-Augmented Generation(检索增强生成)
解决的三个核心问题:
- 知识截止日期:LLM 训练有时间限制,RAG 通过动态检索外部知识库弥补
- 幻觉问题(Hallucination):LLM 可能编造不存在的内容,RAG 让它基于真实检索内容生成回答
- 私有知识无法访问:企业内部文档无法训练进 LLM,RAG 可以将私有文档存入向量库实时检索
Q2. 向量嵌入的正确说法:A、C
- A ✅ L2 距离越小 = 向量越近 = 语义越相似
- B ❌ text-embedding-v4 输出 1024 维向量,不是 512 维
- C ✅ 向量数据库支持按语义相似度搜索(近邻搜索)
- D ❌ 同一段文字经过同一个模型,每次得到的向量是确定性的(完全相同)
Q3. IVF_FLAT 参数含义
nlist=128:将向量空间聚类成 128 个簇,建索引时使用nprobe=10:查询时只搜索最近的 10 个簇(而不是全部128个),是速度和精度的权衡- 提高精度的调整方式:增大
nprobe(例如从10增大到30)。nprobe 越大,搜索的簇越多,精度越高,但查询越慢。也可以适当增大 nlist(需要重建索引)。
Q4. 混合搜索权重与分数计算
- 向量搜索权重:0.7(70%)
- 关键词搜索权重:0.3(30%)
- 融合分数公式:其中
1final_score = 0.7 × vector_similarity + 0.3 × keyword_scorevector_similarity = 1 / (1 + L2_distance)
Q5. 意图识别的作用与四个分类
作用:在检索之前先判断问题领域,实现领域过滤,只在相关领域的文档中搜索,提升检索精准度;同时对于低置信度的通用问题,可以跳过 RAG 直接调用 LLM 节省资源。
四个分类:
law(法律)finance(金融)ai(人工智能)general(通用)
第二部分:系统架构
Q6. 三层服务架构
| |
外部 LLM:阿里 DashScope API(qwen-plus + text-embedding-v4)
Q7. 完整版 vs 简化版
- 完整版
rag_service.py:端口 8001 - 简化版
rag_service_simple.py:端口 8002
完整版比简化版多出的三个功能(任选三个):
- 意图识别(判断领域,领域过滤)
- 查询扩展(生成3个变体查询,提升召回率)
- 多轮对话(Session 管理,维护对话历史)
- 流式输出(SSE 协议,实时返回内容)
- 详细引用溯源(引用片段内容+相关性分数)
Q8. Collection 字段及作用
| 字段 | 类型 | 作用 |
|---|---|---|
id | INT64(主键,自增) | 文档唯一标识 |
text | VARCHAR(最大65535字符) | 存储文档块的实际文本内容 |
embedding | FLOAT_VECTOR(1024维) | 文本对应的向量,用于语义搜索 |
source | VARCHAR(最大500字符) | 来源文件名,如 ai_dev.md |
section | VARCHAR(最大500字符) | 所属章节/标题,用于引用溯源 |
keywords | VARCHAR(最大1000字符) | jieba 提取的关键词,用于关键词搜索 |
Q9. 中文分词工具
- 工具:jieba
- 提取结果存储在:
keywords字段(空格分隔的关键词字符串) - 用于:关键词搜索(通过
LIKE '%关键词%'进行过滤匹配)
Q10. LLM 相关配置
- 公司:阿里巴巴
- 聊天模型:qwen-plus(通义千问 Plus)
- Embedding 模型:text-embedding-v4(1024维输出)
- 需要的 API Key:DASHSCOPE_API_KEY(存储在
.env文件中) - Base URL:
https://dashscope.aliyuncs.com/compatible-mode/v1(兼容 OpenAI SDK 格式)
第三部分:数据流程
Q11. 数据入库流程
- 读取
milvus.doc/目录下的 Markdown 文件(ai_dev.md、fin.md、law.md) - 按
##和###标题对文档进行切块(Chunking),每块携带 source 和 section 信息 - 对每个文本块进行文本预处理(去除多余空白等)
- 并行处理两件事:
- 调用
text-embedding-v4生成 1024 维向量 - 用 jieba 分词提取关键词字符串
- 调用
- 将
{text, embedding, source, section, keywords}批量插入 Milvus - 在 embedding 字段上创建 IVF_FLAT 索引(nlist=128)
- 将 Collection 加载到内存,准备查询
Q12. 完整版 RAG 查询流程
问题:“人工智能在金融行业有哪些应用?”
- 意图识别:LLM 判断 → 可能返回
{domain: "finance", confidence: 0.7}或{domain: "ai", confidence: 0.8}(跨领域问题) - 查询扩展:生成3个变体,如:
- “AI技术在银行、证券行业的具体应用”
- “机器学习在金融风控中的使用案例”
- “人工智能在投资决策中的角色”
- 混合检索:4个问题(原问题+3个变体)分别做向量搜索和关键词搜索
- 结果融合去重:合并所有结果,按
0.7×向量分+0.3×关键词分打分排序,去重 - 取 Top-5 文档块:选出最相关的5个文档片段
- 构建 Context Prompt:将5个片段格式化为[参考1][参考2]…形式
- 调用 qwen-plus:发送"问题+参考资料",指示模型基于参考资料回答并引用
- 返回结果:包含 answer、sources列表、domain、expanded_queries、referenced_fragments
Q13. 查询扩展的核心思路与示例
核心思路:用 LLM 从不同角度/措辞重新表达原始问题,生成多个语义等价但表述不同的查询,扩大检索覆盖面,提高召回率。
“什么是机器学习?“的可能扩展:
- “机器学习的定义和基本概念是什么?"(换措辞)
- “机器学习和传统编程有什么区别?"(对比角度)
- “监督学习、无监督学习、强化学习有什么区别?"(细化分类)
Q14. L2 距离与相似度的关系
- L2 距离(欧氏距离):值越小 → 向量越近 → 越相似;值越大 → 越不相似
- 问题:L2 距离范围是 [0, +∞),不直观
- 转换公式:
similarity = 1 / (1 + L2_distance)- distance=0 → similarity=1.0(完全相同)
- distance=1 → similarity=0.5
- distance=∞ → similarity→0
- 这样相似度被归一化到 (0, 1] 区间,便于与关键词分数做加权融合
第四部分:代码理解
Q15. 代码分析
a. 为什么用 top_k * 2?
为了给后续的融合和去重留出空间。两路搜索各取更多结果(top_k×2),融合后去重,最终再从合并结果中选出真正的 top_k。如果两路都只取 top_k,去重后结果可能不足 top_k 条。
b. 1 / (1 + r.distance) 的作用?distance=0 时的结果?
作用:将 L2 距离(越小越好)转换为相似度分数(越大越好),归一化到 (0, 1]。
- distance=0 时:
1 / (1+0) = 1.0(最高相似度)
c. 同时出现在两路结果中的文档,最终分数?
| |
这类文档既语义相关又含关键词,会获得更高的综合分数,排名更靠前——这正是混合搜索的优势。
Q16. Prompt 要求与 temperature 的差异
RAG Prompt 要求 LLM:
- 基于提供的参考资料来回答问题(不要凭空捏造)
- 引用相关参考,格式为
[参考N] - 如果参考资料不包含答案,诚实说明
temperature 差异的原因:
| 场景 | temperature | 原因 |
|---|---|---|
| 意图识别 | 0.1(很低) | 需要确定性的分类结果,低温度让输出更稳定可预测,不需要创意 |
| 查询扩展 | 0.7(较高) | 需要多样性的问题变体,高温度鼓励创造性,生成不同角度的查询 |
| 回答生成 | 0.7(中等) | 平衡准确性和流畅性,既基于事实又能自然表达 |
第五部分:优化与扩展
Q17. 切块策略问题与改进
当前策略:按 ## 和 ### Markdown 标题切割
潜在问题:
- 一个章节可能非常长,超过 LLM 的 token 限制
- 一段连续的内容可能被标题人为分割,丢失上下文连贯性
- 对没有良好标题结构的文档效果差
两种改进方案:
方案1:滑动窗口切块(固定大小+重叠)
| |
方案2:父子切块(Parent-Child Chunking)
| |
Q18. 重排序(Reranking)
是什么:Reranker 是一种交叉编码器(Cross-Encoder)模型,它同时接受"查询"和"候选文档"作为输入,计算两者的相关性分数。
在 RAG 流程中的位置:
| |
比向量相似度排序的优势:
- 向量相似度是独立计算 Query 和 Document 的,再比较(双编码器)
- Reranker 让 Query 和 Document 互相关注(交叉注意力),能更准确地判断相关性
- 代价是速度较慢,所以先粗排再精排,取得速度和精度的平衡
Q19. RAG 评估指标含义
| 指标 | 含义 | 评估什么 |
|---|---|---|
faithfulness(忠实度) | 生成的回答是否完全基于检索到的上下文,没有引入外部知识或捏造 | 防幻觉能力 |
answer_relevancy(回答相关性) | 生成的回答是否真正回答了用户的问题 | 回答是否跑题 |
context_precision(上下文精确率) | 检索到的文档中,有多少是真正相关的(精确率) | 检索是否引入了噪声 |
context_recall(上下文召回率) | 回答问题所需的信息是否都被检索到了(召回率) | 检索是否遗漏了重要内容 |
Q20. 法律文书查询场景的针对性改进
专业词汇处理:添加法律领域词典到 jieba,确保"原告”、“被告”、“诉讼时效"等法律术语能被正确分词,不被拆散
结构化元数据:在数据库中增加
law_type(刑事/民事/行政)、jurisdiction(管辖地)、effective_date(生效日期)等字段,支持精确过滤调低 temperature,提高准确性:法律场景不能有模糊表述,将生成温度调低至 0.3 以下,减少创意性内容,增强答案准确性
强化引用溯源:每条回答必须附带具体法条编号(如《民法典》第 577 条),并显示原文文本,不允许模糊表述
增加免责声明:在系统 Prompt 中要求模型声明"本回答仅供参考,具体法律问题请咨询专业律师”
细粒度权限控制:按用户角色(律师/法官/普通用户)过滤可查询的文档范围,防止敏感文书泄露
评分建议:每题5分,满分100分。建议先独立作答,再对照答案,重点关注答错的概念。