在長窗口時代,RAG技術是否仍然必要?

自從谷歌推出 Gemini 1.5 Pro,行業內部對于 RAG 的討論就不絕于耳。

Gemini 1.5 Pro 的性能確實令人矚目。根據谷歌公布的技術文檔,該系統能夠穩定處理長達 100 token 的內容,相當于一小時的視頻、十一小時的音頻、超過三萬行的代碼或七十萬個文字。其處理能力上限更是達到驚人的 1000 萬 token,相當于《指環王》三部曲的長度,刷新了上下文窗口長度的記錄。

憑借超長上下文理解能力,Gemini 1.5 Pro 得到了很多用戶的認可。很多測試過 Gemini 1.5 Pro 的人更是直言,這個模型被低估了。有人嘗試將從 Github 上下載的整個代碼庫連同 issue 都扔給 Gemini 1.5 Pro,結果它不僅理解了整個代碼庫,還識別出了最緊急的 issue 并修復了問題。

當然,除了谷歌在卷 “上下文長度”,其他大模型公司也都在卷這個能力。去年下半年,GPT-3.5 上下文輸入長度從 4 千增長至 1.6 萬 token,GPT-4 從 8 千增長至 3.2 萬 token;OpenAI 最強競爭對手 Anthropic 一次性將上下文長度打到了 10 萬 token;LongLLaMA 將上下文的長度擴展到 25.6 萬 token,甚至更多。

在國內,剛剛完成 8 億美元融資的 AI 大模型公司月之暗面,也把 “長文本(Long Context)” 當前主打的技術之一。去年 10 月,當時月之暗面發布了首個模型 Moonshot 和 Kimi 智能助手,支持 20 萬字的輸入。

那么,上下文到底意味著什么,為什么大家都在卷這個能力?

01 上下文長度,大模型好用的關鍵

上下文技術,是指模型在生成文本、回答問題或執行其他任務時,能夠考慮并參照的前置文本的數量或范圍,是一種大模型信息量處理能力的評價維度。用通俗的話來說,如果參數規模大小比喻成模型的計算能力,那么上下文長度更像是模型的 “內存”,決定了模型每輪對話能處理多少上下文信息,直接影響著 AI 應用的體驗好壞。

比如,隨著上下文窗口長度的增加,可以提供更豐富的語義信息,有助于減少 LLM 的出錯率和「幻覺」發生的可能性,用戶使用時,體驗能提升不少。

在業內人士看來,上下文長度增加對模型能力提升意義巨大。用 OpenAI 開發者關系主管 Logan Kilpatrick 話說,“上下文就是一切,是唯一重要的事”,提供足夠的上下文信息是獲得有意義回答的關鍵。

02 這跟 RAG 有啥關系?

RAG,中文翻譯過來就是檢索增強生成,所做的事情并不復雜,就是通過檢索獲取與用戶輸入相關的知識并在上下文中提供給大模型,為大模型提供更多更有效的信息,增強生成內容的質量。

具體來說,在語言模型生成答案前,RAG 先從廣泛的文檔數據庫中檢索相關信息,然后利用這些信息來引導生成過程,極大地提升了內容的準確性和相關性。

舉個例子,作為一名員工,你可以直接問大模型 “我們公司對遲到有什么懲罰措施?”,在沒有讀過《員工手冊》的情況下,大模型沒有辦法回答。但是,借助 RAG 方法,我們可以先讓一個檢索模型到《員工手冊》里去尋找最相關的幾個答案,然后把你的問題和它找到的相關答案都送到生成模型中,讓大模型生成答案。這就解決了之前很多大模型上下文窗口不夠大(比如容不下《員工手冊》)的問題。

不過嘛,現在情況不一樣了。如果一個模型可以直接處理 1000 萬 token 的上下文信息,還有必要再通過額外的檢索步驟來尋找和整合相關信息嗎?用戶可以直接將他們需要的所有數據作為上下文放入模型中,然后像往常一樣與模型進行交互。「大型語言模型本身已經是一個非常強大的檢索器,為什么還要費力建立一個弱小的檢索器,并在分塊、嵌入、索引等方面耗費大量工程精力呢?」愛丁堡大學博士生符堯評論道。

那么,RAG 技術是否已經過時了?它是會被長文本徹底取代,還是維持配角現狀,還是跟大模型共同進化?

為此,我們采訪了 PingCAP AI Lab 的數據科學家孫逸神,以下為他的看法 ——

03 上下文窗口與 RAG 共存共贏

我認為,在假定 LLM 有足夠的閱讀理解能力的前提下,RAG 的本質就是在上下文窗口的約束下,提高 Prompt 的有效信息密度,從而提高生成質量的有力手段。而這兩者,是毫無沖突的。

是的,我認為上下文跟 RAG 并不矛盾。GPT-4o 的回答,基本上表達了我的觀點:

Q:?LLM 的 context window 和 RAG 有什么關系嗎?

A:?LLM(大型語言模型)的 context window 和 RAG(Retrieval-Augmented Generation)是兩個相關但不同的概念。它們在信息處理和生成方面有著不同的作用和機制。

首先來看看他們各自的應用場景和具體作用:

Context Window,指大型語言模型在一次生成或處理過程中能夠看到和使用的文本長度。注意,它是有長度限制的。例如,GPT-4 的 context window 可能是 8,000 或 32,000 個 token(具體長度取決于模型的版本)。

在這個窗口內,模型可以使用上下文信息來理解和生成文本。如果超出上下文窗口限制,模型就無法利用所有相關信息,可能會導致直接報錯退出。

所以,context window 是任何任務的約束條件,即大模型單次最多能讀的內容量,模型在處理當前任務時依賴于它能看到的上下文。

Retrieval-Augmented Generation,一種結合檢索和生成的技術,旨在提高生成文本的質量和信息性。

圖源:https://github.com/hymie122/RAG-Survey

在檢索階段,RAG 系統首先從一個大規模的知識庫或文檔數據庫中檢索出與查詢相關的信息。這通常使用信息檢索技術,例如 BM25、TF-IDF 或基于深度學習的檢索模型(如 Dense Passage Retrieval, DPR);當然,也可以是向量檢索,總而言之,檢索并不限定某一種特定方法,甚至可以多種方法進行組合。

在生成階段,RAG 系統會把檢索到的相關文檔或信息作為上下文的一部分提供給生成模型,生成模型使用這些上下文來生成更準確和相關的回答。另外,通過使用檢索到的外部信息,RAG 能生成更具信息性的回答,特別是在模型本身知識庫不足或需要實時信息時。這就是結合上下文生成和增強生成。

那它們倆之間有啥關系?

  1. 增加有效信息輸入:

    ??RAG 技術可以在上下文窗口以內,增加有效消息量。LLM 的 context window 有限,但通過檢索相關文檔并將其作為上下文傳遞給生成模型,可以在不直接增加模型 context window 的情況下提供更多的相關信息。

  2. 提高準確性:

    ??當需要生成具體領域或最新的信息時,RAG 的檢索機制可以提供精確的上下文,幫助 LLM 生成更準確的回答。這樣可以彌補模型訓練時的數據不足或過時的問題。

所以,LLM 的 context window 和 RAG 在生成文本時都有重要作用,但它們通過不同的方式來增強文本生成的質量和連貫性。context window 提供了模型在單次處理中的上下文范圍,而 RAG 通過檢索相關信息提高了上下文的信息質量,使得模型可以生成更為信息豐富和準確的內容。

04 未來,RAG 也不會被取代

我認為,與其聚焦于現下討論它們之間的優劣勢,不妨以發展的眼光來看 LLM 和 RAG 的關系。

從 OpenAI 推出 ChatGPT 開始,人們體驗到了碾壓以往同類 “智障聊天機器人” 的 AI 產品。ChatGPT 引爆全球以后,大家發現了它巨大潛力的同時,也同樣發現了它很多的能力缺陷,其中首當其沖的就是幻覺。另外,上下文有限也限制了應用的想象力。

如何減輕幻覺?一種方式是重新訓練基礎模型,用更多更高質量的語料,費人費時費能費錢。于是人們又使用了微調的方法,用相對少的訓練量,修改部分深度網絡的參數,來達到質量提升的效果。它的性價比已經是小團隊或個人開發者可以接受的狀態了。

但為什么還會繼續發展到 RAG 呢?其中一方面原因是微調依然需要對語料的質量有要求,雖說微調本身不花太長時間,但是語料的收集和前處理是需要一定時間的;另一方面還有一個原因是,無論是訓練還是微調,大方向上看是總體提升的,但是期待沒有一個點變弱也是不太可控的,它可以定向地學習好的,但是難以定向地遺忘不好的,所以是存在變差的可能性的。

于是,RAG 也很自然地成為大家提高輸出質量的一個研究方向。RAG 能起到作用,本身隱含了一個前提條件,就是 LLM 在上下文窗口內存在較強的 “閱讀理解” 能力。雖說我依然不認為 LLM 有 “邏輯” 能力(為什么 LLM 看起來是有 “邏輯” 的,因為 “邏輯” 的最大載體是語言,如果 LLM 輸入 “學習” 的是大量蘊含正確邏輯的文本,那它作為一個類似馬爾科夫決策過程,它的生成也會傾向于有 “邏輯” 的輸出,但這不等于理解 “邏輯” 并能自如地運用 “邏輯”),但它確實在絕大多數情況下表現出了優秀的 “閱讀理解” 能力以及續寫和回答問題的能力。

既然這個前提在廣泛的實踐上被證實大體有效,那人們可以很自然地想到一個降低 LLM 幻覺,改善 LLM 輸出質量的方法。第一,更充分地利用上下文窗口的長度。這和人類間的交互是類似的,就像提問的智慧一樣,給予更多的信息,通常對于生成的內容是有幫助的。如果輸入內容的有效信息密度提高,同樣也是有益的。這一點很容易直觀地理解。

那接下來,如何提高上下文窗口限制內的有效信息密度,第一種方式就是人工提供。就是一開始大家鉆研玩花的 Prompt 魔法。

但每次手工輸入在工程上是沒法 Scale 的,所以上述方式更多是對直接使用 Chat 的終端用戶有價值,對于要包裝 LLM 為用戶提供更好服務的中間商是不太可行的,于是 RAG 自然就出現了。如果你把它理解成搜索引擎,就是在上下文窗口長度限制內,增加更多與用戶輸入 “相關” 的內容。提供的內容越多,通常 LLM 自由發揮天馬行空的概率就會降低,這也是很樸素的一個結論。RAG 就是一個盡可能提高有效信息密度的工程實現手段。

到這里,其實主要的觀點 —— 上下文窗口與 RAG 沒有任何矛盾的結論已經可以支撐住了。

進一步補充說明的話,RAG 整個系統的目的還是 Generation,Retrieval 是一種提高質量 (Augmented) 的手段,上下文窗口是 Generation 子系統的一個參數或者說約束,Retrieval 是在這個約束內工作的,屬于是帶著鐐銬跳舞的狀態。窗口小就少 Retrieving 一些東西回來,窗口大就多 Retrieving 一些東西回來,就是這么一個樸素的邏輯。

而上下文的拓展本身,與需要表達的觀點無關,需要關注的是,趨勢上來看,上下文越長,LLM 的能力會相應變弱,這是符合直覺的,人類也有同樣的問題。第二是上下文拓展的方法,這個在 LLAMA 上研究得已經很多了。開發 LLM 的人目標一定是更長的上下文且不斷提高在此前提下的輸出質量。

另外要補充說明的一個角度是,LLM 在不斷地進步,很多早期通過包裝 LLM 來為用戶提供價值的中間商被上游新一代的 LLM 直接降維打擊出局,所以圍繞 LLM 做開發的人都不免要擔心自己在做的事情,會不會被下一代 LLM 干掉,這是一個很現實的問題。我的觀點是 RAG 不會,Agent 也不太會?(此處不展開)。RAG 能夠長期立足的原因在于,訓練和微調之間是有時間差的,這個時間差會變小,但長期來看,不會變為 0,在這個時間差以內的信息,只能通過 RAG 的方式注入。同樣的,私域知識也只可能通過 RAG 的方式注入。時效性需求和私有性需求決定了 RAG 會一直存在,大家要做的只是進一步提高 RAG 的搜索質量,讓 LLM 可以更好地為用戶所愛。

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

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

相關文章

【VTKExamples::Utilities】第十七期 ZBuffer

很高興在雪易的CSDN遇見你 VTK技術愛好者 QQ:870202403 公眾號:VTK忠粉 前言 本文分享VTK樣例ZBuffer,并解析接口vtkWindowToImageFilter,希望對各位小伙伴有所幫助! 感謝各位小伙伴的點贊+關注,小易會繼續努力分享,一起進步! 你的點贊就是我的動力(^U^)ノ…

24 _ 分層和合成機制:為什么CSS動畫比JavaScript高效?

在上一篇文章中我們分析了CSS和JavaScript是如何影響到DOM樹生成的,今天我們繼續沿著渲染流水線向下分析,來聊聊DOM樹之后所發生的事情。 在前面《05 | 渲染流程(上):HTML、CSS和JavaScript文件,是如何變成…

linux下can-utils的使用以及can接口的配置(以ubuntu20.04為例)

linux下can-utils的使用以及can接口的配置(以ubuntu20.04為例) can-utils是什么 can-utils 是一套用于Linux操作系統的開源工具,專門用來處理與CAN(Controller Area Network)總線相關的任務。CAN總線廣泛應用于汽車和…

C語言文件操作:打開關閉,讀寫

程序文件 源程序文件(后綴為.c) 目標文件(Windows環境后綴為.obj) 可執行文件(Windows環境后綴為.exe) fputc FILE* pf fopen("test.txt","w");if (pf NULL){printf("%s\n"…

深入理解Qt計算器應用的構建過程

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、數字按鈕的信號與槽函數連接 二、運算符按鈕的信號與槽函數連接 三、特殊按鈕的信號與…

紅外超聲波雷達測距(water)

文章目錄 一 RS-232二 RS485三 Modbus四 stm32多路超聲波測距4.1 設計方案4.2 代碼 參考資料總結 實驗要求 一. 采用stm32F103和HC-SR04超聲波模塊, 使用標準庫或HAL庫 定時器中斷,完成1或2路的超聲波障礙物測距功能。 1)測試數據包含噪聲&am…

Bezier Python 用法:深入探索與實用指南

Bezier Python 用法:深入探索與實用指南 在數字圖形學和計算機編程中,貝塞爾曲線(Bezier Curves)是一種重要的參數曲線,被廣泛應用于二維圖形應用程序中,如字體輪廓、矢量圖形和動畫等。Python作為一種功能…

EukRep:區分真核和原核序列

https://github.com/patrickwest/EukRep 安裝 conda create -y -n eukrep-env -c bioconda scikit-learn0.19.2 eukrep mamba install -c conda-forge numpy1.19.5 使用 EukRep -i <Sequences in Fasta format> -o <Eukaryote sequence output fasta file>

【Linux】線程ID

大致草稿—————————— 思維導圖 學習目標 一、線程ID的理解 1.1 引出對tid的理解 我們先來創建一個線程復習一下線程的函數&#xff1a; pthread_t tid; // 創建一個線程 pthread_create(&tid, nullptr, threadrun, (void*)"thread-1"); // 打印出…

二分查找學習:優雅的二分查找——“Leetcode 35. 搜索插入位置”

例題 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法。 示例 1: 輸入: nums [1,3,5,6], target 5 輸出: 2 示例 2…

怎么花草識別?方法有三種!

怎么花草識別&#xff1f;在這個五彩斑斕的世界里&#xff0c;花草是我們生活中不可或缺的一部分。它們點綴著我們的環境&#xff0c;為我們帶來無盡的美麗與驚喜。然而&#xff0c;面對眾多的花草種類&#xff0c;你是否曾感到困惑和迷茫&#xff0c;不知道如何識別它們&#…

VIO System 丨適用于控制器開發前期的測試系統

VIO綜述 嵌入式軟件的HIL測試需要復雜的測試系統及完整的ECU硬件&#xff0c;這導致通常只能在開發流程的后期階段進行測試。全新推出的低成本解決方案VIO System&#xff0c;使得在開發前期不僅可以進行總線通訊測試&#xff0c;也可以同時進行I/O信號測試。 該系統旨在通過…

用 Vim 打造舒適高效的編程體驗

作為程序員,Vim 無疑是最常使用的編輯器之一。它之所以如此受歡迎,得益于其強大的功能和高度可定制的特性。今天,讓我帶大家一起探索如何通過簡單的 .vimrc 配置,打造一個個性化的 Vim 編程環境。 啟用語法高亮 我們首先要確保 Vim 能夠正確地識別和高亮代碼語法。只需在 .vi…

LabVIEW版本控制

LabVIEW作為一種流行的圖形化編程環境&#xff0c;在軟件開發中廣泛應用。有效地管理版本控制對于確保軟件的可靠性和可維護性至關重要。LabVIEW提供了多種方式來管理VI和應用程序的修訂歷史&#xff0c;以滿足不同規模和復雜度的項目需求。 LabVIEW中的VI修訂歷史 LabVIEW內置…

docker安裝Mysql5.7版本

首先Linux系統已經安裝好了docker應用。 1.搜索鏡像 docker search mysql 2.拉取5.7的鏡像 總之,選starts最多的那個就對了。 docker pull mysql:5.7 ~ docker pull mysql:5.7 5.7: Pulling from library/mysql fc7181108d40: Downloading [============> …

mysql創建數據表----centos7.9

mysql創建數據表 查看存在的表 show tables;我這里還未創建任何表所以是這樣的 如有是這樣 若沒有表需要先創建一個表 CREATE DATABASE tb_your_name&#xff1b;創建字段及屬性 CREATE TABLE tb_laws_regulations (id INT AUTO_INCREMENT PRIMARY KEY, -- 文件唯…

柯橋外貿俄語哪里可以學,零基礎俄語培訓

Де?лать 做 из му?хи 從蒼蠅 слона? 大象 我覺得漢語里有一個很合適的詞來形容&#xff1a; Де?лать из му?хи слона? 就是 小題大做&#xff0c;本來是一件很小的事&#xff0c;卻把它形容成天大的事一樣 Хвтит де?…

【UE5.1 角色練習】10-物體抬升、拋出技能 - part2

目錄 前言 效果 步驟 一、讓物體緩慢的飛向手掌 二、向著鼠標方向發射物體 前言 在上一篇&#xff08;【UE5.1 角色練習】08-物體抬升、拋出技能 - part1&#xff09;的基礎上繼續完成角色將物體吸向手掌&#xff0c;然后通過鼠標點擊的方向來發射物體的功能。 效果 步驟…

c#實現BPM系統網絡傳輸接口,http協議,post

BPM通過http協議實現網絡傳輸&#xff0c;語言使用.net(c#)&#xff0c;在這里只提供一個接口&#xff0c;具體代碼如下,請參照&#xff1a; public string MakeRequest(string parameters) { ServicePointManager.ServerCertificateValidationCallback new Syst…

代碼隨想錄算法訓練營第三十二 | ● 122.買賣股票的最佳時機II ● 55. 跳躍游戲 ● 45.跳躍游戲II

122.買賣股票的最佳時機II 講解鏈接&#xff1a;https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.html 簡單思路&#xff1a;逐個計算連續兩天的股票差值&#xff0c;sum初始為零&…