(四)数据检索与增强生成——让对话系统更智能、更高效

上一篇:(三)链式工作流构建——打造智能对话的强大引擎

在前三个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理和链式工作流构建的细节。今天,我们将进入智能对话系统的高级阶段——数据检索与增强生成。这一阶段的目标是通过数据检索和增强生成技术,让对话系统能够基于外部数据进行回答,从而更加智能和高效。(建议从第一篇食用)

一、文档加载与处理:为系统提供知识基础

文档加载是智能对话系统获取知识的第一步。通过加载各种类型的文档,我们可以为系统提供丰富的知识基础。

导入相关包

from langchain_community.chat_models import ChatZhipuAI
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import ZhipuAIEmbeddings
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_core.documents import Document
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate

网页文档加载

web_loader = WebBaseLoader(["https://baike.baidu.com/item/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/9180"])
web_docs = web_loader.load()

通过网页文档加载,我们可以从互联网上获取实时信息,让系统始终保持知识的更新。

该代码段在下面没有用到,所以展示如何加载网页内容作用

PDF文档加载

pdf_loader = PyPDFLoader("DL.pdf")
pdf_docs = pdf_loader.load()
print(pdf_docs)

PDF文档加载功能允许我们从本地或网络上的PDF文件中提取文本,为系统提供更多专业领域的知识。

查看加载的文档内容:

在这里插入图片描述

文本文件加载

text_loader = TextLoader("ML.txt", encoding="utf-8")
text_docs = text_loader.load()
print(text_docs)

文本文件加载是最基础的文档加载方式,适用于处理纯文本文件。

查看加载的文档内容:
在这里插入图片描述

二、文档分割:优化数据处理效率

文档分割是将长文本分割成适合处理的小块的过程。通过优化分割策略,我们可以显著提高系统的处理效率。

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500,  # 块大小(字符数)chunk_overlap=50,  # 块间重叠separators=["\n\n", "。", "!", "?", ";"],  # 中文分句符号length_function=len  # 使用字符数统计
)
chunks = text_splitter.split_documents(pdf_docs + text_docs)
print(chunks)

这段代码展示了如何针对中文文本进行优化分割。通过设置合适的块大小和重叠度,我们可以确保每个块既包含足够的信息,又不会过于冗长。

分割后的内容:(分割成一个个Document)
在这里插入图片描述

三、向量化与存储:让文本数据可检索

向量化是将文本数据转换为向量表示的过程,这是实现高效检索的关键步骤。

向量化模型

embeddings = ZhipuAIEmbeddings(model="embedding-3",
)
print(embeddings)

通过指定向量化模型,我们可以将文本数据转换为高维向量,从而实现语义级别的相似度计算。

查看向量化模型信息:
在这里插入图片描述

向量存储

vector_store = InMemoryVectorStore(embedding=embeddings)
vector_store.add_documents(documents=chunks)

向量存储允许我们将向量化后的文档存储起来,以便后续的检索和查询。

四、基础检索:让系统基于数据回答问题

基础检索是智能对话系统的核心功能之一,它允许系统基于存储的数据回答用户的问题。

定义提示模板

template = """基于以下上下文回答问题:
{context}
问题:{input}"""
prompt = ChatPromptTemplate.from_template(template)

通过定义提示模板,我们可以指导模型如何基于上下文回答问题。

构建文档处理链

document_chain = create_stuff_documents_chain(chat, prompt)

文档处理链负责将检索到的文档传递给模型进行处理。

构建完整RAG链

retriever = vector_store.as_retriever(search_kwargs={"k": 3})  # 返回前3相关结果
rag_chain = create_retrieval_chain(retriever, document_chain)

RAG(Retrieval-Augmented Generation)链结合了检索和生成技术,让系统能够基于外部数据进行回答。

执行查询

response = rag_chain.invoke({"input": "ML与DL的区别与联系"})
print(response["answer"])

通过执行查询,我们可以看到系统如何基于存储的数据回答复杂的问题。

结果如下:

机器学习(ML)与深度学习(DL)之间的区别与联系如下:**区别:**1. **定义和范围:**- 机器学习是一个更广泛的概念,指的是让计算机通过数据和算法自动学习和改进性能的技术。- 深度学习是机器学习的一个子领域,它特别关注使用多层神经网络来处理和表示数据。2. **模型复杂度:**- 机器学习可以使用各种类型的模型,包括简单的线性模型、决策树、支持向量机等。- 深度学习通常使用更复杂的模型,如卷积神经网络(CNN)、循环神经网络(RNN)和生成对抗网络(GAN)等。3. **特征提取:**- 传统的机器学习模型通常需要手动设计特征,而深度学习可以自动从原始数据中提取特征。4. **数据需求:**- 机器学习模型可能需要大量数据,但不需要像深度学习那样大量的数据来训练。5. **计算资源:**- 深度学习模型通常需要更多的计算资源,尤其是GPU,因为它们需要大量的并行计算来训练。**联系:**1. **技术关系:**- 深度学习是机器学习的一个子集,因此深度学习模型是机器学习模型的一种。2. **应用领域:**- 深度学习在图像识别、语音识别、自然语言处理等领域取得了显著成果,这些领域也是机器学习的主要应用领域。3. **目标:**- 两者都旨在使计算机能够从数据中学习,并自动改进性能。4. **发展历程:**- 深度学习是机器学习发展的一个重要阶段,它在某些领域取得了突破性的进展。总结来说,深度学习是机器学习的一种特定实现方式,它通过使用复杂的神经网络模型来提高机器学习在特定任务上的性能。尽管它们之间存在区别,但深度学习与机器学习在目标和应用上有着紧密的联系。

总结

数据检索与增强生成是智能对话系统的核心能力,它不仅决定了系统的知识广度,还影响着系统的回答质量。通过文档加载、文档分割、向量化与存储、基础检索等技术,我们可以让对话系统变得更加智能和高效。

未来,我们可以进一步探索以下方向:

  • 更复杂的检索策略:结合多模态数据,实现跨领域的知识检索。
  • 实时数据更新:通过动态加载和更新数据,让系统始终保持知识的时效性。
  • 个性化推荐:根据用户的历史交互记录,提供个性化的回答和建议。

祝我们学习愉快 😊

下一篇:(五)智能体与工具协同——打造智能对话的超级助手

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)

这里写目录标题 JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)一、引言二、全面认识Java2.1 Java的起源与发展历程2.2 Java的特性2.2.1 简单性2.2.2 面向对象2.2.3 平台无关性2.2.4 健壮性2.2.5 安全性2.2.6 多线程…

如何查看 MySQL 的磁盘空间使用情况:从表级到数据库级的分析

在日常数据库管理中,了解每张表和每个数据库占用了多少磁盘空间是非常关键的。这不仅有助于我们监控数据增长,还能为性能优化提供依据。 Google Gemini中国版调用Google Gemini API,中国大陆优化,完全免费!https://ge…

[Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集

[Windows] XHS-Downloader 链接:https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款开源免费的小红书内容下载工具,支持无水印视频 / 图文提取、多链接批量处理及账号作品采集。其核心优势包括: 全平台…

6.1 宽度优先搜索算法(BFS)

宽度优先搜索算法(BFS Breadth first search) 又称广度优先搜索,这种搜索是逐层的,搜索完上层,才会搜索下一层,直到找到目标节点。 搜索过程如图中箭头方向: 【例如】 八数码难题:利用空格的移动&#xff…

基于LSTM的文本分类2——文本数据处理

前言 由于计算机无法认识到文字内容,因此在训练模型时需要将文字映射到计算机能够识别的编码内容。 映射的流程如下: 首先将文字内容按照词表映射到成唯一的数字ID。比如“我爱中国”,将“中”映射为1,将“国”映射到2。再将文…

Redis数据结构之ZSet

目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合,且不允许重复的成员,不同的是ZSet…

什么是DHCP服务,在生活中的应用是什么?

提起DHCP,不接触互联网的可能会很陌生,其实并没有这么高深,简明扼要的说就是可以自动为连接的设备分配IP地址,子网掩码,网关,dns等网络参数。使连接步骤简化,从而提高效率。 主要功能&#xff…

2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点

4月2日,以"科技助农数据兴业”为主题的2025AI智能数字农业研讨会在苏州国际博览中心盛大启幕。本次盛会吸引了来自全国各地相关部门领导、知名专家学者、行业协会组织,以及县级市农业企业代表、县级市农产品销售商等万名嘉宾齐聚姑苏城,…

论文导读 | SOSP23 | Gemini:大模型 内存CheckPoint 快速故障恢复

本期分享的是一篇SOSP 2023论文: Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布

源码介绍 wordpress自动采集Scrapes插件,支持ripro,modown,子比,7b2等多种WordPress主题 支持PHP7.4,PHP8.0及以上不支持 上传插件到wp-content/plugins目录,然后解压 不需要写采集规则,傻瓜式…

JavaScript Math(算数)指南

JavaScript Math(算数)指南 引言 JavaScript的Math对象是一个内置对象,提供了进行数学运算的方法和值。它对于执行基本的数学计算、生成随机数以及执行更复杂的数学操作非常有用。本文将详细介绍JavaScript中的Math对象,涵盖其常…

Deep Reinforcement Learning for Robotics翻译解读

a. 机器人能力 1 单机器人能力(Single-robot competencies) 运动能力(Mobility) 行走(Locomotion)导航(Navigation) 操作能力(Manipulation) 静态操作&…

最新扣子(Coze)案例教程:最新抖音视频文案提取方法替代方案,音频视频提取文案插件制作,手把手教学,完全免费教程

👨‍💻 星球群同学反馈,扣子平台的视频提取插件已下架,很多智能体及工作流不能使用,斜杠君这里研究了一个替代方案分享给大家。 方案原理:无论是任何视频或音频转文案,我们提取的方式首先都是要…

yum list查询时部分包查找不到流程分析

以下是针对 yum list available -c xxx.repo(对应 DNF 的命令行操作)的详细流程解读,包括参数解析、配置初始化、元数据加载、数据库查询,以及读取不到特定包的场景分析。 1. 命令行参数解析与入口函数 代码入口: dnf.cli.main.m…

k8s 1.23升级1.24

0、简介 这里只用3台服务器来做一个简单的集群,当前版本是1.23.17目标升级到1.24.17 地址主机名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我这里设置的master2可调度pod,将master2的污点去掉 kubectl de…

# 实时人脸识别系统:基于 OpenCV 和 Python 的实现

实时人脸识别系统:基于 OpenCV 和 Python 的实现 在当今数字化时代,人脸识别技术已经广泛应用于各种场景,从手机解锁到安防监控,再到智能门禁系统。今天,我将通过一个完整的代码示例,详细讲解如何使用 Pyt…

Linux:(五种IO模型)

目录 一、对IO的重新认识 二、IO的五种模型 1.阻塞IO 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 6.一些概念的解释 三、非阻塞IO的代码实现 1.fcntl 2.实现主程序 一、对IO的重新认识 如果有人问你IO是什么,你该怎么回答呢? 你可能会说…

将电脑控制手机编写为MCP server

文章目录 电脑控制手机后,截屏代码复习MCP server构建修改MCP的config文件测试效果困惑电脑控制手机后,截屏代码复习 def capture_window(hwnd: int, filename: str = None) -> dict:""&

[ctfshow web入门] web6

前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗,我们输入url/xxx,其中如果url/xxx存在,那么访问成功,证明存在这样一个入口点;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx,…

【计算机网络】Linux配置SNAT策略

什么是NAT? NAT 全称是 Network Address Translation(网络地址转换),是一个用来在多个设备共享一个公网 IP上网的技术。 NAT 的核心作用:将一个网络中的私有 IP 地址,转换为公网 IP 地址,从而…