基于Dify構(gòu)建客服智能體全流程實(shí)戰(zhàn),揭秘提升RAG效果關(guān)鍵
前言
Dify是一款開源的大語言模型應(yīng)用開發(fā)平臺,旨在降低AI應(yīng)用的開發(fā)門檻,幫助開發(fā)者和企業(yè)快速構(gòu)建、部署及管理生成式AI應(yīng)用。
Dify的知識庫功能將RAG管線上的各環(huán)節(jié)可視化,提供了一套簡單易用的用戶界面來方便應(yīng)用構(gòu)建者管理個(gè)人或者團(tuán)隊(duì)的知識庫,并能夠快速集成至 AI 應(yīng)用中。為了達(dá)到最好的RAG檢索效果,需要選擇正確的分段設(shè)置。
本文介紹如下內(nèi)容:
- RAG介紹
- 提升Dify RAG效果的關(guān)鍵:父子模式
- 通過Jina Reader抓取網(wǎng)頁信息
- 基于Dify構(gòu)建客服智能體
RAG介紹
RAG是什么?
RAG,全稱Retrieval-Augmented Generation,直譯為“檢索增強(qiáng)生成”。簡單來說,RAG = 知識檢索系統(tǒng) + 大語言模型(LLM)。
在問答過程中,RAG會(huì):
- 根據(jù)用戶問題,從知識庫(向量數(shù)據(jù)庫)檢索相關(guān)信息
- 把這些真實(shí)、可靠的資料作為上下文“喂”給大模型
- 由大模型根據(jù)這些檢索到的資料進(jìn)行加工、歸納、回答
為什么RAG重要?
減少幻覺
- 大模型有時(shí)會(huì)“胡編亂造”,尤其當(dāng)問題超出它訓(xùn)練范圍時(shí)。
- 通過RAG,大模型可以參考實(shí)時(shí)的、真實(shí)的資料,避免憑空想象。
解決時(shí)效問題
- 訓(xùn)練一次大模型耗資巨大,且更新頻率有限。
- RAG可以檢索最新的數(shù)據(jù)或文檔,讓舊模型回答新問題。
支持私有知識庫
企業(yè)可以用自己專屬的數(shù)據(jù)(產(chǎn)品手冊、內(nèi)部wiki、合同、報(bào)告等)做RAG,而無需重新訓(xùn)練大模型。
提升回答的可解釋性
RAG可以告訴用戶“答案來自哪篇文檔”,增強(qiáng)透明度和可信度。
RAG的技術(shù)組成
向量化(Embedding)
把文檔拆分成“知識塊”,用向量模型編碼成向量,并存儲(chǔ)到向量數(shù)據(jù)庫(如Weaviate、Milvus等)中。
相似度檢索
根據(jù)用戶問題,計(jì)算問題與文檔塊的相似度,從向量數(shù)據(jù)庫找出相關(guān)內(nèi)容。
上下文構(gòu)建
將檢索到的內(nèi)容拼接,作為“上下文”發(fā)送給大模型處理。
大模型生成
LLM根據(jù)上述“補(bǔ)充背景”給出更準(zhǔn)確、更專業(yè)、更可信的答案。
提升Dify RAG效果的關(guān)鍵:父子模式
提升RAG效果的關(guān)鍵是檢索出合適的上下文內(nèi)容
。在Dify導(dǎo)入數(shù)據(jù)到知識庫系統(tǒng)的流程中,有兩種文本分段方式:“通用模式”和“父子模式”
通用模式
系統(tǒng)依據(jù)用戶的自定義規(guī)則,將內(nèi)容拆分為獨(dú)立的分段。當(dāng)用戶輸入問題后,系統(tǒng)自動(dòng)提取問題的關(guān)鍵詞,并計(jì)算關(guān)鍵詞與知識庫中各分段的相關(guān)度。根據(jù)相關(guān)度排序,選取最相關(guān)的內(nèi)容分段并發(fā)送給 LLM,輔助其回答問題。
“通用模式”的分段最大長度
設(shè)置存在兩難:
- 分段長度過?。何谋疽?yàn)榉侄蔚脑蛉菀自斐缮舷挛膩G失。
- 分段長度過長:較長的文本分段,勢必會(huì)影響embedding的檢索精度。而且,受embedding模型的限制,每個(gè)分段的最大長度有限制(通常小于1萬tokens)。
父子模式
父子模式采用雙層分段結(jié)構(gòu)來平衡檢索的精確度和上下文信息,讓精準(zhǔn)匹配與全面的上下文信息二者兼得。
父區(qū)塊
父區(qū)塊保持較大的文本單位(如段落),提供豐富的上下文信息。
子區(qū)塊
子區(qū)塊是較小的文本單位(如句子),用于精確檢索。
檢索機(jī)制
通過子區(qū)塊進(jìn)行精確檢索以確保相關(guān)性,然后獲取對應(yīng)的父區(qū)塊來補(bǔ)充上下文信息,從而在生成響應(yīng)時(shí)既保證準(zhǔn)確性又能提供完整的背景信息。
通過Jina Reader抓取網(wǎng)頁信息
原始HTML充斥著標(biāo)記和腳本等無關(guān)元素,Jina Reader API通過從URL中提取核心內(nèi)容并將其轉(zhuǎn)換為干凈的、大模型友好的文本,從而確保為您的Agent和RAG系統(tǒng)提供高質(zhì)量的輸入。
Jina Reader讀取返回的結(jié)果是Markdown格式,需要了解抓取結(jié)果的格式,以便設(shè)置正確的分段標(biāo)識符
。
可以打開https://r.jina.ai/ + 頁面地址
查看Jina的輸出格式。例如Dify的安裝部署FAQ頁面https://r.jina.ai/https://docs.dify.ai/zh-hans/learn-more/faq/install-faq
的輸出如下圖, 分段標(biāo)識符設(shè)置為###
(三個(gè)#加一個(gè)空格),可以正確切分不同的問答內(nèi)容:
基于Dify構(gòu)建客服智能體
創(chuàng)建知識庫
新建知識庫
- 數(shù)據(jù)源選擇“同步自Web站點(diǎn)
- 工具選擇“Jina Reader"
- 頁面鏈接填:https://docs.dify.ai/zh-hans/learn-more/faq/install-faq此鏈接為dify的安裝部署FAQ
- 取消勾選“爬取子頁面”
- 點(diǎn)擊“運(yùn)行”
- 運(yùn)行出結(jié)果后,選擇“下一步”
- 分段設(shè)置:選擇父子分段模式
父塊設(shè)置:分段標(biāo)識符為###
(三個(gè)#加一個(gè)空格),分段最大長度設(shè)置為4000
子塊設(shè)置:分段標(biāo)識符為\n\n
,分段最大長度設(shè)置為512
注意:必須根據(jù)文檔內(nèi)容格式填寫正確的分段標(biāo)識符,否則RAG效果會(huì)大打折扣
- Embedding模型:選擇doubao模型
- 點(diǎn)擊“保存并處理”
修改知識庫名稱和描述
- ? 名稱:Dify FAQ
描述:包含Dify的FAQ問答內(nèi)容
創(chuàng)建Agent應(yīng)用
在http://localhost/apps頁面點(diǎn)擊“創(chuàng)建空白應(yīng)用”,選擇“Agent”。填寫應(yīng)用名,點(diǎn)擊創(chuàng)建,進(jìn)入編排界面。編排界面如下:
- 設(shè)置提示詞內(nèi)容為:
你是一個(gè)Dify客服,需調(diào)用工具使用知識庫的內(nèi)容回答問題。
要求:如果知識庫里沒有答案,回復(fù):沒找到相關(guān)答案
- 添加知識庫把"Dify FAQ"知識庫添加到應(yīng)用。
- 選擇模型使用doubao-1.5-pro-32k
- 調(diào)試和預(yù)覽在下方輸入提問內(nèi)容向Agent提問Dify相關(guān)的問題
- 測試通過后,點(diǎn)擊右上角的“發(fā)布”按鈕。
- 發(fā)布后,點(diǎn)擊“運(yùn)行”即可打開應(yīng)用的訪問鏈接。
總結(jié)
通過本文的介紹,相信大家對RAG機(jī)制有了更清晰的認(rèn)識,并了解了在Dify平臺中提升RAG效果的關(guān)鍵方法——父子模式的應(yīng)用。同時(shí),我們還學(xué)習(xí)了如何借助Jina Reader高效抓取網(wǎng)頁信息,為知識庫構(gòu)建提供優(yōu)質(zhì)數(shù)據(jù)支持。基于這些能力,開發(fā)者可以更輕松地在Dify中搭建具備良好檢索與生成能力的智能客服等AI應(yīng)用。