首页 游戏 软件 资讯 排行榜 专题
首页
AI教程
LangChain 网页 RAG 实战 入门到精通 第7篇

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

热心网友
42
转载
2026-05-28

前言

在此前的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
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

堪比收费字体9种字重无衬线体免费速领
AI资讯
堪比收费字体9种字重无衬线体免费速领

这款硬朗像素风无衬线字体,带你体验未来感设计与9档字重自由 一、全文速览图 二、字体简介 本期免费商用字体:Sinkin Sans,由英国专业字体工作室K-Type出品。这是一款融合了inktrap凹槽工艺的现代无衬线体,兼具优雅气质与实用性能,视觉上现代而不失温度,清晰易读,辨识度极佳。全家族共提

热心网友
05.28
LangChain 网页 RAG 实战 入门到精通 第7篇
AI教程
LangChain 网页 RAG 实战 入门到精通 第7篇

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

热心网友
05.28
免费可商用高级复古字体 文创包装神器
AI资讯
免费可商用高级复古字体 文创包装神器

Roland是一款免费可商用的复古装饰字体,灵感源自中世纪哥特书写传统,融合历史厚重感与现代视觉张力。提供Regular、Contour、Shadow三种字重,适用于复古海报、文创包装、品牌标识等场景,无需署名,无隐藏条款。

热心网友
05.28
QoderWake写代码实操:数字程序员自主完成代码变更测试全流程
AI资讯
QoderWake写代码实操:数字程序员自主完成代码变更测试全流程

QoderWake作为数字程序员需绑定身份与权限,通过监听仓库事件自动生成代码变更并创建PullRequest,随后在沙箱环境执行单元测试与集成验证,测试失败时输出分层诊断。最终生成交付包,经指定角色审批后方可合并部署,确保全流程可控可追溯。

热心网友
05.28
QoderWake日志调试快速定位脚本执行错误
AI资讯
QoderWake日志调试快速定位脚本执行错误

QoderWake脚本执行错误可通过日志定位。调试核心五步:启用详细日志模式并重定向输出;按时间戳与进程ID筛选关键日志段;检查脚本内嵌变量与路径解析结果;复现失败步骤并注入临时调试语句;验证Python解释器与依赖模块兼容性。

热心网友
05.28

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

Paralives首发销量充足 支撑后续开发无需DLC
游戏攻略
Paralives首发销量充足 支撑后续开发无需DLC

《Paralives》开发商承诺所有后续更新永久免费,拒绝付费DLC模式。15人小团队依靠首发销售额即可支撑多年运营,无需依赖额外内容包维持开发,展现了与《模拟人生》系列不同的差异化竞争思路。

热心网友
05.28
比亚迪宋Ultra DM-i上市12.99万 承诺城市领航安全兜底
业界动态
比亚迪宋Ultra DM-i上市12.99万 承诺城市领航安全兜底

2025年5月28日,比亚迪王朝网全新力作——宋Ultra DM-i正式推向市场,共推出5款配置车型,官方售价区间为12 99万至15 99万元。此次定价策略极具突破性:一款拥有310公里纯电续航能力的中型插电混动SUV,直接下探至13万元级别市场。作为王朝网络的新旗舰,该车明确瞄准高频出行需求场景

热心网友
05.28
折叠屏iPhone Ultra外观已定,第三方保护壳亮相
科技数码
折叠屏iPhone Ultra外观已定,第三方保护壳亮相

先来关注一个有趣的细节:苹果首款折叠屏手机,传闻将于今年秋季正式亮相。产品命名可能为iPhone Ultra,也有媒体称之为iPhone Fold——无论最终叫什么,这都将标志着苹果在折叠形态领域首次“出手”。 近日,配件厂商iFunSmart已率先上架iPhone Ultra的首批保护壳——这绝非

热心网友
05.28
山寨币ETF批量上市后市场表现分析 哪些项目值得关注
web3.0
山寨币ETF批量上市后市场表现分析 哪些项目值得关注

山寨币ETF迎来批量上市潮,首批项目市场表现如何?一文分析 Binance币安 欧易OKX ️ Huobi火币️ 最近,市场出现了一个不容忽视的新动向:XRP、DOGE、LTC、HBAR等现货ETF已经悄然登陆美国市场。与此同时,A VAX、LINK等资产的同类产品也正在审批流程中。进入11月以来,

热心网友
05.28
即使在大幅涨价后 Steam Deck 玩家热情依旧再次售罄
游戏攻略
即使在大幅涨价后 Steam Deck 玩家热情依旧再次售罄

近日,公司对SteamDeck1TBOLED版涨价300美元至949美元,上架短短不到24小时便再度售罄。据外界分析,该公司从中国大量补货并分批投放库存,高溢价未影响众多玩家的抢购热情与速度,其人气极其旺盛无比足以支撑快速清空。

热心网友
05.28