04 RAG 检索增强
2026/8/5 14:57:38 网站建设 项目流程

tags:/n - langchain

  • rag
  • 检索增强
  • 向量检索
  • 面试
    aliases:/n - RAG
  • 检索增强生成

04 RAG 检索增强

一、RAG 介绍

大模型的局限

局限说明
知识滞后训练数据有截止日期
知识缺失不包含企业私有数据
幻觉对不确定内容可能编造答案

RAG 流程

文档加载 → 切分 → 嵌入 → 向量存储 → 检索 → 生成

RAG 核心组件

组件作用示例
DocumentLoader加载各种格式文档PDFLoader、DocxLoader
TextSplitter将文档切分为小块RecursiveCharacterTextSplitter
Embeddings文本转向量OpenAIEmbeddings、BGE-M3
VectorStore存储和检索向量Milvus、Chroma
Retriever相似度检索vector_store.as_retriever()

二、文档加载

""" 文档加载演示 运行方式:python 04_文档加载.py """fromlangchain_community.document_loadersimportPyPDFLoader,Docx2txtLoader# 加载 PDFloader=PyPDFLoader("document.pdf")docs=loader.load()# 加载 Docxloader=Docx2txtLoader("document.docx")docs=loader.load()fordocindocs:print(f"内容:{doc.page_content[:100]}...")print(f"元数据:{doc.metadata}")

三、文档切分

""" 文档切分演示 运行方式:python 04_文档切分.py """fromlangchain.text_splitterimportRecursiveCharacterTextSplitter text_splitter=RecursiveCharacterTextSplitter(chunk_size=500,# 每块最大字符数chunk_overlap=50,# 块间重叠字符数separators=["\n\n","\n","。",","," "],)chunks=text_splitter.split_documents(docs)print(f"切分为{len(chunks)}个块")

四、文档嵌入

""" 文档嵌入演示 运行方式:python 04_文档嵌入.py """fromlangchain_openaiimportOpenAIEmbeddings embeddings=OpenAIEmbeddings(model="text-embedding-3-small",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key=os.getenv("DASHSCOPE_API_KEY"),)# 单个文本嵌入vector=embeddings.embed_query("什么是LangChain")# 批量嵌入vectors=embeddings.embed_documents(["LangChain是什么","RAG是什么"])

五、向量存储和检索(Milvus)

""" LangChain + Milvus 完整 RAG 流程 运行方式:python 04_RAG完整流程.py """fromlangchain_openaiimportOpenAIEmbeddings,ChatOpenAIfromlangchain_milvusimportMilvusfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnablePassthrough# 1. 初始化嵌入模型embeddings=OpenAIEmbeddings(model="text-embedding-3-small",...)# 2. 初始化 Milvus 向量存储vector_store=Milvus(embedding_function=embeddings,connection_args={"host":"localhost","port":"19530"},collection_name="langchain_demo",)# 3. 添加文档fromlangchain_core.documentsimportDocument docs=[Document(page_content="LangChain是大模型应用开发框架"),Document(page_content="RAG是检索增强生成技术"),Document(page_content="Milvus是开源向量数据库"),]vector_store.add_documents(docs)# 4. 创建检索器retriever=vector_store.as_retriever(search_kwargs={"k":2})# 5. 构建 RAG Chainllm=ChatOpenAI(model="qwen-plus",...)prompt=ChatPromptTemplate.from_template("根据以下参考资料回答问题:\n\n{context}\n\n问题:{question}")defformat_docs(docs):return"\n\n".join(doc.page_contentfordocindocs)rag_chain=({"context":retriever|format_docs,"question":RunnablePassthrough()}|prompt|llm|StrOutputParser())# 6. 提问answer=rag_chain.invoke("什么是LangChain?")print(f"答案:{answer}")

相关笔记

[[01-LangChain概述]] · [[02-Model-IO与模型调用]] · [[03-提示词模板与Chains]] · [[05-Agents智能体]]

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询