检索增强生成(RAG)正成为连接大模型与实时知识的关键桥梁。本文深入解析RAG技术架构,剖析主流开源项目,并揭示多跳推理、混合检索等高级方法,助你构建更强大的AI应用。

一、RAG技术概述

检索增强生成(RAG)是一种结合信息检索生成式AI的创新技术。它通过外部知识库增强大模型的回答能力,有效解决了知识滞后幻觉问题领域专业知识不足等挑战。

RAG的核心思想是在生成回答前,先从专门构建的知识库中检索相关信息,然后将这些检索结果与用户问题一起输入给大模型,生成更加准确、可靠的回答。

与传统微调方法相比,RAG具有无需重新训练知识实时更新计算成本更低等显著优势,已成为企业级AI应用的首选架构。

二、RAG核心技术原理

RAG系统通常由文档加载器文本分割器嵌入模型向量数据库生成模型五个核心组件组成。

文档加载器负责将各种格式(如PDF、Word、HTML)的文档转换为纯文本。文本分割器将长文档分割成适合处理的片段。嵌入模型将文本转换为向量表示,存储在向量数据库中。当用户提问时,系统先将其转换为向量,在向量空间中检索最相关的文档片段,最后将这些片段与原始问题一起输入给生成模型,产生最终回答。

一个典型的RAG流程包括:索引构建检索生成两个阶段。索引构建阶段处理文档并构建向量索引;检索生成阶段则处理用户查询并生成回答。

三、主流开源RAG项目实战

LangChain:RAG应用开发框架

LangChain是目前最受欢迎的RAG开源框架之一,提供了模块化的组件和便捷的接口。

# 安装LangChain
pip install langchain langchain-community langchain-core

# 基础RAG实现示例
from langchain_community.llms import OpenAI
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import RetrievalQA

# 加载文档
loader = TextLoader("your_document.txt")
documents = loader.load()

# 文本分割
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 创建向量存储
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(docs, embeddings)

# 创建检索链
llm = OpenAI()
qa_chain = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=db.as_retriever()
)

# 提问
query = "什么是RAG技术?"
response = qa_chain.run(query)
print(response)

LlamaIndex:优化的RAG系统

LlamaIndex专注于提供更高效的数据索引和查询能力,特别适合处理大规模知识库。

# 安装LlamaIndex
pip install llama-index

# LlamaIndex RAG实现
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.response_synthesizers import get_response_synthesizer

# 加载文档
documents = SimpleDirectoryReader("data").load_data()

# 创建索引
index = VectorStoreIndex.from_documents(documents)

# 配置检索器
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=5
)

# 配置响应合成器
response_synthesizer = get_response_synthesizer()

# 创建查询引擎
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    response_synthesizer=response_synthesizer
)

# 提问
response = query_engine.query("什么是RAG的高级方法?")
print(response)

Haystack:企业级RAG解决方案

Haystack是一个功能全面的RAG框架,支持多种数据源和检索策略,适合构建复杂的企业级应用。

# 安装Haystack
pip install farm-haystack

# Haystack RAG管道
from haystack.document_stores import FAISSDocumentStore
from haystack.nodes import BM25Retriever, EmbeddingRetriever, FARMReader
from haystack.pipelines import ExtractiveQAPipeline
from haystack.utils import fetch_archive_from_http

# 初始化文档存储
document_store = FAISSDocumentStore(faiss_index_factory_str="Flat", embedding_dim=768)

# 加载文档
doc_dir = "data/"
document_store.add_documents(get_documents_from_dir(doc_dir))

# 配置检索器
bm25_retriever = BM25Retriever(document_store=document_store)
embedding_retriever = EmbeddingRetriever(document_store=document_store)

# 配置阅读器
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")

# 创建管道
pipeline = ExtractiveQAPipeline(reader=reader, retriever=bm25_retriever)

# 运行查询
prediction = pipeline.run(query="什么是RAG技术的多跳推理?")
print(prediction)

四、RAG高级方法

多跳推理

多跳推理通过迭代检索推理,解决需要综合多个信息源才能回答的复杂问题。这种方法模拟人类的思考过程,先检索相关信息,再基于这些信息进行推理,可能需要多次迭代才能得到最终答案。

# 多跳推理实现示例
def multi_hop_rag(query, max_hops=2):
    context = ""
    for hop in range(max_hops):
        # 构建包含上下文的提示
        prompt = f"""
        问题: {query}
        已知信息: {context}
        请基于以上信息回答问题,如果有需要进一步了解的信息,请提出后续问题。
        """

        # 获取模型回答
        response = llm(prompt)

        # 提取后续问题或最终答案
        if hop < max_hops - 1:
            follow_up_question = extract_question(response)
            # 检索相关信息
            new_context = retrieve_documents(follow_up_question)
            context += new_context
        else:
            return response

    return response

混合检索

混合检索结合关键词检索(如BM25)和语义检索(如向量相似度),充分利用两种检索方法的优势。关键词检索擅长精确匹配,语义检索擅长理解上下文,两者结合可以显著提高检索质量。

# 混合检索实现
from haystack.nodes import BM25Retriever, EmbeddingRetriever

# 初始化两种检索器
bm25_retriever = BM25Retriever(document_store=document_store)
embedding_retriever = EmbeddingRetriever(document_store=document_store)

# 混合检索函数
def hybrid_retriever(query, bm25_weight=0.5, embedding_weight=0.5):
    # 获取两种检索结果
    bm25_results = bm25_retriever.retrieve(query, top_k=10)
    embedding_results = embedding_retriever.retrieve(query, top_k=10)

    # 合并结果
    combined_results = combine_results(
        bm25_results, 
        embedding_results, 
        bm25_weight=bm25_weight, 
        embedding_weight=embedding_weight
    )

    return combined_results

查询改写与扩展

查询改写通过同义词扩展语义转换等技术,丰富查询表达,提高召回率。这种方法特别适用于用户查询表达不明确或知识库中使用了不同术语的情况。

# 查询改写示例
def rewrite_query(original_query):
    # 使用LLM进行查询改写
    prompt = f"""
    原始查询: {original_query}
    请提供3-5个与原始查询意思相同或相近的表达方式。
    """

    response = llm(prompt)
    rewritten_queries = extract_queries(response)

    # 添加原始查询
    rewritten_queries.insert(0, original_query)

    return rewritten_queries

# 使用改写后的查询进行检索
def retrieve_with_rewrite(query):
    rewritten_queries = rewrite_query(query)
    all_results = []

    for q in rewritten_queries:
        results = retriever.retrieve(q, top_k=5)
        all_results.extend(results)

    # 去重和重排序
    unique_results = deduplicate_and_rerank(all_results)

    return unique_results

知识图谱增强RAG

知识图谱增强RAG通过结构化知识补充非结构化文本,提供更精确的检索和推理能力。这种方法特别适合需要精确关系和属性的领域。

# 知识图谱增强RAG示例
from rdflib import Graph, URIRef, Literal

# 构建简单知识图谱
kg = Graph()
kg.add((URIRef("RAG"), URIRef("type"), Literal("技术")))
kg.add((URIRef("RAG"), URIRef("enhances"), URIRef("LLM")))
kg.add((URIRef("LLM"), URIRef("type"), Literal("大语言模型")))

# 知识图谱检索
def kg_retriever(query):
    # 将查询转换为SPARQL
    sparql_query = generate_sparql(query)

    # 执行查询
    results = kg.query(sparql_query)

    # 转换为文档格式
    documents = convert_to_documents(results)

    return documents

# 结合文本和知识图谱的混合检索
def hybrid_rag_with_kg(query):
    # 文本检索
    text_results = retriever.retrieve(query, top_k=10)

    # 知识图谱检索
    kg_results = kg_retriever(query)

    # 合并结果
    combined_results = combine_text_and_kg_results(text_results, kg_results)

    return combined_results

RAG应用场景

企业知识库问答

RAG可用于构建企业内部知识库问答系统,帮助员工快速获取公司政策、流程文档等信息。这种应用可以显著提高工作效率,减少信息检索时间。

智能客服与支持

结合公司产品知识和FAQ,RAG可以构建智能客服系统,提供准确的产品信息和解决方案,提高客户满意度,同时减轻人工客服压力。

法律与医疗专业助手

在法律和医疗等专业领域,RAG可以结合专业文献和法规数据库,为专业人士提供精准的参考信息和案例分析,辅助决策过程。

教育与培训个性化

RAG可以基于教材和学习资料,构建个性化教育助手,根据学生的问题提供定制化的解释和补充材料,提升学习效果。

金融分析与投资决策

结合市场数据、公司财报和行业研究报告,RAG可以帮助分析师快速获取相关信息,辅助投资决策和风险评估。

未来发展趋势

RAG技术正在向多模态扩展,支持图像、音频等非文本信息的检索和生成。自适应检索技术也在发展中,系统能根据问题类型动态调整检索策略。

边缘RAG是一个重要趋势,将RAG能力部署到终端设备,减少对云端的依赖,提高响应速度和数据隐私保护。

RAG与Agent结合正在成为新方向,通过将RAG与自主代理能力结合,构建能够持续学习和进化的智能系统。

随着大模型能力的不断提升,RAG系统也将更加智能化专业化,在更多垂直领域展现价值。

五、关键字

检索增强生成, RAG, LangChain, LlamaIndex, Haystack, 多跳推理, 混合检索, 知识图谱增强, 开源AI

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐