langchain官方RAG demo文档:https://python.langchain.com/docs/tutorials/rag/
总览
一个典型的RAG应用由两部分组成:索引(Indexing)和检索生成(Retrieval and generation)。索引是一条从数据源摄取数据并对其进行索引的管道,索引工作通常离线完成。检索生成就是实际的RAG调用,它在运行时使用用户输入检索相关数据,并将其传入模型。
从原始数据到得出答案最常见的完整流程如下:
索引:
- 加载(load):首先需要加载数据,使用Document Loaders完成。
- 分割(split):文本分割器将大型文档拆分成较小的部分。这对于索引数据和将其输入模型都非常有用,因为较大的部分更难搜索,而且无法适应模型有限的上下文窗口。
- 存储(store):我们需要一个地方来存储和索引我们的分割内容,以便日后能够对其进行搜索。这通常通过向量存储库和嵌入模型来实现。

检索生成
- 检索(Retrieve):给定一个用户输入,使用检索器检索出相关的分割内容。
- 生成(Generate):问题和检索数据组成的提示词被送入大模型来生成答案。

为数据建立索引之后,我们将使用LangGraph作为编排框架来实现检索和生成步骤。
实现
官方文档使用Jupyter Notebook来运行实现RAG的代码,便于观察每一步的结果。首先需要安装依赖:
%pip install --quiet --upgrade langchain-text-splitters langchain-community langgraph
LangSmith是一个监控工具,当应用变的越来越复杂时,使用它可以方便的观察内部的LLM调用,它可以一键式配置:
import getpass
import os
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = getpass.getpass()
组件
我们需要从LangChain的集成套件中选择三个组件。
对话模型(chat model)
对话模型就是最终输入的模型,因为网络原因,使用国外大模型可能非常麻烦,甚至还存在地区限制,这里选择我们的国产大模型DeepSeek:
%pip install -qU langchain-deepseek
import getpass
import os
if not os.getenv("DEEPSEEK_API_KEY"):
os.environ["DEEPSEEK_API_KEY"] = getpass.getpass("Enter your DeepSeek API key: ")
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
max_tokens=


442

被折叠的 条评论
为什么被折叠?



