RAG 的盡頭是 Agent? 原創(chuàng)
1、大模型的痛點(diǎn)
大模型技術(shù)席卷全球,為日常工作和生活帶來(lái)便利,但也面臨時(shí)效性、準(zhǔn)確性等問(wèn)題。如何提升大模型的性能?解決其挑戰(zhàn)?構(gòu)建高級(jí)應(yīng)用?成為重要待解決問(wèn)題。
RAG(檢索增強(qiáng)生成) 技術(shù)通過(guò)信息檢索和文本生成,顯著提升了大模型的性能。但 RAG 也存在局限性,比如:數(shù)據(jù)依賴、檢索效率等。如何解決這些痛點(diǎn)?如何進(jìn)一步提升 RAG 性能?是本文剖析的重點(diǎn)。
2、RAG 的痛點(diǎn)
Naive RAG 通過(guò)檢索和生成,提升大模型在問(wèn)答、智能助手等任務(wù)上的性能。但 Naive RAG 難以處理復(fù)雜問(wèn)題或大型文檔集,舉例如下:
簡(jiǎn)單問(wèn)題:"特斯拉的主要風(fēng)險(xiǎn)因素是什么?" 和 "作者在 YC 期間做了什么?" 等問(wèn)題,Naive RAG 可以給出準(zhǔn)確答案。
復(fù)雜問(wèn)題:"總結(jié) XXX 公司年度報(bào)告"、"比較開發(fā)者 A 和 B 貢獻(xiàn)" 或 "分析滴滴公司風(fēng)險(xiǎn)" 等問(wèn)題,Naive RAG 可能無(wú)法提供滿意結(jié)果。
針對(duì)復(fù)雜問(wèn)題,我們需要探索更高級(jí) RAG 解決方案。
3、From RAG to Agent
Naive RAG(基于檢索的增強(qiáng)生成)應(yīng)用主要是在整合自身知識(shí)庫(kù)的基礎(chǔ)上,提升大型模型的性能,以產(chǎn)出更精準(zhǔn)、即時(shí)和豐富的行業(yè)內(nèi)容或定制化信息。然而,這種應(yīng)用仍限于內(nèi)容生成的領(lǐng)域。若要人工智能像一位“目標(biāo)導(dǎo)向”的高效工作者一樣,自主選擇多種工具,與不同系統(tǒng)互動(dòng)合作,直至完成最終任務(wù),那么我們就需要從 RAG 升級(jí)至 Agent 模式。
以下是 RAG 向 Agent 轉(zhuǎn)變的描述:
從 RAG 到 Agent 的演進(jìn),并非完全摒棄 RAG,而是在其基礎(chǔ)上拓展以下幾層功能:
- 多輪對(duì)話能力:與用戶進(jìn)行更深層次的交流,準(zhǔn)確把握用戶需求。
- 查詢/任務(wù)規(guī)劃層:理解和規(guī)劃復(fù)雜的查詢與任務(wù)流程。
- 外部工具接口:利用外部工具來(lái)完成特定任務(wù)。
- 反思機(jī)制:對(duì)執(zhí)行結(jié)果進(jìn)行反思、總結(jié)和評(píng)估。
- 記憶功能:記錄用戶交互歷史,以提供更加個(gè)性化的服務(wù)。
通過(guò)這些功能的增強(qiáng),Agent 不僅能應(yīng)對(duì)復(fù)雜任務(wù),還能在多變的環(huán)境中靈活應(yīng)對(duì)。與 RAG 相比,Agent更專注于完成特定任務(wù),并更注重與現(xiàn)有系統(tǒng)的融合。它不僅理解語(yǔ)言,還能在現(xiàn)實(shí)世界或數(shù)字系統(tǒng)中采取行動(dòng)。Agent 不僅能執(zhí)行復(fù)雜的多步驟任務(wù),比如;信息檢索、數(shù)據(jù)處理,還能無(wú)縫接入各種系統(tǒng)和 API 接口,訪問(wèn)用戶數(shù)據(jù),與數(shù)據(jù)庫(kù)互動(dòng)。
人類之所以獨(dú)特,很大程度上是因?yàn)槲覀儠?huì)使用工具。同樣,作為智能體的Agent 也能借助外部工具,處理更為復(fù)雜的任務(wù)。比如:Agent 能夠利用圖表生成工具制作在線圖表,使用天氣查詢工具獲取天氣信息。因此,Agent 是真正釋放大模型潛能的關(guān)鍵。
因此,我們的大模型應(yīng)用也將從 RAG 邁向 Agent,可以說(shuō),Agent 是 RAG 發(fā)展的必然歸宿。
4、案例剖析
最近,阿里巴巴千問(wèn)團(tuán)隊(duì)成功開發(fā)了一款新型 Agent(智能體),該智能體整合了 RAG 技術(shù),旨在解析包含數(shù)百萬(wàn)字詞的文檔。盡管它僅利用了 Qwen2 大模型的 8k 上下文窗口,但其性能表現(xiàn)卻超越了傳統(tǒng)的 RAG 模型和長(zhǎng)序列原生模型。
Agent 構(gòu)建流程如下:
該智能體的構(gòu)建涉及三個(gè)級(jí)別,每一級(jí)都是基于前一級(jí)的構(gòu)建:
級(jí)別一:檢索
這一級(jí)別關(guān)注的是如何識(shí)別并提取與關(guān)鍵詞最相關(guān)的文檔片段,主要分為以下三個(gè)步驟:
步驟1:區(qū)分指令信息與非指令信息
用戶輸入示例:“請(qǐng)用2000字的篇幅詳細(xì)說(shuō)明,我的問(wèn)題是,自行車是什么時(shí)候發(fā)明的?請(qǐng)用英文回答?!?/p>
信息分解:{“問(wèn)題內(nèi)容”: [“自行車是什么時(shí)候發(fā)明的”], “指令要求”: [“2000字詳細(xì)說(shuō)明”, “用英文回答”]}。
步驟2:多語(yǔ)言關(guān)鍵詞推導(dǎo)
輸入問(wèn)題:“自行車是什么時(shí)候發(fā)明的”
信息轉(zhuǎn)換:{“英文關(guān)鍵詞”: [“bicycles”, “invention”, “timing”], “中文關(guān)鍵詞”: [“自行車”, “發(fā)明”, “時(shí)間”]}。
步驟3:應(yīng)用 BM25 關(guān)鍵詞檢索算法
通過(guò) BM25 算法,對(duì)關(guān)鍵詞進(jìn)行高效的檢索,以定位相關(guān)文檔片段。
級(jí)別二:分塊閱讀
當(dāng)相關(guān)文檔片段與用戶查詢關(guān)鍵詞的重疊度不足,可能導(dǎo)致這些片段在檢索過(guò)程中被忽略,未能傳遞給大模型。為了解決這個(gè)問(wèn)題,我們采用了以下策略:
步驟1:相關(guān)性評(píng)估
使用聊天模型對(duì)每個(gè)512字節(jié)的文檔片段進(jìn)行評(píng)估,判斷其與用戶查詢的相關(guān)性。如果模型判斷為不相關(guān),則輸出“無(wú)”;若判斷為相關(guān),則輸出相關(guān)的句子。
步驟2:基于相關(guān)句子的檢索
從步驟1中提取出的相關(guān)句子,將它們作為搜索查詢?cè)~,利用BM25算法檢索出與用戶查詢最相關(guān)的文檔塊。
步驟3:生成答案
根據(jù)檢索到的上下文信息,生成最終的答案。
級(jí)別三:遞進(jìn)推理
面對(duì)多跳推理問(wèn)題,比如:用戶提問(wèn):“與貝多芬的第五交響曲創(chuàng)作于同一世紀(jì)的交通工具是什么?”大模型需要將問(wèn)題分解為多個(gè)子問(wèn)題來(lái)逐一解答:“貝多芬的第五交響曲是在哪個(gè)世紀(jì)創(chuàng)作的?”以及“自行車是在哪個(gè)世紀(jì)發(fā)明的?”
這一挑戰(zhàn)可以通過(guò)以下步驟,利用工具調(diào)用(又稱函數(shù)調(diào)用)智能體或 ReAct智能體來(lái)解決:
1. 向三級(jí)智能體(Lv3-Agent)提出原始問(wèn)題。
2. 當(dāng)三級(jí)智能體無(wú)法根據(jù)其現(xiàn)有記憶回答問(wèn)題時(shí),執(zhí)行以下步驟:
a. 三級(jí)智能體生成一個(gè)新的子問(wèn)題。
b. 三級(jí)智能體將這個(gè)子問(wèn)題提交給二級(jí)智能體(Lv2-Agent)。
c. 將二級(jí)智能體的回答整合到三級(jí)智能體的記憶庫(kù)中。
3. 重復(fù)上述過(guò)程,直到三級(jí)智能體能夠回答原始問(wèn)題。
4. 最終,三級(jí)智能體提供原始問(wèn)題的解答。
參考:https://mp.weixin.qq.com/s/nwPaNEJzY55GQmhe8Bgakw
本文轉(zhuǎn)載自公眾號(hào)玄姐聊AGI 作者:玄姐
原文鏈接:??https://mp.weixin.qq.com/s/ooRVobsyt9slhhbIpWltYg??
