基于 LangChain 与阿里百炼的 RAG 网页智能问答系统实战
本文介绍如何使用 LangChain、WebBaseLoader、阿里百炼嵌入模型及 FAISS 向量库构建 RAG 网页智能问答系统。流程涵盖网页爬取、文本分割、向量化存储及通义千问生成回答。通过 DashScope API 调用实现无需本地部署大模型的轻量级方案,适用于政务、金融等场景的文档问答需求。

本文介绍如何使用 LangChain、WebBaseLoader、阿里百炼嵌入模型及 FAISS 向量库构建 RAG 网页智能问答系统。流程涵盖网页爬取、文本分割、向量化存储及通义千问生成回答。通过 DashScope API 调用实现无需本地部署大模型的轻量级方案,适用于政务、金融等场景的文档问答需求。

在政务信息、行业资讯等场景中,我们常常需要从网页文本中快速提取关键信息并回答用户问题。传统的'复制粘贴 + 人工总结'效率极低,而基于大模型的 RAG(检索增强生成)技术,能实现「网页内容爬取→文本向量化→智能检索→精准回答」的全流程自动化。
本文将实战搭建一个针对政府网页的智能问答系统,核心技术栈如下:

本次实战的核心逻辑可概括为 5 步:
首先安装所有依赖包,执行以下命令:
# LangChain 核心依赖
pip install langchain langchain-community langchain-core langchain-classic
# 网页解析依赖
pip install beautifulsoup4 requests
# 向量库依赖
pip install faiss-cpu
# 环境变量管理
pip install python-dotenv
# OpenAI 兼容接口(调用通义千问)
pip install openai
# 阿里百炼 SDK
pip install dashscope
同时准备关键资源:
.env 文件,写入:DASHSCOPE_API_KEY=你的 API 密钥。# 导入和使用 WebBaseLoader
from langchain_community.document_loaders import WebBaseLoader
from dotenv import load_dotenv
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from pydantic import SecretStr
import bs4
import os
load_dotenv()
loader = WebBaseLoader(
web_path="https://www.gov.cn/zhengce/202512/content_7052399.htm",
bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT"))
)
docs = loader.load()
# 分割文档(chunk_size=500,重叠 50 个字符)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)
print(f"文档分割后片段数量:{len(documents)}")
# 初始化阿里百炼嵌入模型
embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
)
# 将文档片段转换为向量并存储到 FAISS
vector = FAISS.from_documents(documents, embeddings)
print("阿里百炼嵌入 + FAISS 向量存储构建完成!")
from langchain_core.prompts import ChatPromptTemplate
from langchain_classic.chains.combine_documents import create_stuff_documents_chain
from langchain_openai import ChatOpenAI
from langchain_classic.chains import create_retrieval_chain
prompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:
<context>
{context}
</context>
问题:{input}""")
llm = ChatOpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen-plus",
api_key=SecretStr(os.environ["DASHSCOPE_API_KEY"]),
)
# 创建文档组合链
document_chain = create_stuff_documents_chain(llm, prompt)
# 创建检索链
retriever = vector.as_retriever()
retriever.search_kwargs = {"k": 3} # 限制为最多检索 3 个文档
retrieval_chain = create_retrieval_chain(retriever, document_chain)
response = retrieval_chain.invoke({"input": "如何丰富群众精神文化生活?"})
print(response["answer"])
loader = WebBaseLoader(
web_path="目标网页地址",
bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT"))
)
WebBaseLoader:自动爬取网页 HTML 并解析文本,无需手动写爬虫;bs_kwargs:通过 bs4.SoupStrainer 指定仅解析 id="UCAP-CONTENT" 的标签,过滤网页导航栏、广告等无关内容,精准提取政府网页正文。text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunk_size=500:将长文本切分为 500 字符的片段(适配嵌入模型的长度限制);chunk_overlap=50:相邻片段重叠 50 字符,避免语义断裂(比如一句话被切分成两个片段)。embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
)
text-embedding-v1 是阿里专为中文优化的嵌入模型,检索准确率高于通用模型;# 文档组合链:拼接上下文和问题
document_chain = create_stuff_documents_chain(llm, prompt)
# 检索链:串联检索器和文档组合链
retrieval_chain = create_retrieval_chain(retriever, document_chain)
create_stuff_documents_chain:将检索到的所有文档片段直接拼接进 Prompt(适合短文本场景);create_retrieval_chain:LangChain 封装的通用 RAG 链,自动完成'检索→拼接 Prompt→调用大模型'全流程,无需手动编排。爬取到的原始文档数量:1
文档分割后片段数量:28
阿里百炼嵌入 + FAISS 向量库构建完成!
=== 智能回答 ===
丰富群众精神文化生活可从以下方面着手:
1. 推进公共文化服务体系建设,完善基层文化设施,实现城乡文化资源均衡配置;
2. 开展多样化的群众文化活动,如文艺汇演、非遗展示、全民阅读等;
3. 支持地方特色文化发展,挖掘乡土文化资源,打造群众喜闻乐见的文化产品;
4. 利用数字技术赋能文化服务,推广线上文化场馆、云端文艺演出等新业态。
headers={"User-Agent": "Mozilla/5.0"})、更换 parse_only 的解析规则(比如按 class 解析)、增加超时重试。.env 文件中 API Key 是否正确,确认阿里云账号已开通百炼服务,测试网络能否访问 dashscope.aliyuncs.com。retriever.search_kwargs={"k": 5} 增加检索数量,或调整 chunk_size 为 300/800 优化分割粒度。web_path 改为列表(["url1", "url2"]),爬取多个相关网页,构建更全面的知识库;WebBaseLoader 为 PyPDFLoader/DocxLoader,支持 PDF、Word 等本地文档的智能问答;create_map_reduce_documents_chain 替代 create_stuff_documents_chain,处理长文档时先总结每个片段再生成回答;create_retrieval_chain 是 LangChain 封装的通用 RAG 链,大幅降低了流程编排的复杂度,适合快速验证业务场景。该系统可直接适配政务、金融、教育等领域的网页 / 文档问答场景,只需替换爬取地址和问题,即可快速实现专属的智能问答工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online