(四)數據檢索與增強生成——讓對話系統更智能、更高效

上一篇:(三)鏈式工作流構建——打造智能對話的強大引擎

在前三個階段,我們已經搭建了一個基礎的智能對話,并深入探討了輸入輸出處理和鏈式工作流構建的細節。今天,我們將進入智能對話系統的高級階段——數據檢索與增強生成。這一階段的目標是通過數據檢索和增強生成技術,讓對話系統能夠基于外部數據進行回答,從而更加智能和高效。(建議從第一篇食用)

一、文檔加載與處理:為系統提供知識基礎

文檔加載是智能對話系統獲取知識的第一步。通過加載各種類型的文檔,我們可以為系統提供豐富的知識基礎。

導入相關包

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.pswp.cn/news/900266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900266.shtml
英文地址,請注明出處:http://en.pswp.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 地址,從而…