Dify中的RAG和知識庫

一.RAG 基本架構

當用戶提問 “美國總統是誰?” 時,系統并不是將問題直接交給大模型來回答,而是先將用戶問題在知識庫中進行向量搜索,通過語義相似度匹配的方式查詢到相關的內容(拜登是美國現任第46屆總統…),然后再將用戶問題和搜索到的相關知識提供給大模型,使得大模型獲得足夠完備的知識來回答問題,以此獲得更可靠的問答結果。

二.混合檢索

1.為什么需要混合檢索

向量檢索優勢:復雜語義的文本查找,相近語義理解,多語言理解,多模態理解,容錯性。傳統關鍵詞搜索優勢:精確匹配,少量字符的匹配,傾向低頻詞匯的匹配。向量檢索和關鍵詞檢索在檢索領域各有其優勢。混合檢索通過多個檢索系統的組合,實現了多個檢索技術之間的互補。

2.向量檢索

通過生成查詢嵌入并查詢與其向量表示最相似的文本分段。

TopK:用于篩選與用戶問題相似度最高的文本片段。系統同時會根據選用模型上下文窗口大小動態調整片段數量。系統默認值為 3 。

Score 閾值:用于設置文本片段篩選的相似度閾值,即:只召回超過設置分數的文本片段。系統默認關閉該設置,即不會對召回的文本片段相似值過濾。打開后默認值為 0.5 。

Rerank 模型:可以在"模型供應商"頁面配置 Rerank 模型的 API 秘鑰之后,在檢索設置中打開"Rerank 模型",系統會在語義檢索后對已召回的文檔結果再一次進行語義重排序,優化排序結果。設置 Rerank 模型后,TopK 和 Score 閾值設置僅在 Rerank 步驟生效。

3.全文檢索

索引文檔中的所有詞匯,從而允許用戶查詢任意詞匯,并返回包含這些詞匯的文本片段。

TopK:用于篩選與用戶問題相似度最高的文本片段。系統同時會根據選用模型上下文窗口大小動態調整片段數量。系統默認值為 3 。

Rerank 模型:可在"模型供應商"頁面配置 Rerank 模型的 API 秘鑰之后,在檢索設置中打開"Rerank 模型",系統會在全文檢索后對已召回的文檔結果再一次進行語義重排序,優化排序結果。設置 Rerank 模型后,TopK 和 Score 閾值設置僅在 Rerank 步驟生效。

4.混合檢索

同時執行全文檢索和向量檢索,并應用重排序步驟,從兩類查詢結果中選擇匹配用戶問題的最佳結果,需配置 Rerank 模型 API。

TopK:用于篩選與用戶問題相似度最高的文本片段。系統同時會根據選用模型上下文窗口大小動態調整片段數量。系統默認值為 3 。

Rerank 模型:可在"模型供應商"頁面配置 Rerank 模型的 API 秘鑰之后,在檢索設置中打開"Rerank 模型",系統會在混合檢索后對已召回的文檔結果再一次進行語義重排序,優化排序結果。設置 Rerank 模型后,TopK 和 Score 閾值設置僅在 Rerank 步驟生效。

5.創建數據集時設置檢索模式

通過進入“數據集->創建數據集”頁面并在檢索設置中設置不同的檢索模式:

6.數據集設置中修改檢索模式

通過進入“數據集->選擇數據集->設置”頁面中可以對已創建的數據集修改不同的檢索模式。

7.提示詞編排中修改檢索模式

通過進入“提示詞編排->上下文->選擇數據集->設置”頁面中可以在創建應用時修改不同的檢索模式。

三.重排序

1.為什么需要重排序

重排序模型會計算候選文檔列表與用戶問題的語義匹配度,根據語義匹配度重新進行排序,從而改進語義排序的結果。其原理是計算用戶問題與給定的每個候選文檔之間的相關性分數,并返回按相關性從高到低排序的文檔列表。常見的 Rerank 模型如:Cohere rerank、bge-reranker 等。重排序一般都放在搜索流程的最后階段,非常適合用于合并和排序來自不同檢索系統的結果。

2.如何配置 Rerank 模型

Dify 目前已支持 Cohere Rerank 模型,通過進入“模型供應商-> Cohere”頁面填入 Rerank 模型的 API 秘鑰:

3.如何獲取 Cohere Rerank 模型

登錄:https://cohere.com/rerank,在頁內注冊并申請 Rerank 模型的使用資格,獲取 API 秘鑰。

4.數據集檢索模式中設置 Rerank 模型

通過進入“數據集->創建數據集->檢索設置”頁面并在添加 Rerank 設置。除了在創建數據集可以設置 Rerank ,也可在已創建的數據集設置內更改 Rerank 配置,在應用編排的數據集召回模式設置中更改 Rerank 配置。

TopK:用于設置 Rerank 后返回相關文檔的數量。

Score 閾值:用于設置 Rerank 后返回相關文檔的最低分值。設置 Rerank 模型后,TopK 和 Score 閾值設置僅在 Rerank 步驟生效。

5.數據集多路召回模式中設置 Rerank 模型

通過進入“提示詞編排->上下文->設置”頁面中設置為多路召回模式時需開啟 Rerank 模型。

四.召回模式

當用戶構建知識庫問答類的 AI 應用時,如果在應用內關聯了多個數據集,Dify 在檢索時支持兩種召回模式:N選1召回模式和多路召回模式。

1.N選1召回模式

在用戶上傳數據集時,系統將自動為數據集創建一個摘要式的描述。為了在該模式下獲得最佳的召回效果,可以"數據集->設置->數據集描述"中查看到系統默認創建的摘要描述,并檢查該內容是否可以清晰的概括數據集的內容。根據用戶意圖和數據集描述,由 Agent 自主判斷選擇最匹配的單個數據集來查詢相關文本,適合數據集區分度大且數據集數量偏少的應用。

提示:OpenAI Function Call已支持多個工具調用,Dify將在后續版本中升級該模式為"N選M召回"。

2.多路召回模式(推薦)

根據用戶意圖同時匹配所有數據集,從多路數據集查詢相關文本片段,經過重排序步驟,從多路查詢結果中選擇匹配用戶問題的最佳結果,需配置 Rerank 模型 API。在多路召回模式下,檢索器會在所有與應用關聯的數據集中去檢索與用戶問題相關的文本內容,并將多路召回的相關文檔結果合并,并通過 Rerank 模型對檢索召回的文檔進行語義重排序。

參考文獻

[1] 檢索增強生成(RAG):https://docs.dify.ai/v/zh-hans/learn-more/extended-reading/retrieval-augment

[2] 知識庫:https://docs.dify.ai/v/zh-hans/guides/knowledge-base

[3] Unstructured:https://docs.unstructured.io/welcome

[4] dify源碼解析-RAG:https://zhuanlan.zhihu.com/p/704341817

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45087.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對比多種方法執行命令行命令

在這兩種方法中,一種是使用argparse模塊來模擬命令行參數的解析,另一種是使用subprocess模塊來直接執行一個命令行命令。下面是對兩種方法的詳細比較: 使用argparse模擬命令行參數 這種方法主要用于在Python腳本內部測試或集成其他使用argp…

深入剖析C++的 “屬性“(Attribute specifier sequence)

引言 在閱讀開源項目源代碼是,發現了一個有趣且特殊的C特性:屬性。 屬性(attribute specifier sequences)是在C11標準引入的。在C11之前,編譯器特有的擴展被廣泛用來提供額外的代碼信息。例如,GNU編譯器&…

AcWing 3587:連通圖 ← dfs(鄰接矩陣 or 鏈式前向星)

【題目來源】https://www.acwing.com/problem/content/3590/【題目描述】 給定一個無向圖和其中的所有邊,判斷這個圖是否所有頂點都是連通的。【輸入格式】 輸入包含若干組數據。 每組數據第一行包含兩個整數 n 和 m,表示無向圖的點和邊數。 接下來 m 行…

Java面試題系列 - 第5天

題目:Java Lambda表達式與Stream API的深度應用 背景說明:Java 8引入了Lambda表達式和Stream API,極大地提升了Java函數式編程的能力,使代碼更簡潔、更易讀。掌握Lambda表達式和Stream API的使用,對于優化數據處理流程…

Qt/C++項目積累: 2.主機監控器 - 2.2 歷史功能實現

修訂歷史: 20240711:初始表設計,采用sqlite 正文: 關于歷史數據存儲,考慮的是用數據庫來完成,目前考慮使用Sqlite和mysql,先用sqlite來實現,設計表過程如下: 機器總覽…

白騎士的C++教學進階篇 2.1 指針與引用

系列目錄 上一篇:白騎士的C教學基礎篇 1.5 數據結構 指針和引用是C中非常重要的概念,它們提供了強大的功能,使程序員能夠直接操作內存,提高程序的效率和靈活性。在本篇博客中,我們將深入探討指針與引用的基礎知識&…

從零開始學習嵌入式----Makefile工具

一、Makefile 簡明指南 你是否曾經面對過一堆源代碼文件,卻不知道如何將它們編譯成可執行文件?或者你是否厭倦了每次修改代碼后都要手動輸入冗長的編譯命令? 如果是的話,那么 Makefile 就是你的救星! 二、Makefile 是什…

全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎?

全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎? 摘要: 本文主要介紹了Python中類和對象中的類方法和靜態方法,以及類方法和靜態方法的定義、特點、應用場景和使用方…

網安防御保護-小實驗

1、DMZ區內的服務器,辦公區僅能在辦公時間內(9:00-18:00)可以訪問,生產區的設備全天可以訪問 2、生產區不允許訪問互聯網,辦公區和游客區允許訪問互聯網 3、辦公區設備10.0.2.10不允許訪問DMZ區的FTP服務器和HTTP服務器,僅能ping通…

vue 環境變量那些事

常見的項目環境變量的使用 總則:使用 .env.環境名字文件去定義,運行命令的時候指定環境 比如:.env 代表所有環境變量使用的一些變量 .env.development 代表的開發環境變量 .env.production 代表的生產環境變量也就是上線以后使用的 vitevu…

自主研發接口測試框架

測試任務:將以前完成的所有的腳本統一改寫為unitest框架方式 1、需求原型 1.1 框架目錄結構 V1.0:一般的設計思路分為配置層、腳本層、數據層、結果層,如下圖所示 V 2.0:加入驅動層testdriver 1.2 框架各層需要完成的工作 1、配…

Fast DDS library windows 下源碼編譯(cmake)

目錄 編譯環境: 編譯需要的源碼文件: Fast DDS編譯: 注意事項: 參考文檔: 基于Fast DDS 的源碼來編譯相關的庫,然后可以通過python 來調用庫文件實現dds 數據通信,本文就詳細的介紹編譯過程…

機器學習筑基篇,容器調用顯卡計算資源,Ubuntu 24.04 快速安裝 NVIDIA Container Toolkit!...

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ] Ubuntu 24.04 安裝 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用戶能夠構建和運行 GPU 加速的容器,該工具包括一個容器運行時庫和實用程序,用于自動…

石油巨頭受沖擊!埃克森美孚、BP接連發出盈利預警

KlipC報道:近日,BP(英國石油)預計其第二季度將面臨10億至20億美元的減值費用,并發出警告稱其煉油利潤率“大幅下降”,石油交易收益預計出現疲軟。消息公布后,其股價下跌超4%。 由于中間餾分油利…

JavaScript(8)——函數

函數 function,是被設計執行特定任務的代碼塊。 函數可以把具有相同或相似邏輯的代碼包裹起來,通過函數調用執行這些代碼,這么做的優勢有利于精簡代碼方便復用。類似于alert(),prompt()和console.log(),這些都是js函數,不過已經…

STL(一)

書寫形式:string (const string& str, size_t pos, size_t len npos); 舉例: int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//從下標為0開始向后5個字符&…

如何在 Python 中創建一個類似于 MS 計算器的 GUI 計算器

問題背景 假設我們需要創建一個類似于微軟計算器的 GUI 計算器。這個計算器應該具有以下功能: 能夠顯示第一個輸入的數字。當按下運算符時,輸入框仍顯示第一個數字。當按下第二個數字時,第一個數字被替換。 解決方案 為了解決這個問題&am…

華為OD機考題(HJ108 求最小公倍數)

前言 經過前期的數據結構和算法學習,開始以OD機考題作為練習題,繼續加強下熟練程度。 描述 正整數A和正整數B 的最小公倍數是指 能被A和B整除的最小的正整數值,設計一個算法,求輸入A和B的最小公倍數。 數據范圍:1≤…

Spring中的適配器模式和策略模式

1. 適配器模式的應用 1.1適配器模式(Adapter Pattern)的原始定義是:將一個類的接口轉換為客戶期望的另一個接口,適配器可以讓不兼容的兩個類一起協同工作。 1.2 AOP中的適配器模式 在Spring的AOP中,使用Advice&#…

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM處理器采用了先進的14LPCFinFET工藝,提供更快的速度和更高的電源效率;四核Cortex-A53,單核Cortex-M4,多達五個內核 ,主頻高達1.8GHz,2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…