游乐游手机版
首页/AI教程/文章详情

LangChain 网页 RAG 实战 入门到精通 第7篇

时间:2026-05-28 22:38
基于Langchain-RAG实现网页摘要检索工具,通过WebBaseLoader加载网页并分割文档,构建向量存储和检索器。采用两种摘要方法:检索链结合文档链生成问答式摘要,或使用内置摘要链直接总结。需注意通过提示词模板显式控制输出语言,避免默认英文输出。

前言

在此前的Langchain-RAG实战中,我们已经系统梳理了RAG的完整技术流程。今天的目标十分明确:动手构建一个基于Langchain-RAG的网页摘要检索工具。简而言之,就是让机器自动“阅读”网页,并从中精准提取核心信息,帮助用户快速掌握关键内容。

需求背景

在日常工作中,我们常常需要快速获取某个网页的核心要点。然而,许多网页内容冗长繁杂,逐页通读并不现实。若能拥有一款自动将网页正文提炼为简洁摘要的工具,工作效率的提升将不言而喻。今天,我们将借助Langchain把这个功能真正落地实现。

项目代码

WebBaseLoader

WebBaseLoader是LangChain社区提供的一款文档加载器,其职责明确:从指定的网页URL抓取内容,再经解析、清洗、封装为标准化的Document对象。

具体流程分为三步:

  1. 发起请求:内部调用requests库向目标URL发送HTTP GET请求,获取原始HTML源码。
  2. 解析与清洗:借助BeautifulSoup4解析HTML,智能剔除脚本、样式表、导航栏、页脚等无关标签,仅保留核心正文文本。
  3. 标准化输出:将提取的文本及元数据(如来源URL、标题)打包成Document对象。每个Document包含page_content(文本内容)与metadata(元数据)。

网页→文档

  • web_path:网页地址

  • bs_kwargs:解析配置

    • bs4.SoupStrainer(id="UCAP-CONTENT") 表示仅解析id为“UCAP-CONTENT”的区域

打开目标网页,我们需要提取正文部分,页面头部与底部均不需要。查看网页源码可以发现,detailContent段正是我们所需的内容。

loader = WebBaseLoader(web_path="https://www.gov.cn/yaowen/liebiao/202603/content_7061810.htm",# bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT"))# 分块:将网页中目标内容进行分割bs_kwargs={"parse_only":bs4.SoupStrainer(id="UCAP-CONTENT")})docs = loader.load()

准备工作

# 文本分块切割splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)documents = splitter.split_documents(docs)# 实例化向量存储(Chroma)vector_store = Chroma.from_documents(documents=documents,embedding=llm_embeddings)# 创建检索器retriever = vector_store.as_retriever()# 注意:以下Prompt模板中包含 {context} 和 {input} 两个变量# 需使用{context}表示上下文,该变量会自动从retriever中获取# human中限定了变量{input},链中必须使用该变量system_prompt = """你是问答任务的助理。请根据以下上下文回答问题:上下文:<{context}>如果你不知道答案,不要通过其他渠道获取,直接回答你不知道。"""prompt_template = ChatPromptTemplate.from_messages([("system", system_prompt),("human", "{input}")])

摘要

方法一:内置检索链

  • retrieval_chain 与 documents_chain 组合

# ====================== 方式1:retrieval_chain + documents_chain ======================# 创建链:预定义链 create_stuff_documents_chain(文档链)documents_chain = create_stuff_documents_chain(client,prompt_template)# 参数1:检索器;参数2:文档链retrieval_chain = create_retrieval_chain(retriever, documents_chain)# 使用大模型生成答案resp = retrieval_chain.invoke({"input":"会议提到了什么?"})print("=========方式1:retrieval_chain + documents_chain==========")print(resp["answer"])

方法二:内置摘要链

  • load_summarize_chain
代码

# 定义明确要求生成中文摘要的提示词模板# 注意:{text} 是占位符,链会自动将文档内容填充至此prompt_template = """请用中文简洁地总结以下文本的主要内容:{text}请确保摘要完全使用中文,并涵盖核心要点。中文摘要:"""prompt = PromptTemplate(template=prompt_template, input_variables=["text"])summarize_chain = load_summarize_chain(llm=client,chain_type="stuff", # 采用stuff策略prompt=prompt)# 4. 执行摘要summary = summarize_chain.invoke(docs)

注意事项
  1. invoke的入参是loader.load()加载好的Document对象,而非方法一中经过分块处理的Document。这是两种方法之间显著的差异,务必留意。

summary = summarize_chain.invoke(docs)

2. 当直接调用而不指定任何约束时,会发现输出的摘要竟然是英文。

summarize_chain = load_summarize_chain(llm=client,chain_type="stuff" # 采用stuff策略)# 执行摘要summary = summarize_chain.invoke(docs)

  • 那么问题来了:输入的是纯中文文档,但经过LangChain的load_summarize_chain函数处理后,摘要输出却变成了英文。原因是什么?

    • 这本质上不是代码或框架的Bug,而是对大模型工作模式以及LangChain默认配置的理解偏差。它触及了当前AI应用开发中一个非常典型且关键的“黑箱”问题:我们究竟该如何精确控制大模型的输出行为?说到底是提示词工程的范畴。
    • 原因其实很简单:load_summarize_chain内部默认实现了一个Prompt模板,该模板默认要求模型输出英文。
    • 经验总结:“隐式”不如“显式”。在AI工程实践中,所有关键要求(如输出格式、语言、风格、长度)都必须通过提示词显式、无歧义地传递。依赖模型的“隐式推断”是系统不稳定、结果不可控的主要根源。

方案对比

两种方式生成的摘要质量相差不大。不过方式1较为谨慎,在摘要末尾会附加一句“仅基于给定上下文得出”的声明。

扩展思考

至此,一款网页内容摘要提取工具已成功实现。若需提取大量网页内容,只需基于此核心功能做进一步扩展。例如,当数据量上升后,可以限定摘要字数,对网页进行分类,并将同类信息汇总至一张表格。后续便可基于这些信息展开更深入的数据分析与处理工作。

源代码

github

来源:https://juejin.cn/post/7616564460149227570
上一篇请提供原始文章标题 下一篇AI办公助手高效提升工作效率的未来之助
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Claude Token节省十大实用技巧方案
AI教程 · 2026-07-04

Claude Token节省十大实用技巧方案

通过编辑而非追加消息、每15-20条消息开新对话、合并问题、利用Projects缓存、预设记忆、关闭附加功能、按任务选择模型、分散时段、避开高峰及开启超额使用,能有效减少上下文重读,节省Token。

硅基流动冲刺Token工厂第一股亏损反更值钱?
AI教程 · 2026-07-04

硅基流动冲刺Token工厂第一股亏损反更值钱?

硅基流动冲刺港交所“Token工厂第一股”,2025年营收5533万元,净亏损3 45亿元,毛利率-24%。两条业务线分化:公有云服务亏损严重,本地部署毛利率达82 5%。依赖中立第三方定位吸引资本,但面临原厂降价、大厂竞争及供应链风险,估值77亿背后存隐忧。

AI Agent的真正价值在于长在业务流程中
AI教程 · 2026-07-04

AI Agent的真正价值在于长在业务流程中

AIAgent需嵌入企业业务流程,而非仅作聊天工具。以零售品类管理为例,通过趋势识别、选品与货架规划,预计可带来2%—5%销售提升及10%P&L改善。设计需模块化、可整合,确保可解释性,重新界定人、AI与工具的关系。

后张雪峰时代大厂抢滩AI志愿填报
AI教程 · 2026-07-04

后张雪峰时代大厂抢滩AI志愿填报

AI高考志愿填报工具在大厂推动下普及,能快速整合信息、生成方案,但存在数据幻觉、同质化风险。它无法替代张雪峰式实用主义建议和信誉责任,志愿填报仍需个性化判断与深度信息。

阿里禁用Anthropic全系产品的理性风控决策
AI教程 · 2026-07-04

阿里禁用Anthropic全系产品的理性风控决策

阿里自7月10日起全员禁用Anthropic全系产品,因其ClaudeCode被发现存在隐蔽身份识别与隐写标记机制,且Anthropic曾指控阿里进行模型蒸馏。此举源于安全信任崩塌、中美AI博弈加剧,阿里同步换装自研工具Qoder,推动国产AI编码工具替代。