LangChain 实战:基于网页数据的 RAG 问答及来源溯源
1. 背景与目标
在构建检索增强生成(RAG)系统时,数据源的选择至关重要。传统的 RAG 实践常使用本地 PDF 或文档作为知识库,但在实际业务场景中,在线网页数据往往更具时效性和丰富性。
本教程将综合展示如何利用 LangChain 实现网络数据 + RAG 问答的完整流程。除了基本的问答功能外,重点在于如何在返回结果中添加答案的来源引用。这一功能在 RAG 应用中非常关键:
- 可追溯性:让用户了解答案生成的依据,防止模型幻觉。
- 信任度:展示参考原文,增加回答的专业性和可信度。
- 调试辅助:当回答错误时,可以通过来源快速定位是检索问题还是生成问题。
2. 环境准备
确保已安装必要的依赖库。以下代码基于 langchain-community 和 langchain-openai 等最新组件结构编写。
pip install langchain langchain-community langchain-openai chromadb beautifulsoup4 requests
主要导入模块如下:
import bs4
from langchain import hub
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough, RunnableParallel
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
3. 加载网页数据
3.1 使用 WebBaseLoader
LangChain 提供了 WebBaseLoader 类专门用于加载网页内容。它底层利用 urllib 获取 HTML,并通过 BeautifulSoup 进行解析。
loader = WebBaseLoader(
web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
class_=("post-content", "post-title", )
)
),
)
docs = loader.load()


