Skip to main content
章节22 min read

第14章:Knowledge Retrieval (RAG)

第14章:Knowledge Retrieval (RAG) LLM 在生成类人文本方面展现出强大的能力。然而,它们的知识库通常局限于其训练所使用的数据,限制了它们获取实时信息、特定公司数据或高度专业化细节的能力。Knowledge Retrieval(RAG,即 Retrieval Augmented Generat...

第14章:Knowledge Retrieval (RAG)

LLM 在生成类人文本方面展现出强大的能力。然而,它们的知识库通常局限于其训练所使用的数据,限制了它们获取实时信息、特定公司数据或高度专业化细节的能力。Knowledge Retrieval(RAG,即 Retrieval Augmented Generation)解决了这一限制。RAG 使 LLM 能够访问并整合外部的、当前的和特定于上下文的信息,从而增强其输出的准确性、相关性和事实依据。

对于 AI Agent 而言,这一点至关重要,因为它允许它们将行动和响应建立在其实时、可验证的数据之上,超越其静态训练范围。这一能力使它们能够准确执行复杂任务,例如访问最新的公司政策以回答特定问题,或在下单前检查当前库存。通过整合外部知识,RAG 将 Agent 从简单的对话者转变为能够有效执行有意义工作的、数据驱动的工具。

Knowledge Retrieval (RAG) 模式概述

Knowledge Retrieval(RAG)模式通过允许 LLM 在生成响应之前访问外部知识库,显著增强了 LLM 的能力。RAG 不是仅仅依赖其内部、预训练的知识,而是允许 LLM "查阅"信息,就像人类可能会查阅书籍或搜索互联网一样。这一过程使 LLM 能够提供更准确、最新且可验证的答案。

当用户向使用 RAG 的 AI 系统提出问题或给出提示时,查询不会直接发送给 LLM。相反,系统首先搜索一个庞大的外部知识库——一个高度组织化的文档、数据库或网页库——以寻找相关信息。这种搜索不是简单的关键词匹配;它是一种理解用户意图和词语背后含义的"语义搜索"。初始搜索会提取出最相关的信息片段或"块"(chunks)。这些提取出的片段随后被"增强",即添加到原始提示中,创建一个更丰富、更知情的查询。最后,这个增强后的提示被发送给 LLM。借助这些额外的上下文,LLM 可以生成一个不仅流畅自然,而且以检索到的数据为依据、事实可靠的响应。

RAG 框架提供了几个显著的优势。它允许 LLM 访问最新的信息,从而克服了静态训练数据的限制。这种方法还减少了"幻觉"(hallucination)——即生成虚假信息——的风险,因为它将响应建立在可验证的数据之上。此外,LLM 可以利用内部公司文档或 Wiki 中找到的专门知识。这一过程的一个关键优势是能够提供"引用"(citations),精准指出信息的确切来源,从而增强 AI 响应的可信度和可验证性。

要充分理解 RAG 的运作方式,必须了解几个核心概念(见图1):

Embeddings(嵌入):在 LLM 的语境中,embeddings 是文本的数值表示,例如单词、短语或整个文档。这些表示采用向量的形式,即一串数字。其关键思想是在数学空间中捕捉不同文本片段的语义含义和关系。含义相似的单词或短语在这个向量空间中的 embeddings 会更接近。例如,想象一个简单的二维图表。单词 "cat" 可能由坐标 (2, 3) 表示,而 "kitten" 会非常接近,位于 (2.1, 3.1)。相比之下,单词 "car" 会有一个遥远的坐标,如 (8, 1),反映了其不同的含义。在现实中,这些 embeddings 存在于更高维的空间中,具有数百甚至数千个维度,允许对语言进行非常细致的理解。

Text Similarity(文本相似度):文本相似度指的是衡量两段文本相似程度的标准。这可以在表层进行,查看单词的重叠(词汇相似度),也可以在更深的、基于含义的层面进行。在 RAG 的语境中,文本相似度对于在知识库中找到与用户查询最相关的信息至关重要。例如,考虑以下句子:"What is the capital of France?" 和 "Which city is the capital of France?"。虽然措辞不同,但它们问的是同一个问题。一个好的文本相似度模型会识别出这一点,并为这两个句子分配一个高相似度分数,尽管它们只共享很少的单词。这通常使用文本的 embeddings 来计算。

Semantic Similarity and Distance(语义相似度与距离):语义相似度是文本相似度的一种更高级形式,它纯粹关注文本的含义和上下文,而不仅仅是使用的单词。它旨在理解两段文本是否传达相同的概念或思想。语义距离(Semantic distance)是其反比;高语义相似度意味着低语义距离,反之亦然。在 RAG 中,语义搜索依赖于找到与用户查询语义距离最小的文档。例如,短语 "a furry feline companion" 和 "a domestic cat" 除了 "a" 之外没有共同的单词。然而,理解语义相似度的模型会识别出它们指的是同一件事,并认为它们高度相似。这是因为它们的 embeddings 在向量空间中会非常接近,表明语义距离很小。这就是允许 RAG 即使用户的措辞与知识库中的文本不完全匹配也能找到相关信息的"智能搜索"。

图1:RAG 核心概念:分块(Chunking)、Embeddings 和向量数据库

Chunking of Documents(文档分块):分块是将大型文档分解成更小、更易于管理的片段或"块"的过程。为了让 RAG 系统高效工作,它不能将整个大型文档输入 LLM。相反,它处理这些较小的块。文档的分块方式对于保留信息的上下文和含义非常重要。例如,与其将一份50页的用户手册视为单个文本块,不如采用一种分块策略,将其分解成章节、段落甚至句子。例如,"故障排除"部分将是与"安装指南"不同的块。当用户询问特定问题时,RAG 系统可以检索最相关的故障排除块,而不是整个手册。这使得检索过程更快,并且提供给 LLM 的信息更聚焦、更符合用户的即时需求。一旦文档被分块,RAG 系统必须采用一种检索技术来为给定的查询找到最相关的片段。主要方法是向量搜索,它使用 embeddings 和语义距离来找到在概念上与用户问题相似的块。一种较旧但仍然有价值的技术是 BM25,这是一种基于词频对块进行排名的基于关键词的算法,无需理解语义。为了兼得两者之长,经常使用混合搜索方法,将 BM25 的关键词精度与语义搜索的上下文理解相结合。这种融合允许更稳健和准确的检索,同时捕捉字面匹配和概念相关性。

Vector databases(向量数据库):向量数据库是一种专门类型的数据库,旨在高效地存储和查询 embeddings。在文档被分块并转换为 embeddings 后,这些高维向量被存储在向量数据库中。传统的检索技术,如基于关键词的搜索,非常擅长查找包含查询中确切单词的文档,但缺乏对语言的深层理解。它们无法识别 "furry feline companion" 的意思是 "cat"。这正是向量数据库擅长的地方。它们专为语义搜索而构建。通过将文本存储为数值向量,它们可以基于概念含义而非仅仅关键词重叠来查找结果。当用户查询也被转换为向量时,数据库使用高度优化的算法(如 HNSW——Hierarchical Navigable Small World)来快速搜索数百万个向量,并找到在含义上"最接近"的向量。这种方法对于 RAG 来说要优越得多,因为即使用户的措辞与源文档完全不同,它也能发现相关的上下文。从本质上讲,其他技术搜索的是单词,而向量数据库搜索的是含义。这项技术以各种形式实现,从托管数据库(如 Pinecone 和 Weaviate)到开源解决方案(如 Chroma DB、Milvus 和 Qdrant)。甚至现有数据库也可以增强向量搜索功能,如 Redis、Elasticsearch 和 Postgres,使用 pgvector 扩展。核心检索机制通常由诸如 Meta AI 的 FAISS 或 Google Research 的 ScaNN 等库提供支持,这些库是这些系统效率的基础。

RAG 的挑战:尽管功能强大,RAG 模式并非没有挑战。一个主要问题出现在回答查询所需的信息不局限于单个块,而是分散在文档的多个部分甚至多个文档中时。在这种情况下,检索器可能无法收集所有必要的上下文,导致答案不完整或不准确。系统的有效性还高度依赖于分块和检索过程的质量;如果检索到不相关的块,可能会引入噪声并混淆 LLM。此外,有效地综合来自可能相互矛盾来源的信息,对这些系统来说仍然是一个重大障碍。除此之外,另一个挑战是 RAG 需要将整个知识库进行预处理并存储在专门的数据库中,如向量或图数据库,这是一项相当大的工作。因此,这些知识需要定期核对以保持最新,这在处理如公司 Wiki 等不断演进的来源时是一项关键任务。整个过程可能对性能产生明显影响,增加延迟、运营成本和最终提示中使用的 token 数量。

总之,Retrieval-Augmented Generation(RAG)模式代表了让 AI 更具知识性和可靠性的重大飞跃。通过在生成过程中无缝整合外部知识检索步骤,RAG 解决了独立 LLM 的一些核心限制。embeddings 和语义相似度的基础概念,结合关键词和混合搜索等检索技术,使系统能够智能地找到相关信息,这可以通过策略性分块来管理。整个检索过程由专门的向量数据库提供支持,旨在大规模存储并高效查询数百万个 embeddings。虽然在检索碎片化或矛盾信息方面仍然存在挑战,但 RAG 使 LLM 能够生成不仅上下文恰当,而且锚定在可验证事实中的答案,从而在 AI 中培养更大的信任和实用性。

Graph RAG:GraphRAG 是 Retrieval-Augmented Generation 的一种高级形式,它利用知识图谱而非简单的向量数据库进行信息检索。它通过导航这个结构化知识库中的数据实体(节点)之间的显式关系(边)来回答复杂查询。一个关键优势是它能够综合来自分散在多个文档中的信息的答案,这是传统 RAG 的常见缺陷。通过理解这些连接,GraphRAG 提供了更具上下文准确性和细微差别的响应。

用例包括复杂的金融分析,将公司与市场事件联系起来,以及科学研究,用于发现基因与疾病之间的关系。然而,主要的缺点是在构建和维护高质量知识图谱方面所需的显著复杂性、成本和专业知识。这种设置也不太灵活,并且与更简单的向量搜索系统相比可能引入更高的延迟。系统的有效性完全取决于底层图结构的质量和完整性。因此,GraphRAG 为复杂问题提供了卓越的上下文推理能力,但代价是实现和维护成本高得多。总之,在深度、相互关联的洞察比标准 RAG 的速度和简单性更为关键的情况下,它表现出色。

Agentic RAG:这种模式的演进被称为 Agentic RAG(见图2),它引入了一个推理和决策层,以显著增强信息提取的可靠性。Agent 不仅仅是检索和增强,而是一个关键的守门人和知识优化者。这个 Agent 不是被动地接受最初检索到的数据,而是积极地审问其质量、相关性和完整性,如下文所述场景所示。

首先,Agent 擅长反思和来源验证。如果用户问"我们公司关于远程办公的政策是什么?",标准 RAG 可能会调取一篇2020年的博客文章以及2025年的官方政策文档。然而,Agent 会分析文档的元数据,认识到2025年的政策是最新且最权威的来源,并在将正确的上下文发送给 LLM 以获取精确答案之前,丢弃过时的博客文章。

图2:Agentic RAG 引入了一个推理 Agent,主动评估、核对和优化检索到的信息,以确保更准确和可信的最终响应。

其次,Agent 擅长调和知识冲突。假设一位金融分析师问:"Project Alpha 的 Q1 预算是多少?"系统检索到两份文档:一份初始提案说明预算为50,000欧元,一份最终财务报告列明为65,000欧元。Agentic RAG 会识别这一矛盾,优先考虑财务报告作为更可靠的来源,并向 LLM 提供经过验证的数字,确保最终答案基于最准确的数据。

第三,Agent 可以执行多步推理来综合复杂的答案。如果用户问:"我们产品的功能和定价与 Competitor X 的相比如何?"Agent 会将其分解为单独的子查询。它会针对自己产品的功能、其定价、Competitor X 的功能和 Competitor X 的定价发起不同的搜索。在收集到这些单独的信息片段后,Agent 会将它们综合成一个结构化的、比较性的上下文,然后再将其提供给 LLM,从而实现简单检索无法产生的全面响应。

第四,Agent 可以识别知识缺口并使用外部工具。假设用户问:"昨天发布的新产品,市场的即时反应如何?"Agent 搜索每周更新的内部知识库,但没有找到相关信息。认识到这一缺口后,它可以激活一个工具——例如实时网络搜索 API——来查找最近的新闻文章和社交媒体情绪。然后,Agent 使用这些新收集到的外部信息来提供一个最新的答案,克服了静态内部数据库的限制。

Agentic RAG 的挑战:虽然功能强大,但 Agent 层也带来了其自身的挑战。主要的缺点是在复杂性和成本方面的显著增加。设计、实现和维护 Agent 的决策逻辑和工具集成需要大量的工程努力,并增加了计算开销。这种复杂性还可能导致延迟增加,因为 Agent 的反思、工具使用和多步推理周期比标准、直接的检索过程需要更多时间。此外,Agent 本身可能成为新的错误来源;有缺陷的推理过程可能导致其陷入无用的循环、误解任务或错误地丢弃相关信息,最终降低最终响应的质量。

总结:Agentic RAG 代表了标准检索模式的一种复杂演进,将其从被动的数据管道转变为主动的、解决问题的框架。通过嵌入一个可以评估来源、调和冲突、分解复杂问题和使用外部工具的推理层,Agent 显著提高了生成答案的可靠性和深度。这一进步使 AI 更加可信和有能力,尽管它伴随着系统复杂性、延迟和成本方面的重要权衡,必须仔细管理。

实际应用与用例

Knowledge Retrieval(RAG)正在改变各行业如何利用大语言模型(LLM),增强其提供更准确且上下文相关响应的能力。

应用包括:

  • 企业搜索与问答:组织可以开发内部聊天机器人,使用内部文档(如 HR 政策、技术手册和产品规格)来回答员工询问。RAG 系统从这些文档中提取相关部分,以为 LLM 的响应提供信息。
  • 客户支持与帮助台:基于 RAG 的系统可以通过访问产品手册、常见问题(FAQ)和支持工单中的信息,为客户提供精确且一致的响应。这可以减少针对常规问题对直接人工干预的需求。
  • 个性化内容推荐:RAG 可以识别并检索与用户偏好或先前互动在语义上相关的内容(文章、产品),而不是基本的关键词匹配,从而带来更相关的推荐。
  • 新闻与时事摘要:LLM 可以与实时新闻订阅源集成。当被提示关于一个时事时,RAG 系统检索最近的文章,允许 LLM 生成一个最新的摘要。

通过整合外部知识,RAG 将 LLM 的能力从简单的通信扩展到作为知识处理系统运行。

动手代码示例(ADK)

为了说明 Knowledge Retrieval(RAG)模式,让我们看三个示例。

首先,是如何使用 Google Search 进行 RAG 并将 LLM 依据搜索结果进行接地(grounding)。由于 RAG 涉及访问外部信息,Google Search 工具是内置检索机制的一个直接示例,可以增强 LLM 的知识。

python
from google.adk.tools import google_search from google.adk.agents import Agent search_agent = Agent( name="research_assistant", model="gemini-2.0-flash-exp", instruction="You help users research topics. When asked, use the Google Search tool", tools=[google_search] )

其次,本节解释如何在 Google ADK 中使用 Vertex AI RAG 功能。提供的代码演示了从 ADK 初始化 VertexAiRagMemoryService。这允许建立到 Google Cloud Vertex AI RAG Corpus 的连接。该服务通过指定 Corpus 资源名称和可选参数(如 SIMILARITY_TOP_KVECTOR_DISTANCE_THRESHOLD)进行配置。这些参数影响检索过程。SIMILARITY_TOP_K 定义了要检索的 top 相似结果的数量。VECTOR_DISTANCE_THRESHOLD 为检索到的结果设置了语义距离的限制。这种设置使 Agent 能够执行来自指定 RAG Corpus 的可扩展且持久化的语义知识检索。该过程有效地将 Google Cloud 的 RAG 功能整合到 ADK Agent 中,从而支持生成基于事实数据的响应。

python
# Import the necessary VertexAiRagMemoryService class from the google.adk.memory module. from google.adk.memory import VertexAiRagMemoryService RAG_CORPUS_RESOURCE_NAME = "projects/your-gcp-project-id/locations/us-central1/ragCorpora/your-corpus-id" # Define an optional parameter for the number of top similar results to retrieve. # This controls how many relevant document chunks the RAG service will return. SIMILARITY_TOP_K = 5 # Define an optional parameter for the vector distance threshold. # This threshold determines the maximum semantic distance allowed for retrieved results; # results with a distance greater than this value might be filtered out. VECTOR_DISTANCE_THRESHOLD = 0.7 # Initialize an instance of VertexAiRagMemoryService. # This sets up the connection to your Vertex AI RAG Corpus. # - rag_corpus: Specifies the unique identifier for your RAG Corpus. # - similarity_top_k: Sets the maximum number of similar results to fetch. # - vector_distance_threshold: Defines the similarity threshold for filtering results. memory_service = VertexAiRagMemoryService( rag_corpus=RAG_CORPUS_RESOURCE_NAME, similarity_top_k=SIMILARITY_TOP_K, vector_distance_threshold=VECTOR_DISTANCE_THRESHOLD )

动手代码示例(LangChain)

第三,让我们通过 LangChain 来完成一个完整的示例。

python
import os import requests from typing import List, Dict, Any, TypedDict from langchain_community.document_loaders import TextLoader from langchain_core.documents import Document from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_community.embeddings import OpenAIEmbeddings from langchain_community.vectorstores import Weaviate from langchain_openai import ChatOpenAI from langchain.text_splitter import CharacterTextSplitter from langchain.schema.runnable import RunnablePassthrough from langgraph.graph import StateGraph, END import weaviate from weaviate.embedded import EmbeddedOptions import dotenv # Load environment variables (e.g., OPENAI_API_KEY) dotenv.load_dotenv() # Set your OpenAI API key (ensure it's loaded from .env or set here) # os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" # --- 1. Data Preparation (Preprocessing) --- # Load data url = "https://github.com/langchain-ai/langchain/blob/master/docs/docs/how_to/state_of_the_union.txt" res = requests.get(url) with open("state_of_the_union.txt", "w") as f: f.write(res.text) loader = TextLoader('./state_of_the_union.txt') documents = loader.load() # Chunk documents text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = text_splitter.split_documents(documents) # Embed and store chunks in Weaviate client = weaviate.Client( embedded_options = EmbeddedOptions() ) vectorstore = Weaviate.from_documents( client = client, documents = chunks, embedding = OpenAIEmbeddings(), by_text = False ) # Define the retriever retriever = vectorstore.as_retriever() # Initialize LLM llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) # --- 2. Define the State for LangGraph --- class RAGGraphState(TypedDict): question: str documents: List[Document] generation: str # --- 3. Define the Nodes (Functions) --- def retrieve_documents_node(state: RAGGraphState) -> RAGGraphState: """Retrieves documents based on the user's question.""" question = state["question"] documents = retriever.invoke(question) return {"documents": documents, "question": question, "generation": ""} def generate_response_node(state: RAGGraphState) -> RAGGraphState: """Generates a response using the LLM based on retrieved documents.""" question = state["question"] documents = state["documents"] # Prompt template from the PDF template = """You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise. Question: {question} Context: {context} Answer: """ prompt = ChatPromptTemplate.from_template(template) # Format the context from the documents context = "\n\n".join([doc.page_content for doc in documents]) # Create the RAG chain rag_chain = prompt | llm | StrOutputParser() # Invoke the chain generation = rag_chain.invoke({"context": context, "question": question}) return {"question": question, "documents": documents, "generation": generation} # --- 4. Build the LangGraph Graph --- workflow = StateGraph(RAGGraphState) # Add nodes workflow.add_node("retrieve", retrieve_documents_node) workflow.add_node("generate", generate_response_node) # Set the entry point workflow.set_entry_point("retrieve") # Add edges (transitions) workflow.add_edge("retrieve", "generate") workflow.add_edge("generate", END) # Compile the graph app = workflow.compile() # --- 5. Run the RAG Application --- if __name__ == "__main__": print("\n--- Running RAG Query ---") query = "What did the president say about Justice Breyer" inputs = {"question": query} for s in app.stream(inputs): print(s) print("\n--- Running another RAG Query ---") query_2 = "What did the president say about the economy?" inputs_2 = {"question": query_2} for s in app.stream(inputs_2): print(s)

这段 Python 代码展示了一个使用 LangChain 和 LangGraph 实现的 Retrieval-Augmented Generation(RAG)流水线。该过程始于从文本文档创建知识库,该文档被分割成块并转换为 embeddings。这些 embeddings 随后存储在 Weaviate 向量存储中,以促进高效的信息检索。LangGraph 中的 StateGraph 被用于管理两个关键函数之间的工作流:retrieve_documents_nodegenerate_response_noderetrieve_documents_node 函数查询向量存储,根据用户输出来识别相关的文档块。随后,generate_response_node 函数利用检索到的信息和预定义的提示模板,使用 OpenAI 大语言模型(LLM)生成响应。app.stream 方法允许通过 RAG 流水线执行查询,展示了系统生成上下文相关输出的能力。

一览

What(是什么):LLM 拥有令人印象深刻的文本生成能力,但从根本上受其训练数据的限制。这些知识是静态的,意味着它不包括实时信息或私有的、特定领域的数据。因此,它们的响应可能过时、不准确,或缺乏专门任务所需的特定上下文。这一缺口限制了它们在需要当前和事实性答案的应用中的可靠性。

Why(为什么):Retrieval-Augmented Generation(RAG)模式通过连接 LLM 到外部知识源,提供了一个标准化的解决方案。当收到查询时,系统首先从指定的知识库中检索相关的信息片段。这些片段随后被附加到原始提示中,用及时和特定的上下文来丰富它。然后,这个增强后的提示被发送给 LLM,使其能够生成一个准确、可验证且以外部数据为依据的响应。这个过程有效地将 LLM 从一个闭卷推理器转变为一个开卷推理器,显著增强了其实用性和可信度。

Rule of thumb(经验法则):当你需要 LLM 基于特定的、最新的或专有的信息(这些信息不是其原始训练数据的一部分)来回答问题或生成内容时,使用此模式。它非常适合在内部文档上构建问答系统、客户支持机器人,以及需要可验证的、基于事实的响应并附带来源引用的应用。

Visual summary(视觉摘要)

Knowledge Retrieval 模式:一个 AI Agent 从结构化数据库中查询和检索信息

图3:Knowledge Retrieval 模式:一个 AI Agent 为了响应用户查询,从公共互联网查找和综合信息。

关键要点

  • Knowledge Retrieval(RAG)通过允许 LLM 访问外部的、最新的和特定的信息来增强 LLM。
  • 该过程涉及检索(在知识库中搜索相关片段)和增强(将这些片段添加到 LLM 的提示中)。
  • RAG 帮助 LLM 克服诸如过时的训练数据等限制,减少"幻觉",并实现特定领域知识的整合。
  • RAG 允许可归属的答案,因为 LLM 的响应以检索到的来源为依据。
  • GraphRAG 利用知识图谱来理解不同信息片段之间的关系,使其能够回答需要从多个来源综合数据的复杂问题。
  • Agentic RAG 超越了简单的信息检索,通过使用智能 Agent 主动推理、验证和优化外部知识,确保更准确和可靠的答案。
  • 实际应用涵盖企业搜索、客户支持、法律研究和个性化推荐。

结论

总之,Retrieval-Augmented Generation(RAG)通过将大语言模型与外部的、最新的数据源连接起来,解决了其静态知识的核心限制。该过程首先检索相关的信息片段,然后增强用户的提示,使 LLM 能够生成更准确和具有上下文意识的响应。这是通过 embeddings、语义搜索和向量数据库等基础技术实现的,这些技术基于含义而非仅仅关键词来查找信息。通过将输出建立在可验证的数据之上,RAG 显著减少了事实错误,并允许使用专有信息,通过引用增强信任。

一个高级演进版本——Agentic RAG,引入了一个推理层,主动验证、核对和综合检索到的知识,以获得更高的可靠性。同样,像 GraphRAG 这样的专门方法利用知识图谱来导航显式数据关系,使系统能够综合高度复杂、相互关联的查询的答案。这个 Agent 可以解决冲突信息,执行多步查询,并使用外部工具来查找缺失的数据。虽然这些高级方法增加了复杂性和延迟,但它们极大地提高了最终响应的深度和可信度。这些模式的实际应用已经在改变各行各业,从企业搜索和客户支持到个性化内容传递。尽管存在挑战,RAG 是使 AI 更具知识性、可靠性和实用性的关键模式。最终,它将 LLM 从闭卷对话者转变为强大的开卷推理工具。

参考文献

  1. Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. https://arxiv.org/abs/2005.11401
  2. Google AI for Developers Documentation. Retrieval Augmented Generation - https://cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/rag-overview
  3. Retrieval-Augmented Generation with Graphs (GraphRAG), https://arxiv.org/abs/2501.00309
  4. LangChain and LangGraph: Leonie Monigatti, "Retrieval-Augmented Generation (RAG): From Theory to LangChain Implementation," https://medium.com/data-science/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2
  5. Google Cloud Vertex AI RAG Corpus https://cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/manage-your-rag-corpus#corpus-management