AI大模型企業應用實戰(18)-“消滅”LLM幻覺的利器 - RAG介紹

来源:https://www.cnblogs.com/JavaEdge/p/18264346
-Advertisement-
Play Games

大模型在一定程度上去改變了我們生活生工作的思考的方式,然後也越來越多的個人還有企業在思考如何將大模型去應用到更加實際的呃生產生活中去,希望大語言模型能夠呃有一些更多企業級別生產落地的實踐,然後去幫助我們解決一些業務上的問題。目前 1 LLM的問題 1.1 幻覺 LLM因為是一個預訓練模型,它已有一些 ...


大模型在一定程度上去改變了我們生活生工作的思考的方式,然後也越來越多的個人還有企業在思考如何將大模型去應用到更加實際的呃生產生活中去,希望大語言模型能夠呃有一些更多企業級別生產落地的實踐,然後去幫助我們解決一些業務上的問題。目前

1 LLM的問題

1.1 幻覺

LLM因為是一個預訓練模型,它已有一些知識儲備,我們提的問題跟他的知識儲備不相符時,會產生一些幻覺問題,看上去正確的回答

1.2 新鮮度

LLM預訓練出來之後,不能感知到我們實時更新的工業數據,還有企業內部的一些私域數據

1.3 數據安全

LLM訓練依賴很多訓練數據集,然後為了保證大語言模型的效果更好,訓練集的質量以及數據量越多對於大語言模型的一個訓練。最終的一個效果會更好,但我們又期望LLM想要去幫我們解決一些垂類的問題,然後又是希望在數據安全這兒會有一些防範,就比如說像企業的一些內部的敏感數據以及敏感文檔是一定不能夠暴露出去,讓公有的大語言模型去進行訓練。

2 RAG是啥?

為解決單元模型剛剛提到問題,提出RAG,將企業內部私域數據以及實時更新的一些公域數據,通過一些處理之後,變成可進行相似性搜索的向量數據,然後存儲到向量資料庫。

在我們跟大約模型交互時,用戶提問。首先在我們的相同資料庫中去進行相似性檢索,檢索出與這個提問相關的知識內容,然後檢索後交給LLM,連同用戶的提問一起讓 LLM 去生成回覆。

RAG幫助我們個人及用戶去把企業內部的一些知識數據,很快構建出一個龐大知識庫,然後結合目前已有LLM能力,可快速製作智能問答機器人應用。

為LLM提供來自外部知識源的額外信息的概念。這允許它們生成更準確和有上下文的答案,同時減少幻覺

  • 檢索:外部相似搜索
  • 增強:提示詞更新
  • 生成:更詳細的提示詞輸入LLM

2 rag應用咋構建的?

使用到RAG的這條鏈路之後,用戶會先去構建好的知識庫,也就是我們向量資料庫裡面去進行相似性檢索,然後帶出一部分的知識知識文檔。這部分知識文檔會跟用戶的query結合。

然後我們通過prompt 技術組裝成一個最終完成的一個輸入給到LLM。然後讓LLM生成回覆。

最關鍵一點就是知識庫生成這一步,因為主要涉及把我們的知識文檔去做內容的提取及拆分。還要進行量化,存入資料庫。

2.1 RAG步驟

  1. 知識切片成Chunk

  2. 向量化Chunk入庫

    前兩步都是去知識庫生成。

  3. Query檢索知識Chunk

  4. 構建Prompts

  5. 調用LLM生成回答

    後三步都是知識庫生成後,在檢索方面需要做的。

2.2基於開源框架構建 RAG 應用

像LangChain快速構建一個RAG應用。Langchain中RAG的實現:

各種文檔 - 各種 loader - 文本切片 - 嵌入向量化 - 向量存儲 - 各種檢索鏈。

思想就是把那五個步驟拆成不同組件,然後由每個不同節點做相應處理。讓用戶去編寫自己的業務邏輯的代碼,然後去把這整個過程串起來。

優點和痛點都非常明顯。

優勢主要是:

  • 可以快速構建一個demo起來,幫助我們的開發者去理解RAG應用
  • 龐大的一個社區支持,如一些插件或它的一個版本更新迭代都會非常快

痛點也明顯:通過開源框架構建出來的一個RAG應用,其實本質上它的通用性是非常強。為保證強通用性,它在效果層面不一定做到最好,就需要企業或個人投入比較大精力,較多研究去把這一個整體的RAG在召回層面的一個效果給提升到最佳。

3 bad case

介紹一下在整體構建整個RAG應用過程中會遇到的一些問題和解決方案。

3.1 第一個

用戶提問:請問A產品分析報告多久分析一次?

然後我們召回的相關知識是:A產品的分析報告信息近30天的數據分析結果。

原因是我們用戶的問題,在相關知識中沒有明確提到,只是有一定相似度。但跟我們用戶問題不直接相關。這樣的相關知識以及用戶的問題。組裝之後交給LLM回答,本質上是人為搞干擾。

對此,有一個工程化實踐叫拒答。

3.2 第二個

提問的A課程適合多大年齡小孩。

知識庫里會召回來兩條數據,然後其中一條數據是我們期望的一個知識。就在A課程文檔。會有一段話跟提問相關,但還會召回其他的一個干擾知識。如其他文檔里一些內容,像該課程適合3到7歲的小孩,適合6到8歲的女孩。這種知識內容也會被召回。

主要是期望的召回內容攜帶一部分干擾信息,這干擾信息沒有A課程這個關鍵字,然後也不會召回回來。在這兩個知識內容交給大源模型處理,他也無法理解哪個字內容是正確。

我們更希望在召回層面,就能有較好手段處理。工程化的實踐裡面,會對用戶的進行改寫,去增強query的一個效果。

然後也用到類似BM25這種倒排索引,提升關鍵字的權重。比如干擾知識里沒生成這一個關鍵字,那它的相似度分數較低,就召不回來。

3.3 最後一個

可能有用戶的提問是類似:伺服器連接不上,應當如何解決?

現在給知識庫裡面註入的文檔,都是類似連接伺服器應該有哪些步驟。

  • 第一個問題其實將這些知識內容召回,然後交給LLM也能引導用戶。但並不能去直切要害,用戶更希望,我現在連接不上了,我有什麼樣的一個排查手段。更好的還是通過提供一些專門QA文檔,去增強整個知識召回內容準確性
  • 第二個問題,用戶可能會問一些跟他實例相關的問題。如CPU占用變高或記憶體變高,然後實際響應可能是我們支持文檔裡面的一些處理方案,就是我現在記憶體變更咋處理。但用戶想知道為啥變高。有一個意圖識別模型,判斷我們現在用戶他想要的問題具體是一個什麼類的,需不需要用到RG,也是會去判斷他是不是需要用到診斷引擎。類似問題2,需要用到診斷引擎的那我們會調用其他RCG無關的診斷相關技術為用戶排查問題,並且給用戶反饋一個結果。

4 如何提升RAG應用的效果

整體效果 = 文檔處理效果 * Embedding效果 * Retrieval效果 * LLM效果。

demo易,但上手難的主要原因是因為像LangChain和 LLamIndex這種框架盛行。很快接入就是初級的一個狀態,可能只能做到35%。如提高整體一個準確率,可通過在拆分那兒會拆更合理、提取內容時,把整個內容提取更好。做向量化時,去選擇我們的向量,更好的一個embedding模型。在最終我們去跟LLM交流時,選擇效果更好的LLM,然後把這個效果給提升到更高。但實際上60%的一個準確率還是達不到我們生產環境落地的一個期望值。希望準確率90%,在RAG應用構建的各個階段,我們都會有很多工程化的一些手段實現。

可優化的效果的方式比較多,然後在整個課程裡面我們也會去挑選一些核心關鍵的及怎麼去把這個效果給做的更高。

目前RAG整體應用在界內的比較關註的一個地方就是在召回。因為涉及知識文檔,思考方向:

  • 優先保護保證這個召回率
  • 優先保證這個精度

RAG召回回來是希望獲得更多的跟用戶提問相關的知識內容,還是說我只需要更關鍵的知識內容排在最頂。騰訊相關資料庫的AI套件是選擇前面這路,期望是召回回來更多跟用戶相關的提問的內容。

精度儘量保證召回內容在top3、top5位置出現,因為召回的一些內容確實會有一部分干擾信息。但目前LLM 能力還可以,對這種干擾性信息的一個排除能力較好。

5 總結

關註我,緊跟本系列專欄文章,咱們下篇再續!

作者簡介:魔都架構師,多家大廠後端一線研發經驗,在分散式系統設計、數據平臺架構和AI應用開發等領域都有豐富實踐經驗。

各大技術社區頭部專家博主。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。

負責:

  • 中央/分銷預訂系統性能優化
  • 活動&券等營銷中台建設
  • 交易平臺及數據中台等架構和開發設計
  • 車聯網核心平臺-物聯網連接平臺、大數據平臺架構設計及優化
  • LLM應用開發

目前主攻降低軟體複雜性設計、構建高可用系統方向。

參考:

本文由博客一文多發平臺 OpenWrite 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 壓縮 PDF 文件能有效減小文件大小並提高文件傳輸的效率,同時還能節省電腦存儲空間。除了使用一些專業工具對PDF文件進行壓縮,我們還可以通過 Python 來執行該操作,實現自動化、批量處理PDF文件。 本文將分享一個簡單有效的使用 Python 壓縮 PDF 文件的方法。需要用到 Spire.P ...
  • 本文摘要:本文首先對I2C協議的通信模式和AT24C16-EEPROM晶元時序控制進行分析和理解,設計了一個i2c通信方案。人為按下寫操作按鍵後,FPGA(Altera EP4CE10)對EEPROM指定地址寫入位元組數據,並接後按下讀操作按鍵,讀取該地址上的一個位元組數據在數位管低兩位顯示出來。其中包 ...
  • 刷機 溫馨提示:如果你不知道root的意義在哪,建議不要解鎖和root,到時候救磚或者回鎖都挺麻煩。 刷全量包 最新版的系統沒有更新推送,所以去一加社區[0]找了個全量包來刷,。安裝方式可以看帖子里的內容,說的比較詳細,這裡截圖一部分: 解鎖bootloader 在系統與更新-》開發者選項 里勾選O ...
  • 多線程在訪問同一個共用變數時很可能會出現併發問題,特別是在多線程對共用變數進入寫入時,那麼除了加鎖還有其他方法避免併發問題嗎?本文將詳細講解 ThreadLocal 的使用及其源碼。 ...
  • 根據不同場景使用不同方案進行實現尤為必要。通常開發過程中,文件較小,直接將文件轉化為位元組流上傳到伺服器,但是文件較大時,用普通的方法上傳,顯然效果不是很好,當文件上傳一半中斷再次上傳時,發現需要重新開始,這種體驗不是很爽,下麵介紹幾種好一點兒的上傳方式。 這裡講講如何在Spring bo... ...
  • Stirling-PDF —— 一個基於 Web 的 PDF 操作工具,支持對 PDF 文件進行各種操作,包括分割、合併、轉換、重組、添加圖像、旋轉、壓縮等。 ...
  • 1 開源解析和拆分文檔 第三方工具去對文件解析拆分,將文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 1.1 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 與 ...
  • 正文 21 日正是周五,夏至。全年當中,白天時長最長的一天。而恰好那天也是銀行扣息的日子。所以很忙,我差點沒能走掉。 所幸最終還是有驚無險。 到斯的家裡,是晚上 9 點鐘。比我想得要早。這個周周四,他過生日。但是那天因為上班,所以移到了周末。不是法定節假日,很普通的一個周末。全年有很多個這樣的周末。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...