RAG實(shí)踐篇(二):這些年,我們?cè)跍y(cè)試中踩過的坑
RAG目前在企業(yè)級(jí)應(yīng)用中是最優(yōu)解,但實(shí)踐中的坑點(diǎn)不少,今天分享我們?cè)跍y(cè)試環(huán)節(jié)踩過的坑。
在大模型的企業(yè)級(jí)應(yīng)用中,RAG應(yīng)該是目前的最優(yōu)解。不過,由于它和傳統(tǒng)的軟件開發(fā)項(xiàng)目存在很大的不同,實(shí)際落地時(shí)經(jīng)常會(huì)存在意想不到的坑點(diǎn)和難點(diǎn)。有次和同樣在探索RAG應(yīng)用的朋友交流,大家都不約而同地發(fā)出“一周出demo,半年不好用”的吐槽。
這個(gè)實(shí)踐系列就是我們?cè)谔剿骱屯虏壑械漠a(chǎn)物。今天這篇,我們想專門聊聊在項(xiàng)目測(cè)試中踩過的坑,希望對(duì)同樣在RAG摸爬滾打的伙伴有幫助。(上一篇:RAG實(shí)踐篇(一):知識(shí)資產(chǎn)的“梯度”)
為什么從“測(cè)試”開始說?
- 和傳統(tǒng)開發(fā)差異大:大語言模型的開發(fā)過程與傳統(tǒng)應(yīng)用軟件存在顯著差異,主要體現(xiàn)在其黑盒子特性和輸出的不可控性。在傳統(tǒng)應(yīng)用軟件中,產(chǎn)品經(jīng)理可以明確地定義產(chǎn)品功能,輸入/輸出通常是確定的,通過驗(yàn)收標(biāo)準(zhǔn)很容易和開發(fā)、測(cè)試達(dá)成共識(shí)。然而,在AI產(chǎn)品的開發(fā)中,由于大語言模型所以無法完全預(yù)測(cè)在特定輸入下的行為,輸出也有著高度不確定性,這樣如何找到有代表性的測(cè)試集也很有難度。
- 優(yōu)化成本小,但有收益:大語言模型是一個(gè)不斷自我學(xué)習(xí)和優(yōu)化的過程。給到足夠擬真的測(cè)試環(huán)境,并在測(cè)試后給到及時(shí)反饋,也是提升其表現(xiàn)性能的方式之一。而且相對(duì)成本較小。
一、RAG測(cè)試三大坑
在給企業(yè)做RAG落地應(yīng)用的時(shí)候,我們發(fā)現(xiàn)很多企業(yè)需求從“知識(shí)問答”類的功能開始,比如公司規(guī)章制度/管理要求/文化建議等輸入,或者基于某個(gè)專業(yè)領(lǐng)域的知識(shí)庫進(jìn)行私有化。由于泛用性廣,也便于理解,我們就以“知識(shí)問答”為例來說明。
第一坑:如何做到測(cè)試集的覆蓋度?
無論是RAG項(xiàng)目還是其他LLM的項(xiàng)目開發(fā),最理想的測(cè)試集就是來自用戶的真實(shí)數(shù)據(jù)。但實(shí)際中我們發(fā)現(xiàn),很多企業(yè)其實(shí)并不具備這個(gè)條件,需要開發(fā)團(tuán)隊(duì)或者甲方自行“生產(chǎn)”測(cè)試集。無論由誰來準(zhǔn)備,覆蓋度原則是一個(gè)關(guān)鍵點(diǎn)。它指的是在測(cè)試集中應(yīng)包含廣泛的細(xì)分主題,以確保模型能夠應(yīng)對(duì)不同領(lǐng)域的查詢,這樣才有助于比較有效地評(píng)估RAG整體表現(xiàn)。以知識(shí)問答為例,通常會(huì)要求測(cè)試集盡量覆蓋這個(gè)知識(shí)領(lǐng)域中所有子領(lǐng)域的代表性問題。其中,有兩個(gè)點(diǎn)值得注意:
要意識(shí)到“知識(shí)”和“用戶問題”之間的差距
在起初沒經(jīng)驗(yàn)的時(shí)候,我們往往就會(huì)直接按照知識(shí)庫所代表這個(gè)專業(yè)知識(shí)領(lǐng)域的子分類進(jìn)行細(xì)分。以產(chǎn)品經(jīng)理的能力知識(shí)為例,我們?cè)罁?jù)“商業(yè)洞察”、“溝通與領(lǐng)導(dǎo)能力”、“需求分析能力”等進(jìn)行測(cè)試集,結(jié)果上線后發(fā)現(xiàn),用戶真實(shí)挑戰(zhàn),不太可能像知識(shí)庫那樣分門別類,井井有條。甚至有些回答會(huì)需要橫跨兩個(gè)或多個(gè)子領(lǐng)域才能回答。
于是我們才意識(shí)到,很多領(lǐng)域的知識(shí)是一種經(jīng)過經(jīng)驗(yàn)提煉和梳理后的結(jié)構(gòu)化產(chǎn)物,它能高效地將知識(shí)進(jìn)行聚類和管理,但已經(jīng)不是用戶挑戰(zhàn)的“原始狀態(tài)”。
因此,覆蓋度的第一個(gè)注意要點(diǎn):請(qǐng)根據(jù)目標(biāo)用戶的真實(shí)情境來進(jìn)行測(cè)試集的分類,而不是知識(shí)庫本身分類。否則,可能與真實(shí)情況相去甚遠(yuǎn)。
不要忽略“形式”的覆蓋度。
有些產(chǎn)品設(shè)計(jì)者或內(nèi)容專家在準(zhǔn)備測(cè)試集時(shí),覺得內(nèi)容上覆蓋多領(lǐng)域就萬事大吉了。但我們實(shí)踐下來發(fā)現(xiàn),其實(shí)“形式”上盡可能覆蓋用戶的真實(shí)使用的多種情況,也很重要。因?yàn)槟P蛻?yīng)對(duì)不同形式的輸入,其性能表現(xiàn)會(huì)產(chǎn)生差異。
基于“知識(shí)問答”功能,同樣是提一個(gè)關(guān)于產(chǎn)品經(jīng)理“商業(yè)分析”相關(guān)的問題,用戶完全可能有不同的問法,意味著背后的不同的用戶意圖。下圖是我們當(dāng)時(shí)做知識(shí)問答功能時(shí),對(duì)問題形式的分類,供伙伴們參考。
所以,第二個(gè)要點(diǎn):在準(zhǔn)備測(cè)試集中,除了對(duì)內(nèi)容主題的覆蓋度,“形式”覆蓋度也是同樣需要關(guān)注。
表達(dá)習(xí)慣的覆蓋度
在知識(shí)問答類的功能中,用戶的表達(dá)習(xí)慣也可以納入考量。同樣的“意圖”,有不同語言習(xí)慣的用戶會(huì)產(chǎn)生不同的表達(dá),比如有些人習(xí)慣倒裝,有些人習(xí)慣簡略,所以在準(zhǔn)備測(cè)試集中,也需要準(zhǔn)備一些不同的表達(dá)習(xí)慣的提問(最好是真實(shí)用戶輸入)來確保LLM能夠理解。
第二坑:衡量維度,細(xì)節(jié)決定成敗
衡量標(biāo)準(zhǔn)的三板斧:準(zhǔn)確性、充分性和相關(guān)性。接下來我們分別從三個(gè)維度來看看有沒有坑。
“模糊”的準(zhǔn)確性
如果精確地評(píng)估準(zhǔn)確性是一個(gè)難點(diǎn)。由于大模型的自然語言特性,造成輸出并不是每次都是確定的、可定量評(píng)估的內(nèi)容。為了降低這種不可評(píng)估的問題,我們目前探索的解決方案是,將正確性的標(biāo)準(zhǔn)分成三類,增加評(píng)估的一致性:
- “必須正確”:對(duì)于大模型的輸出內(nèi)容,哪些是必須包含在其中的的“準(zhǔn)確回答”,如果沒有,就是bad case。(類似高考答案中的踩分點(diǎn))
- “絕對(duì)錯(cuò)誤”:對(duì)于大模型的輸出內(nèi)容,哪些是必須排除的錯(cuò)誤答案。如果出現(xiàn),必須算成bad case。
- “模糊地帶”:除了以上這兩類,其他如果再一些與預(yù)期不符的回答,但在可容忍的范圍內(nèi)的回答,可以算成good case。
充分性
目前沒發(fā)現(xiàn)有坑。因?yàn)榇笳Z言模型真的太、能、說、了。不怕它不充分,就怕它過分。
相關(guān)性
我們?cè)瓉硪詾榈南嚓P(guān)性bad case是問題跑偏。你問產(chǎn)品經(jīng)理的商業(yè)分析A技巧怎么做,它回答你商業(yè)分析的B技巧。但實(shí)際碰到更多的情況是:大模型的流式輸出中,10個(gè)要點(diǎn)里交雜著1、2個(gè)“謊言”(與問題無關(guān)的回答)。因此,請(qǐng)?zhí)崆芭c你們的內(nèi)容專家確定好相關(guān)性的標(biāo)準(zhǔn)。是需要每個(gè)要點(diǎn)都嚴(yán)格與問題相關(guān),才算是good case;還是可以按比例進(jìn)行,比如超過30%、50%與問題無關(guān),才算是bad case。
第三坑:經(jīng)常會(huì)遺忘的重要指標(biāo)
在RAG測(cè)試中,有兩個(gè)評(píng)估維度經(jīng)常會(huì)被忽略:一致性和上下文。但這兩個(gè)指標(biāo)很重要。
一致性:大模型在多次使用同樣的問題回答時(shí),是否能給出相對(duì)一致的答案?!巴粋€(gè)問題能否保持一致性”其實(shí)對(duì)企業(yè)應(yīng)用來說還是蠻關(guān)鍵的,畢竟大家都不希望同一個(gè)問題,企業(yè)員工A和B去問,得到的是截然不同的答案。
為什么重要:大型語言模型通過大量的文本數(shù)據(jù)訓(xùn)練,理論上應(yīng)該能夠?yàn)橄嗨频膯栴}提供相似的答案。然而,由于模型內(nèi)部機(jī)制的復(fù)雜性(如隨機(jī)初始化、訓(xùn)練過程中的隨機(jī)性等),實(shí)際應(yīng)用中可能仍會(huì)出現(xiàn)一定程度的不一致性。因此,一方面,持續(xù)優(yōu)化模型以提高其輸出的一致性是非常必要的;另外,在測(cè)試中進(jìn)行多輪測(cè)試來驗(yàn)證其一致性也很重要。
上下文:當(dāng)多輪次回答時(shí),是否會(huì)對(duì)回答的準(zhǔn)確性和相關(guān)性等產(chǎn)生影響。這種情況在用戶的實(shí)際情況中很常見,但在測(cè)試中容易會(huì)忽略。
為什么重要:LLM在處理輸入時(shí),通常有一個(gè)固定的上下文窗口大小,這個(gè)窗口決定了模型能夠“記住”的最近對(duì)話內(nèi)容的長度。而上下文窗口大小確實(shí)與Token限制密切相關(guān),超出Token限制可能會(huì)被遺忘或忽略。
以上,都是我們?cè)赗AG項(xiàng)目中的實(shí)踐和真實(shí)感受。這個(gè)系列我們還持續(xù)更新,比如在文檔(知識(shí))解析、QA對(duì)召回、向量化等的注意要點(diǎn)和“坑”等等,我們會(huì)持續(xù)記錄下項(xiàng)目實(shí)踐和思考,當(dāng)然,如果您有任何想法和經(jīng)驗(yàn)想要分享,非常歡迎在評(píng)論區(qū)留言。
本文由 @AI 實(shí)踐干貨 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)
- 目前還沒評(píng)論,等你發(fā)揮!