微信扫码
添加专属顾问
我要投稿
RAG应用中追踪回答与检索片段的对应关系,是提升回答可解释性和准确性的关键步骤,尤其在金融、医疗等合规场景中尤为重要。核心内容: 1. 追踪回答与检索片段对应关系的四大核心价值 2. 基于llamaindex的CitationQueryEngine技术实现方案 3. 关键参数配置与常见问题解析
在 RAG(检索增强生成)应用中,回答内容与检索片段(Chunk)的对应关系追踪是实现回答可解释性、准确性验证和错误溯源的关键环节。以下从追踪目的、技术实现等维度展开详细说明:
先看下效果,如下:
一、为什么需要追踪回答与检索片段的对应关系?
事实性验证:确保回答中的信息来自可信的检索片段,避免大模型 “幻觉”(编造错误信息)。
可解释性增强:向用户展示回答的依据来源,提升系统可信度(如金融、医疗等合规场景)。
系统调试优化:定位检索或生成环节的问题(如片段相关性不足、信息遗漏)。
合规与审计:满足数据溯源需求(如法律场景中需记录信息来源)。
二、代码实现
我们常使用llamaindex开发RAG应用。llamaindex有专门的引文查询引擎--CitationQueryEngine 。
官网教程:
https://docs.llamaindex.ai/en/stable/examples/query_engine/citation_query_engine/
使用如下:
pip install llama-index
pip install llama-index-embeddings-openai
pip install llama-index-llms-openai
创建具有默认参数的 CitationQueryEngine :
query_engine = CitationQueryEngine.from_args(
index,
similarity_top_k=3,
# here we can control how granular citation sources are, the default is 512
citation_chunk_size=512,
)
res = query_engine.query("宋集薪是谁?")
print(res.response) # LLM 输出回答
print("------来源---------------")
for node in res.source_nodes:
print("相关片段:", node.text)
print("片段分数:", node.score)
print("片段元数据:", node.metadata)
print("="*40)
结果如下:
核心代码讲解:
可以看到大模型最终合成答案里有[1]、[2]、[3]这样的标签,这是标签对应chunk块顺序。
标签从 1 开始计数,但python 数组从 0 开始计数!
参数citation_chunk_size默认值为512,表示引用的chunk的token大小。
(1)该值与文本切割node节点的chunk_size不一样。
(2)若citation_chunk_size>chunk_size,则最终以chunk_size为准;
否则,该CitationQueryEngine将按照citation_chunk_size重新切割产生新的chunk块。
(3)citation_chunk_size也不宜过大,若超过源文档的大小,则该查询失去效果。
可以查看引用的内容:response.source_nodes 。
完整的示例代码如下。
from llama_index.core import VectorStoreIndex, Settings, SimpleDirectoryReader
from llama_index.llms.openai_like import OpenAILike
from llama_index.core.node_parser import SentenceSplitter
from llama_index.embeddings.openai_like import OpenAILikeEmbedding
# ================== 初始化模型 ==================
def init_models():
"""初始化模型并验证"""
# Embedding模型
embed_model = OpenAILikeEmbedding(
model_name="BAAI/bge-m3",
api_base="https://api.siliconflow.cn/v1",
api_key="sk-xxxxx",
embed_batch_size=10,
)
llm = OpenAILike(
model="DeepSeek-ai/DeepSeek-V3",
api_base="https://api.siliconflow.cn/v1",
api_key="sk-xxxx",
context_window=128000,
is_chat_model=True,
is_function_calling_model=False,
)
Settings.embed_model = embed_model
Settings.llm = llm
# 验证模型
test_embedding = embed_model.get_text_embedding("测试文本")
print(f"Embedding维度验证:{len(test_embedding)}")
return embed_model, llm
init_models()
# load documents, split into chunks
documents = SimpleDirectoryReader(r"D:\Test\aiyoyo\0618\data2").load_data()
# 2. 文档切分为 chunk,添加 chunk_id
sentence_splitter = SentenceSplitter(
chunk_size=400,
chunk_overlap=100,
separator="。!?!?.\n¡¿", # 适配中文,英语,西班牙语三种语言的分隔符
)
# 3. 分割文档
nodes = sentence_splitter.get_nodes_from_documents(documents)
index = VectorStoreIndex(nodes)
from llama_index.core.query_engine import CitationQueryEngine
# query_engine = index.as_query_engine(similarity_top_k=2,
# text_qa_template=response_template,
# )
query_engine = CitationQueryEngine.from_args(
index,
similarity_top_k=3,
# here we can control how granular citation sources are, the default is 512
citation_chunk_size=512,
)
res = query_engine.query("宋集薪是谁?")
print(res.response) # LLM 输出回答
print("------来源---------------")
for node in res.source_nodes:
print(node.get_text())
#print(f"node.metadata:{node.metadata}")
print("="*40)
后端的代码搞定后,使用fastapi做成webapi接口,将回答和source_nodes返回给前端,接口的返回值给一个json示例:
{
"code": 0,
"message": "",
"data": {
"answer": "宋集薪是一个少年,居住在毗邻陈平安的院落中,并拥有一名婢女(被称为“稚圭”)[1][3]。他性格有些顽劣,喜欢戏弄他人,比如在与锦衣少年的对话中先是提出高价卖婢女,后又改口抬价[1][2]。此外,他与婢女关系似乎较为亲近,能心有灵犀地配合[3]。他还计划下个月离开当地[3]。",
"reference": {
"total": 3,
"chunks": [
{
"id": "d5f7457f79be3e2d",
"content": "略"
},
{
"id": "476769d43a003fb9",
"content": "略"
},
{
"id": "a8194d208880c1a0",
"content": "略。"
}
],
"doc_aggs": [
{
"doc_name": "jianlai.txt",
"doc_id": "5864b70c475f11f08a6042010a8a0006",
"count": 81
}
]
},
"prompt": "略",
"created_at": 1750215867.10315,
"id": "47d55175-bede-4d83-b42a-e1296c09ff16",
"session_id": "8e9345563cee49af95ad6d75072b200a"
}
}
前端根据相应的规则显示效果即可!!
三、总结:追踪机制的价值
通过回答与 Chunk 的对应关系追踪,RAG 系统可实现从 “黑盒生成” 到 “白盒可解释” 的升级,这不仅提升了用户信任度,还为系统优化提供了数据支撑。在实际落地中,需结合业务场景选择合适的追踪粒度(如段落级、句子级或 token 级),并通过工具链集成降低开发成本。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-06-19
企业级 RAG Agent 开发指南:RAG Agent 开发的 10 条实战准则
2025-06-19
GraphRAG系统:利用LangChain、Gemini和Neo4j构建智能文档检索与生成解决方案
2025-06-19
为什么说『RAG开箱即用』是最大的AI技术谎言?
2025-06-18
大模型三大步 -- 上下文检索RAG
2025-06-18
企业级RAG系统规模化部署十条经验
2025-06-18
RAG之父:企业级 RAG 系统落地的实战经验
2025-06-17
深度解析 RAG(Retrieval-Augmented Generation)技术原理
2025-06-16
最新|Milvus_local_RAG,笔记本也能跑的本地知识库&RAG来了
2025-03-24
2025-03-24
2025-03-24
2025-03-28
2025-04-01
2025-03-23
2025-04-13
2025-04-19
2025-04-09
2025-04-16
2025-06-19
2025-06-13
2025-06-09
2025-06-06
2025-05-30
2025-05-29
2025-05-29
2025-05-23