LangChain 网页 RAG 实战 入门到精通 第7篇
前言
在此前的Langchain-RAG实战中,我们已经系统梳理了RAG的完整技术流程。今天的目标十分明确:动手构建一个基于Langchain-RAG的网页摘要检索工具。简而言之,就是让机器自动“阅读”网页,并从中精准提取核心信息,帮助用户快速掌握关键内容。
需求背景
在日常工作中,我们常常需要快速获取某个网页的核心要点。然而,许多网页内容冗长繁杂,逐页通读并不现实。若能拥有一款自动将网页正文提炼为简洁摘要的工具,工作效率的提升将不言而喻。今天,我们将借助Langchain把这个功能真正落地实现。
项目代码
WebBaseLoader
WebBaseLoader是LangChain社区提供的一款文档加载器,其职责明确:从指定的网页URL抓取内容,再经解析、清洗、封装为标准化的Document对象。
具体流程分为三步:
- 发起请求:内部调用requests库向目标URL发送HTTP GET请求,获取原始HTML源码。
- 解析与清洗:借助BeautifulSoup4解析HTML,智能剔除脚本、样式表、导航栏、页脚等无关标签,仅保留核心正文文本。
- 标准化输出:将提取的文本及元数据(如来源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)
注意事项
- 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
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
什么是文本生成(Text Generation) 一文读懂概念与原理 AI百科知识
文本生成作为自然语言处理领域的前沿技术,正深刻改变着人类与信息交互的方式。它使机器从被动响应进化为主动创造——既能撰写财经快讯、构思故事,也能模拟流畅的对话场景。这不仅是效率的飞跃,更为个性化沟通和创意表达开辟了新路径。随着算法持续迭代与数据不断积累,文本生成的边界持续拓展,其潜力令人振奋。今天,我
Gigopost首页官方入口
```html Gigopost Home 到底是什么?一文带你了解 简单来说,Gigopost Home 是 Gigopost 公司推出的一款集 AI 内容创作与社交媒体管理于一体的智能工具。它能够借助人工智能自动生成内容、优化搜索引擎排名,并支持跨多个社交平台一键分发。尤其适合那些希望在内容营销
AI技术如何提升工作效率与客户服务体验
AI技术的应用与实践:从理论到落地的全流程指南 数字化浪潮席卷而来,人工智能早已不再是科幻电影里的遥远概念,而是切切实实地重塑着各行各业的运行逻辑与商业模式。无论是提升内部运营效率,还是优化客户服务体验,掌握并落地AI应用,已经成为个人与组织抓住新一轮增长机遇的核心能力。今天,我们就来聊聊几个能够立
AI自动对齐打开教程与人工智能提效攻略
在当今商业环境中,如何开启AI的自动对齐功能,并充分运用人工智能技术来提升自动化对齐的效率,已成为各行各业共同探讨的核心议题。这项功能在现代办公中的价值不言而喻——它能显著提升工作效率,尤其是在处理文档和演示文稿时,可省去大量繁琐的手动格式调整工作。试想一下,如果没有它,我们还需额外投入多少时间与精
2024年AI绘画软件哪个好 10款实用推荐与横向评测
数据科学、算法等核心技术的持续演进,正在重新定义内容创作的方方面面。从AI抠图、智能识别,到近年来备受关注的AI绘画与智能问答,技术已渗透到各个领域。 AI绘画,尤其为创作者开辟了一扇全新的创意之窗。它让艺术创作变得前所未有地便捷且充满乐趣,也使独特的视觉表达成为现实。正因如此,越来越多的创新者与艺
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

