跳到主要内容

Langchain_RAG

内容笔记总结

核心主题

  • RAG(检索增强生成):结合检索与生成技术,为大语言模型(LLM)提供外部知识支持,解决传统问答系统知识库覆盖不足的问题。
  • LangChain 中 RAG 的实现:通过数据加载、向量化、存储与检索等模块,支持多种数据格式和知识库构建流程。

一、RAG 的定义与设计

1. RAG 概念

  • 检索(Retrieval):从知识库中找到与问题相关的信息。
  • 生成(Generation):利用检索到的信息生成准确、有上下文的答案。
  • 优势
    • 减少幻觉问题,提高回答质量。
    • 不需要重新预训练模型,降低成本。

2. RAG 流程

  • 用户提出问题。
  • 在知识库中检索相关信息。
  • 将检索结果嵌入到 LLM 的输入提示中。
  • LLM 生成详细准确的回答。

二、LangChain 中 RAG 的实现

1. 整体架构

  • Loader:加载外部数据源。
  • Transform:将数据转化为向量。
  • Embed:嵌入向量空间。
  • Store:存储到向量数据库。
  • Retrieve:从数据库中检索数据。

2. 支持的数据格式

LangChain 支持多种数据格式的加载与处理,包括:

  • Markdown 文件
from langchain.document_loaders import TextLoader

loader = TextLoader('loader.md')
print(loader.load())
  • CSV 文件
from langchain.document_loaders import CSVLoader

loader = CSVLoader('loader.csv')
print(loader.load())
  • Excel 文件
from langchain.document_loaders import UnstructuredExcelLoader

loader = UnstructuredExcelLoader('loader.xlsx')
print(loader.load())
  • HTML 文件
from langchain.document_loaders import UnstructuredHTMLLoader

loader = UnstructuredHTMLLoader('loader.html')
print(loader.load())
  • JSON 文件
from langchain.document_loaders import JSONLoader

loader = JSONLoader('loader.json', jq_schema='.template', text_content=False)
print(loader.load())
  • PDF 文件
from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader('loader.pdf')
print(loader.load())

3. 文档切割与处理

  • 文档切割器:将文档分割成小块,保持上下文关联。
  • 切割方式
    • 按字符分割。
    • 按 token 分割。

代码示例

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader('loader.pdf')
docs = loader.load()
content = [doc.page_content for doc in docs]

text_splitter = RecursiveCharacterTextSplitter(
chunk_size=50, # 切分的文本块大小
chunk_overlap=20, # 切分文本块重叠大小
length_function=len, # 长度函数
add_start_index=True, # 是否添加开始索引
)
text = text_splitter.create_documents(content)
print(text)

三、RAG 的优势与应用场景

1. 优势

  • 灵活性:无需重新训练模型,可以实时更新知识库。
  • 高效性:通过检索减少幻觉问题,生成准确答案。
  • 成本低:不需要复杂的特征工程。

2. 应用场景

  • 开放问答(Open-domain QA)。
  • 摘要式问答(Abstractive QA)。
  • 开放问题生成(Jeopardy Question Generation)。
  • 事实验证(Fact Verification)。

总结

  • RAG 技术:通过检索与生成结合,解决传统问答系统知识库覆盖不足的问题。
  • LangChain 实现:提供强大的数据加载、向量化、存储与检索功能,支持多种数据格式。
  • 文档处理:通过灵活的切割方式,确保内容的上下文关联性。
  • 应用价值:RAG 技术在知识密集型任务中具有广泛应用潜力,为 LLM 提供更强大的知识支持。