trace 是RAG检索链路的全链路追踪日志对象
用来把检索每一步中间结果打包保存,方便调试、看每一步发生了什么。
python
trace={
"original_query":question,
"vector_results":vector_results,
"keyword_results":keyword_results,
"fused_results":fused,
"final_evidence":evidence
}
逐个字段
-
original_query
用户原始查询问题,例:
数字化补贴申报材料 -
vector_results
向量检索结果 :向量库根据语义相似度召回的chunk列表,附带向量相似度分数。
只看语义,不看关键词字面。
-
keyword_results
关键词检索(BM25)结果:分词后按关键词字面匹配召回的chunk,是传统文本检索。
-
fused_results
融合结果(RRF融合) :把vector_results + keyword_results两套结果,用RRF算法合并、重新排序,输出
rrf_score。👉 就是粗召回的候选列表,对应你日志里top6候选。
-
final_evidence
经过重排+分数过滤之后,最终输出的证据列表
- hybrid:直接拿fused_results,不做rerank
- hybrid_rerank / full:对 fused_results 跑BGE重排,生成
rerank_score,再按min_score过滤,得到final_evidence。
完整链路对应trace
原始question
↓
vector_results(向量召回) + keyword_results(bm25关键词召回)
↓ RRF融合
fused_results(粗排top6,带rrf_score)
↓ 【可选】rerank打分 + min_score过滤
final_evidence(最终给大模型的上下文证据)
trace作用
- 开发调试:查看哪一步丢了文档、哪一步分数异常
- 对比:看向量召回、关键词召回各自召回了哪些chunk,融合后怎么变、重排过滤删掉了哪些
- 评估RAG:统计召回、重排、过滤各个阶段的命中率
结合你刚才的例子:
fused_results 有6条候选,full模式经过rerank+min_score=0.6过滤后,final_evidence只剩1条。