掘金 人工智能 06月25日 14:37
一文让你重新认识RAG新一代高级架构:检索→重排→压缩→生成全揭秘​
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了在企业级应用中构建可靠的RAG(Retrieval-Augmented Generation)系统所面临的挑战,并提供了详细的解决方案。文章涵盖了多路召回、重排序、上下文压缩、强制源头引用等关键技术,以及完整的工具链集成实战。通过优化,RAG系统能够显著提升召回率,降低推理成本,并提供更准确、可信的答案。

💡 **RAG系统核心问题诊断**:企业级RAG系统常面临关键信息遗漏、长文档噪声、模型虚构内容、以及答案来源不可靠等问题。这些问题导致生成质量下降,无法满足企业对信息准确性和可靠性的要求。

🔍 **多路召回与重排序优化**:为了解决信息遗漏问题,文章提出了多路召回架构,结合向量检索、关键词检索和知识图谱检索,实现更全面的信息检索。此外,通过Cross-Encoder进行重排序,提高检索结果的相关性。

✂️ **生成阶段关键技术**:文章介绍了上下文压缩和强制源头引用技术。上下文压缩通过大模型识别核心段落,减少冗余信息,提高生成质量。强制源头引用则确保答案来自可靠来源,并标注来源,提升答案的可信度。

🛠️ **完整工具链实战与优化指标**:文章提供了完整的RAG系统工具链集成代码,并展示了企业级优化指标对比。通过采用量化索引、使用Elasticsearch等方法,可以有效降低资源消耗,提升系统性能。

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院

引言:掌握工业级RAG系统开发核心技巧,召回率提升65%,推理成本降低40%

一、RAG架构核心问题诊断

企业级应用常见痛点:

二、检索阶段优化实战

2.1 多路召回架构设计

from llama_index import VectorStoreIndex, KnowledgeGraphIndex, KeywordTableIndexfrom llama_index.retrievers import BM25Retriever, VectorIndexRetriever, KGTableRetriever# 1. 向量检索(语义匹配)vector_index = VectorStoreIndex.from_documents(docs)vector_retriever = VectorIndexRetriever(index=vector_index, similarity_top_k=5)# 2. 关键词检索(精确匹配)keyword_index = KeywordTableIndex.from_documents(docs)keyword_retriever = BM25Retriever.from_defaults(index=keyword_index, top_k=3)# 3. 知识图谱检索(关系推理)kg_index = KnowledgeGraphIndex.from_documents(    docs,     kg_triplet_extract_fn=lambda text: extract_triplets(text)  # 自定义三元组抽取)kg_retriever = KGTableRetriever(index=kg_index, include_text=False)# 4. 融合召回结果class HybridRetriever(BaseRetriever):    def __init__(self, vector_ret, keyword_ret, kg_ret):        self.vector_ret = vector_ret        self.keyword_ret = keyword_ret        self.kg_ret = kg_ret            def _retrieve(self, query_bundle: QueryBundle):        vector_nodes = self.vector_ret.retrieve(query_bundle)        keyword_nodes = self.keyword_ret.retrieve(query_bundle)        kg_nodes = self.kg_ret.retrieve(query_bundle)                # 权重融合:向量0.6 + 关键词0.3 + 知识图谱0.1        all_nodes = vector_nodes + keyword_nodes + kg_nodes        seen_ids = set()        unique_nodes = []        for node in all_nodes:            if node.node_id not in seen_ids:                seen_ids.add(node.node_id)                unique_nodes.append(node)                        return unique_nodes[:10]  # 返回Top10结果hybrid_retriever = HybridRetriever(vector_retriever, keyword_retriever, kg_retriever)

2.2 重排序优化(Cross-Encoder)

为什么需要重排序?

from sentence_transformers import CrossEncoder# 1. 微调Cross-Encoder模型model = CrossEncoder("cross-encoder/stsb-minilm-l6", num_labels=1)# 训练数据格式:[query, passage] -> 相关性分数(0-1)train_samples = [    ("特斯拉的CEO是谁?", "埃隆·马斯克是特斯拉CEO", 1.0),    ("特斯拉的CEO是谁?", "特斯拉生产电动汽车", 0.2),    ... ]model.fit(train_samples, epochs=3)# 2. 集成到召回流程def rerank_nodes(query, nodes):    pairs = [(query, node.text) for node in nodes]    scores = model.predict(pairs)        # 按分数排序    reranked_nodes = [        node for _, node in sorted(            zip(scores, nodes),             key=lambda x: x[0],             reverse=True        )    ]    return reranked_nodes[:5]  # 返回Top5精排结果# 在检索流程中调用retrieved_nodes = hybrid_retriever.retrieve(question)final_nodes = rerank_nodes(question, retrieved_nodes)

重排序效果对比

三、生成阶段关键技术

3.1 上下文压缩技术

from llama_index.indices.postprocessor import LongContextReorderfrom llama_index.query_engine import RetrieverQueryEngine# 1. 创建压缩处理器compressor = ContextualCompressionRetriever(    base_retriever=hybrid_retriever,    compressor_model="gpt-4-turbo",  # 使用大模型识别核心段落    max_tokens=2000  # 上下文上限)# 2. 长文档重排序(解决Lost-in-the-Middle问题)reorder_processor = LongContextReorder()# 3. 构建查询引擎query_engine = RetrieverQueryEngine(    retriever=compressor,    node_postprocessors=[reorder_processor])

3.2 强制源头引用实现

# 在Prompt中注入引用指令citation_prompt = """请根据以下上下文回答问题,并严格遵循:1. 答案必须来自提供的上下文2. 每个关键事实后标注来源段落编号,格式如[1]3. 若上下文无相关信息,回答"未找到可靠来源"上下文:{context_str}问题:{query_str}"""# 创建带引用的响应合成器from llama_index.response_synthesizers import Refinecitation_synthesizer = Refine(    text_qa_template=citation_prompt,    refine_template=citation_prompt + "\n现有回答:{existing_answer}\n请完善:")# 应用到查询引擎query_engine.update_synthesizer(citation_synthesizer)

生成效果对比

- 原始输出:  特斯拉成立于2003年,创始人包括马丁·艾伯哈德和马克·塔彭宁+ 优化输出:  特斯拉成立于2003[1],创始团队包括马丁·艾伯哈德和马克·塔彭宁[2]。  其中埃隆·马斯克于2004年加入并最终成为CEO[3]。    来源标注:  [1] 公司历史文档P12  [2] 创始人传记P5  [3] 董事会决议文件P8

四、完整工具链实战

4.1 架构图

4.2 工具链集成代码

from llama_index import ServiceContext, StorageContextfrom llama_index.vector_stores import FAISSVectorStoreimport cohere# 1. 初始化Cohere重排序器co = cohere.Client("YOUR_API_KEY")def cohere_rerank(query, nodes):    texts = [node.text for node in nodes]    results = co.rerank(        query=query,         documents=texts,         top_n=5,        model="rerank-english-v3.0"    )    return [nodes[r.index] for r in results]# 2. 创建FAISS向量库vector_store = FAISSVectorStore.from_documents(    docs,     service_context=ServiceContext.from_defaults())storage_context = StorageContext.from_defaults(vector_store=vector_store)# 3. 构建完整流水线query_engine = RetrieverQueryEngine(    retriever=hybrid_retriever,    node_postprocessors=[        lambda q, n: cohere_rerank(q.query_str, n),  # Cohere重排序        compressor,  # 上下文压缩        reorder_processor  # 长文档优化    ],    response_synthesizer=citation_synthesizer)# 4. 执行查询response = query_engine.query("特斯拉的现任CEO是谁?")print(f"答案:{response.response}")print("来源:")for node in response.source_nodes:    print(f"- {node.metadata['file_path']}: {node.text[:100]}...")

五、企业级优化指标对比

六、避坑指南:生产环境经验

知识图谱冷启动问题

解决方案:

# 使用LLM自动生成初始图谱from llama_index.llms import OpenAIfrom llama_index.knowledge_graph import SimpleKnowledgeGraphllm = OpenAI(model="gpt-4-turbo")kg = SimpleKnowledgeGraph.from_documents(    documents,     llm=llm,  # 用大模型抽取三元组    max_triplets_per_chunk=5)

多路召回资源消耗

优化方案:

引用标注冲突

def resolve_citation_conflict(sources):    # 选择最多被引用的3个来源    counter = Counter(sources)    return [doc_id for doc_id, _ in counter.most_common(3)]

遵循此技术路线,可构建符合企业需求的可靠RAG系统。更多AI大模型应用开发学习视频内容和资料,尽在聚客AI学院

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

RAG 检索增强生成 AI 大模型 企业级应用
相关文章