基础RAG的局限性

标准RAG系统在以下场景中表现不佳:需要跨文档推理的复杂问题、需要结构化过滤的查询、需要动态调整检索策略的场景。高级RAG技术正是为了解决这些问题而设计的。

多跳检索(Multi-hop Retrieval)

多跳检索将复杂问题分解为多个子问题,依次检索和推理,逐步逼近最终答案:

from langchain.chains import MultiRetrievalQAChain

# 定义多个检索器
retriever_docs = vectorstore_docs.as_retriever()
retriever_code = vectorstore_code.as_retriever()

# 多跳检索链
chain = MultiRetrievalQAChain.from_retrievers(
    llm=llm,
    retrievers=[retriever_docs, retriever_code],
    retriever_descriptions=[
        "文档知识库:包含产品文档和用户手册",
        "代码仓库:包含源代码和API文档"
    ]
)

多跳检索的关键在于:

  • 查询分解:将用户问题拆解为可独立检索的子问题
  • 中间结果利用:将前一步检索结果作为下一步的上下文
  • 信息融合:将从多个来源获取的信息整合为连贯答案

自查询检索(Self-Querying)

自查询检索让LLM自动从用户问题中提取结构化查询条件,实现语义搜索与元数据过滤的结合:

from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain.chains.query_constructor.base import AttributeInfo

metadata_field_info = [
    AttributeInfo(
        name="source",
        description="文档来源",
        type="string"
    ),
    AttributeInfo(
        name="year",
        description="文档年份",
        type="integer"
    ),
    AttributeInfo(
        name="category",
        description="文档分类",
        type="string"
    )
]

retriever = SelfQueryRetriever.from_llm(
    llm=llm,
    vectorstore=vectorstore,
    document_contents="技术文档集合",
    metadata_field_info=metadata_field_info
)

# 用户问"2024年关于RAG的深度学习论文"
# 自动构建查询:语义="RAG深度学习" + 过滤 year=2024, category="论文"
results = retriever.get_relevant_documents(
    "2024年关于RAG的深度学习论文"
)

上下文压缩

当检索到的文档过长时,上下文压缩技术可以提取与查询最相关的片段:

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=base_retriever
)

# 只返回文档中与查询相关的关键内容
compressed_docs = compression_retriever.get_relevant_documents(query)

高级RAG架构设计

生产级RAG系统通常采用分层架构:

  • 路由层:根据查询类型路由到不同的检索策略
  • 检索层:混合多种检索方式(关键词、语义、结构化)
  • 重排序层:使用Cross-encoder对检索结果重排序
  • 生成层:结合检索结果生成最终答案,支持引用溯源
  • 评估层:持续监控RAG系统的质量和性能

总结

高级RAG技术让知识库问答从「能用」走向「好用」。建议从基础RAG开始,根据实际痛点逐步引入高级技术,而不是一开始就追求「完美架构」。