RAG實踐篇(二):這些年,我們在測試中踩過的坑

0 評論 2125 瀏覽 5 收藏 11 分鐘

RAG目前在企業(yè)級應(yīng)用中是最優(yōu)解,但實踐中的坑點不少,今天分享我們在測試環(huán)節(jié)踩過的坑。

在大模型的企業(yè)級應(yīng)用中,RAG應(yīng)該是目前的最優(yōu)解。不過,由于它和傳統(tǒng)的軟件開發(fā)項目存在很大的不同,實際落地時經(jīng)常會存在意想不到的坑點和難點。有次和同樣在探索RAG應(yīng)用的朋友交流,大家都不約而同地發(fā)出“一周出demo,半年不好用”的吐槽。

這個實踐系列就是我們在探索和吐槽中的產(chǎn)物。今天這篇,我們想專門聊聊在項目測試中踩過的坑,希望對同樣在RAG摸爬滾打的伙伴有幫助。(上一篇:RAG實踐篇(一):知識資產(chǎn)的“梯度”

為什么從“測試”開始說?

  • 和傳統(tǒng)開發(fā)差異大:大語言模型的開發(fā)過程與傳統(tǒng)應(yīng)用軟件存在顯著差異,主要體現(xiàn)在其黑盒子特性和輸出的不可控性。在傳統(tǒng)應(yīng)用軟件中,產(chǎn)品經(jīng)理可以明確地定義產(chǎn)品功能,輸入/輸出通常是確定的,通過驗收標(biāo)準(zhǔn)很容易和開發(fā)、測試達成共識。然而,在AI產(chǎn)品的開發(fā)中,由于大語言模型所以無法完全預(yù)測在特定輸入下的行為,輸出也有著高度不確定性,這樣如何找到有代表性的測試集也很有難度。
  • 優(yōu)化成本小,但有收益:大語言模型是一個不斷自我學(xué)習(xí)和優(yōu)化的過程。給到足夠擬真的測試環(huán)境,并在測試后給到及時反饋,也是提升其表現(xiàn)性能的方式之一。而且相對成本較小。

一、RAG測試三大坑

在給企業(yè)做RAG落地應(yīng)用的時候,我們發(fā)現(xiàn)很多企業(yè)需求從“知識問答”類的功能開始,比如公司規(guī)章制度/管理要求/文化建議等輸入,或者基于某個專業(yè)領(lǐng)域的知識庫進行私有化。由于泛用性廣,也便于理解,我們就以“知識問答”為例來說明。

第一坑:如何做到測試集的覆蓋度?

無論是RAG項目還是其他LLM的項目開發(fā),最理想的測試集就是來自用戶的真實數(shù)據(jù)。但實際中我們發(fā)現(xiàn),很多企業(yè)其實并不具備這個條件,需要開發(fā)團隊或者甲方自行“生產(chǎn)”測試集。無論由誰來準(zhǔn)備,覆蓋度原則是一個關(guān)鍵點。它指的是在測試集中應(yīng)包含廣泛的細(xì)分主題,以確保模型能夠應(yīng)對不同領(lǐng)域的查詢,這樣才有助于比較有效地評估RAG整體表現(xiàn)。以知識問答為例,通常會要求測試集盡量覆蓋這個知識領(lǐng)域中所有子領(lǐng)域的代表性問題。其中,有兩個點值得注意:

要意識到“知識”和“用戶問題”之間的差距

在起初沒經(jīng)驗的時候,我們往往就會直接按照知識庫所代表這個專業(yè)知識領(lǐng)域的子分類進行細(xì)分。以產(chǎn)品經(jīng)理的能力知識為例,我們曾依據(jù)“商業(yè)洞察”、“溝通與領(lǐng)導(dǎo)能力”、“需求分析能力”等進行測試集,結(jié)果上線后發(fā)現(xiàn),用戶真實挑戰(zhàn),不太可能像知識庫那樣分門別類,井井有條。甚至有些回答會需要橫跨兩個或多個子領(lǐng)域才能回答。

于是我們才意識到,很多領(lǐng)域的知識是一種經(jīng)過經(jīng)驗提煉和梳理后的結(jié)構(gòu)化產(chǎn)物,它能高效地將知識進行聚類和管理,但已經(jīng)不是用戶挑戰(zhàn)的“原始狀態(tài)”。

因此,覆蓋度的第一個注意要點:請根據(jù)目標(biāo)用戶的真實情境來進行測試集的分類,而不是知識庫本身分類。否則,可能與真實情況相去甚遠(yuǎn)。

不要忽略“形式”的覆蓋度。

有些產(chǎn)品設(shè)計者或內(nèi)容專家在準(zhǔn)備測試集時,覺得內(nèi)容上覆蓋多領(lǐng)域就萬事大吉了。但我們實踐下來發(fā)現(xiàn),其實“形式”上盡可能覆蓋用戶的真實使用的多種情況,也很重要。因為模型應(yīng)對不同形式的輸入,其性能表現(xiàn)會產(chǎn)生差異。

基于“知識問答”功能,同樣是提一個關(guān)于產(chǎn)品經(jīng)理“商業(yè)分析”相關(guān)的問題,用戶完全可能有不同的問法,意味著背后的不同的用戶意圖。下圖是我們當(dāng)時做知識問答功能時,對問題形式的分類,供伙伴們參考。

所以,第二個要點:在準(zhǔn)備測試集中,除了對內(nèi)容主題的覆蓋度,“形式”覆蓋度也是同樣需要關(guān)注。

表達習(xí)慣的覆蓋度

在知識問答類的功能中,用戶的表達習(xí)慣也可以納入考量。同樣的“意圖”,有不同語言習(xí)慣的用戶會產(chǎn)生不同的表達,比如有些人習(xí)慣倒裝,有些人習(xí)慣簡略,所以在準(zhǔn)備測試集中,也需要準(zhǔn)備一些不同的表達習(xí)慣的提問(最好是真實用戶輸入)來確保LLM能夠理解。

第二坑:衡量維度,細(xì)節(jié)決定成敗

衡量標(biāo)準(zhǔn)的三板斧:準(zhǔn)確性、充分性和相關(guān)性。接下來我們分別從三個維度來看看有沒有坑。

“模糊”的準(zhǔn)確性

如果精確地評估準(zhǔn)確性是一個難點。由于大模型的自然語言特性,造成輸出并不是每次都是確定的、可定量評估的內(nèi)容。為了降低這種不可評估的問題,我們目前探索的解決方案是,將正確性的標(biāo)準(zhǔn)分成三類,增加評估的一致性:

  • “必須正確”:對于大模型的輸出內(nèi)容,哪些是必須包含在其中的的“準(zhǔn)確回答”,如果沒有,就是bad case。(類似高考答案中的踩分點)
  • “絕對錯誤”:對于大模型的輸出內(nèi)容,哪些是必須排除的錯誤答案。如果出現(xiàn),必須算成bad case。
  • “模糊地帶”:除了以上這兩類,其他如果再一些與預(yù)期不符的回答,但在可容忍的范圍內(nèi)的回答,可以算成good case。

充分性

目前沒發(fā)現(xiàn)有坑。因為大語言模型真的太、能、說、了。不怕它不充分,就怕它過分。

相關(guān)性

我們原來以為的相關(guān)性bad case是問題跑偏。你問產(chǎn)品經(jīng)理的商業(yè)分析A技巧怎么做,它回答你商業(yè)分析的B技巧。但實際碰到更多的情況是:大模型的流式輸出中,10個要點里交雜著1、2個“謊言”(與問題無關(guān)的回答)。因此,請?zhí)崆芭c你們的內(nèi)容專家確定好相關(guān)性的標(biāo)準(zhǔn)。是需要每個要點都嚴(yán)格與問題相關(guān),才算是good case;還是可以按比例進行,比如超過30%、50%與問題無關(guān),才算是bad case。

第三坑:經(jīng)常會遺忘的重要指標(biāo)

在RAG測試中,有兩個評估維度經(jīng)常會被忽略:一致性和上下文。但這兩個指標(biāo)很重要。

一致性:大模型在多次使用同樣的問題回答時,是否能給出相對一致的答案?!巴粋€問題能否保持一致性”其實對企業(yè)應(yīng)用來說還是蠻關(guān)鍵的,畢竟大家都不希望同一個問題,企業(yè)員工A和B去問,得到的是截然不同的答案。

為什么重要:大型語言模型通過大量的文本數(shù)據(jù)訓(xùn)練,理論上應(yīng)該能夠為相似的問題提供相似的答案。然而,由于模型內(nèi)部機制的復(fù)雜性(如隨機初始化、訓(xùn)練過程中的隨機性等),實際應(yīng)用中可能仍會出現(xiàn)一定程度的不一致性。因此,一方面,持續(xù)優(yōu)化模型以提高其輸出的一致性是非常必要的;另外,在測試中進行多輪測試來驗證其一致性也很重要。

上下文:當(dāng)多輪次回答時,是否會對回答的準(zhǔn)確性和相關(guān)性等產(chǎn)生影響。這種情況在用戶的實際情況中很常見,但在測試中容易會忽略。

為什么重要:LLM在處理輸入時,通常有一個固定的上下文窗口大小,這個窗口決定了模型能夠“記住”的最近對話內(nèi)容的長度。而上下文窗口大小確實與Token限制密切相關(guān),超出Token限制可能會被遺忘或忽略。

以上,都是我們在RAG項目中的實踐和真實感受。這個系列我們還持續(xù)更新,比如在文檔(知識)解析、QA對召回、向量化等的注意要點和“坑”等等,我們會持續(xù)記錄下項目實踐和思考,當(dāng)然,如果您有任何想法和經(jīng)驗想要分享,非常歡迎在評論區(qū)留言。

本文由 @AI 實踐干貨 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自 Unsplash,基于CC0協(xié)議

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!