怎么下载网站页面,网站备案回访电话号码,wordpress分类目录代码,找广告商的平台Retrieval-Augmented Generation#xff08;RAG#xff09;是一种强大的技术#xff0c;能够提高大型语言模型#xff08;LLM#xff09;的性能#xff0c;使其能够从外部知识源中检索信息以生成更准确、具有上下文的回答。
本文将详细介绍 RAG 在 LangChain 中的应用RAG是一种强大的技术能够提高大型语言模型LLM的性能使其能够从外部知识源中检索信息以生成更准确、具有上下文的回答。
本文将详细介绍 RAG 在 LangChain 中的应用以及如何构建一个简单的 RAG 管道。
LangChain 是什么
LangChain 是一个强大的自然语言处理工具提供了丰富的功能来简化文本处理和信息检索任务。它的强大之处在于可以无缝集成不同的组件从而构建复杂的文本处理管道。
RAG 是什么
RAG 的核心思想是将语言模型LLM与检索模块结合起来使其能够利用外部知识源的信息。这有助于生成更加准确和上下文相关的回答从而减少幻觉hallucination的风险。
RAG 工作原理分为两个主要阶段
索引阶段
该阶段是信息检索系统中的一个关键步骤旨在将原始数据例如文档、文本等进行处理和组织以便后续能够更快速、有效地检索和获取相关信息。
以下是索引阶段的主要组成部分 索引 数据被处理成一个索引结构其中特定的信息块被赋予唯一的标识符或值。索引结构充当后续检索操作的入口加速信息查找的过程。 文档加载器 负责从各种来源如私有S3存储桶、信息网站、社交平台等获取原始数据。文档加载器的任务是将原始数据导入系统以便进行后续的处理和索引。 文档转换器 对原始文档进行处理将其转换成更容易处理的形式。这可能包括将大型文档分解为小块准备文档以便后续的信息检索。 文本嵌入模型 一旦文档被转换系统会使用文本嵌入模型为文本创建嵌入。嵌入捕捉文本的潜在语义含义使得后续的检索可以更准确地匹配用户查询。 向量存储 为了存储处理后的数据和相应的嵌入系统提供与多种向量存储的连接。
检索和生成阶段
该阶段是信息检索系统中的两个关键步骤涉及根据用户的查询检索相关信息并生成自然语言响应。以下是的主要组成部分 检索 在用户提出问题时系统使用检索器从存储中获取与用户需求相关的信息。这类似于搜索引擎系统寻找匹配用户问题的数据片段。 生成 获取所需信息后ChatModel 或大语言模型LLM介入通过将用户的问题与获取的数据结合生成自然而直接相关的响应。
RAG 的工作流程 RAG 的工作流程主要分为三个步骤检索、增强和生成。 检索 使用用户查询从外部知识源中检索相关上下文。将用户查询嵌入到向量空间中与向量数据库中的附加上下文进行相似性搜索返回前 N 个最接近的数据对象。 增强 使用用户查询和检索到的附加上下文填充提示模板。 生成 将经过检索增强的提示传递给LLM。
通俗易懂讲解大模型系列 用通俗易懂的方式讲解一文讲清大模型 RAG 技术全流程 用通俗易懂的方式讲解如何提升大模型 Agent 的能力? 用通俗易懂的方式讲解使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人 用通俗易懂的方式讲解ChatGPT 开放的多模态的DALL-E 3功能好玩到停不下来 用通俗易懂的方式讲解结合检索和重排序模型改善大模型 RAG 效果明显 用通俗易懂的方式讲解基于扩散模型Diffusion,文生图 AnyText 的效果太棒了 用通俗易懂的方式讲解在 CPU 服务器上部署 ChatGLM3-6B 模型 用通俗易懂的方式讲解ChatGLM3-6B 功能原理解析 用通俗易懂的方式讲解使用 LangChain 和大模型生成海报文案 用通俗易懂的方式讲解一个强大的 LLM 微调工具 LLaMA Factory 用通俗易懂的方式讲解ChatGLM3-6B 部署指南 用通俗易懂的方式讲解LangChain Agent 原理解析 用通俗易懂的方式讲解HugggingFace 推理 API、推理端点和推理空间使用详解 用通俗易懂的方式讲解使用 LangChain 封装自定义的 LLM太棒了 用通俗易懂的方式讲解使用 FastChat 部署 LLM 的体验太爽了 用通俗易懂的方式讲解基于 Langchain 和 ChatChat 部署本地知识库问答系统 用通俗易懂的方式讲解使用 Docker 部署大模型的训练环境 用通俗易懂的方式讲解在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础环境 用通俗易懂的方式讲解Llama2 部署讲解及试用方式 用通俗易懂的方式讲解LangChain 知识库检索常见问题及解决方案 用通俗易懂的方式讲解基于 LangChain 和 ChatGLM2 打造自有知识库问答系统 用通俗易懂的方式讲解代码大模型盘点及优劣分析 用通俗易懂的方式讲解Prompt 提示词在开发中的使用 用通俗易懂的方式讲解万字长文带你入门大模型
技术交流
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
相关资料、数据、技术交流提升均可加我们的交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号mlc2060备注来自CSDN 技术交流 方式②、微信搜索公众号机器学习社区后台回复加群 配置与准备
在开始使用 LangChain 之前首先需要安装必要的依赖。以下是配置OpenAI 环境和安装所需依赖项的代码
!pip install openai --quiet
!pip install langchain --quiet
!pip install docx2txt --quiet
!pip install weaviate-client --quiet然后配置 OpenAI 环境的代码如下
import os# 设置OpenAI API密钥
os.environ[OPENAI_API_KEY] YOUR_OPENAI_API_KEY文档处理与分段
接下来加载并处理示例文档。这包括使用文档加载器加载文档然后将其分成较小的段落。
from langchain.document_loaders import Docx2txtLoader
from langchain.text_splitter import CharacterTextSplitter# 加载文档
document_path 文件路径
loader Docx2txtLoader(document_path)
documents loader.load()# 分割文档
text_splitter CharacterTextSplitter(chunk_size300, chunk_overlap0)
texts text_splitter.split_documents(documents)文本嵌入与向量存储
现在使用 LangChain 进行文本嵌入和向量存储以便后续的检索操作。
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Weaviate# 初始化 OpenAI 嵌入模型
embeddings OpenAIEmbeddings()# 创建Weaviate向量数据库
vectorstore Weaviate.from_documents(clientweaviate.Client(embedded_optionsEmbeddedOptions()),documentstexts,embeddingembeddings,by_textFalse
)检索链的创建
接下来将演示如何在 LangChain 中创建检索链。使用一个示例文档并将其分段以便进行更有效的检索。
基于文档填充的检索链
from langchain.chains import RetrievalQA# 创建 RetrievalQA 检索链
retriever vectorstore.as_retriever()
qa RetrievalQA.from_chain_type(llmChatOpenAI(model_namegpt-3.5-turbo, temperature0), chain_typestuff, retrieverretriever)# 运行查询
query 这文档里都有什么内容?result qa_map_reduce.run(query)
print(result)Map-Reduce 文档链
from langchain.chains import RetrievalQA# 构建 Map-Reduce文档链
retriever vectorstore.as_retriever()
qa_map_reduce RetrievalQA.from_chain_type(llmOpenAI(), chain_typemap_reduce, retrieverretriever)# 运行查询
query 这文档里都有什么内容?result qa_map_reduce.run(query)
print(result)优化文档链
from langchain.chains import RetrievalQA# 构建优化文档链
retriever vectorstore.as_retriever()
qa_refine RetrievalQA.from_chain_type(llmOpenAI(), chain_typerefine, retrieverretriever)# 运行查询
query 这文档里都有什么内容?result qa_refine.run(query)
print(result)RAG 实现示例
1. 基础设置和文档处理通过 LangChain 处理文本数据将其嵌入为向量并通过 Weaviate 向量数据库为文本搜索或相似性匹配提供支持。
import requests
from weaviate import Weaviate, Client, EmbeddedOptions
from weaviate.language_embedding.vectorization import OpenAIEmbeddings
from weaviate.util import CharacterTextSplitter, TextLoader
import dotenv# 加载环境变量
dotenv.load_dotenv()# 下载数据
url https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt
res requests.get(url)
with open(state_of_the_union.txt, w) as f:f.write(res.text)# 使用 TextLoader 加载文本
loader TextLoader(./state_of_the_union.txt)
documents loader.load()# 使用 CharacterTextSplitter 拆分文本成小块
text_splitter CharacterTextSplitter(chunk_size500, chunk_overlap50)
chunks text_splitter.split_documents(documents)# 初始化 Weaviate 客户端
client Client(embedded_optionsEmbeddedOptions())# 在 Weaviate 中创建向量存储
vectorstore Weaviate.from_documents(clientclient,documentschunks,embeddingOpenAIEmbeddings(),by_textFalse
)2. 构建 RAG Pipline使用 RAG 模型进行问答对话通过检索上下文信息来支持生成更精准的回答。
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser# 定义检索器
retriever vectorstore.as_retriever()# 准备中文prompt模板
template 你是一个用于问答任务的助手。
使用以下检索到的上下文片段来回答问题。
如果你不知道答案只需说你不知道。
最多使用三句话保持回答简洁。
问题: {question}
上下文: {context}
回答:prompt ChatPromptTemplate.from_template(template)# 定义LLM
llm ChatOpenAI(model_namegpt-3.5-turbo, temperature0)# 构建RAG链
rag_chain ({context: retriever, question: RunnablePassthrough()} | prompt | llm| StrOutputParser()
)# 运行RAG链
query 总结内容并列出关键词.
result rag_chain.invoke(query)
print(result)以上就是一个简单的 RAG Pipline 的构建和运行过程。通过这种方式LangChain 提供了一种方便而强大的方法来实现检索增强生成任务使得语言模型能够更好地利用外部知识源来提高其性能。
总结
LangChain 提供了丰富的组件和功能使得 RAG 的实现变得简单而灵活。通过检索增强生成使我们能够充分利用大语言模型和外部知识源生成更加准确和具有上下文的回答从而提高自然语言处理任务的性能。
引用 https://github.com/langchain-ai/langchainhttps://python.plainenglish.io/rag-using-langchain-c371fcd02d13https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2