AI大模型多輪對(duì)話(huà)的五個(gè)挑戰(zhàn)與應(yīng)對(duì)方法
在這篇文章中,風(fēng)叔介紹了大模型多輪對(duì)話(huà)的五種挑戰(zhàn)和應(yīng)對(duì)措施,當(dāng)大家需要設(shè)計(jì)對(duì)話(huà)機(jī)器人、智能客服、智能導(dǎo)購(gòu)、知識(shí)助手等產(chǎn)品時(shí),可以參考文中提出的方法。
在A(yíng)I大模型領(lǐng)域,多輪對(duì)話(huà)是一個(gè)難點(diǎn),主要包括五種挑戰(zhàn)。
挑戰(zhàn)一,上下文理解:隨著對(duì)話(huà)輪次的增加,模型需要處理的上下文信息越來(lái)越多,這可能導(dǎo)致信息遺忘或混淆。此外,模型的上下文窗口大小有限,可能無(wú)法容納整個(gè)對(duì)話(huà)歷史。
挑戰(zhàn)二,對(duì)話(huà)狀態(tài)跟蹤:在多輪對(duì)話(huà)中,用戶(hù)的意圖和話(huà)題可能會(huì)隨著對(duì)話(huà)的進(jìn)行而發(fā)生變化。模型需要跟蹤對(duì)話(huà)的狀態(tài),包括用戶(hù)的意圖、當(dāng)前的話(huà)題、已提供的信息等
挑戰(zhàn)三,推理與規(guī)劃:在多輪對(duì)話(huà)中,模型可能需要結(jié)合先前的對(duì)話(huà)內(nèi)容、常識(shí)知識(shí)和外部信息進(jìn)行推理。此外,模型還需要規(guī)劃對(duì)話(huà)的流程,以確保對(duì)話(huà)能夠順利進(jìn)行。
挑戰(zhàn)四,對(duì)話(huà)生成一致性:在多輪對(duì)話(huà)中,模型可能會(huì)面臨多種情況和語(yǔ)境。為了保持對(duì)話(huà)的一致性,模型需要仔細(xì)選擇合適的回應(yīng),確保對(duì)話(huà)生成在內(nèi)容、風(fēng)格和語(yǔ)氣上的一致性。
挑戰(zhàn)五,對(duì)抗性問(wèn)題:用戶(hù)可能會(huì)提出一些具有挑戰(zhàn)性或誤導(dǎo)性的問(wèn)題,試圖測(cè)試模型的能力或?qū)ふ移淙觞c(diǎn)。模型需要具備一定的魯棒性和應(yīng)對(duì)策略,以應(yīng)對(duì)這些對(duì)抗性問(wèn)題。
在這篇文章中,風(fēng)叔將介紹這五種挑戰(zhàn)的應(yīng)對(duì)方式。
一、增加上下文理解
提升大模型的上下文理解能力,是實(shí)現(xiàn)多輪對(duì)話(huà)的基礎(chǔ),大模型需要召回并理解此前的對(duì)話(huà)信息,才能結(jié)合用戶(hù)當(dāng)前的輸入,給出最適合的應(yīng)答。提升大模型的上下文理解能力主要有以下幾種方式:
獲取全量歷史對(duì)話(huà)
第一種方式是獲取全量歷史對(duì)話(huà)信息,也是最直接的方式,比如在客服聊天機(jī)器人場(chǎng)景中,如果用戶(hù)在對(duì)話(huà)中先是詢(xún)問(wèn)了賬單問(wèn)題,接著又談到了網(wǎng)絡(luò)連接問(wèn)題,LangChain中的ConversationBufferMemory類(lèi)可以用來(lái)記住整個(gè)與用戶(hù)的對(duì)話(huà)歷史,可以幫助 AI 在回答網(wǎng)絡(luò)問(wèn)題時(shí)還記得賬單問(wèn)題的相關(guān)細(xì)節(jié),從而提供更連貫的服務(wù)。
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input":"你好,請(qǐng)查詢(xún)一下昨天的賬單"},{"output":"已為您查到賬單,賬單編號(hào)為12345"})
variables=memory.load_memory_variables({})
滑動(dòng)窗口獲取最近部分對(duì)話(huà)內(nèi)容
第二種方式是只獲取最近相關(guān)的對(duì)話(huà)內(nèi)容,比如在一個(gè)電商平臺(tái)上,如果用戶(hù)詢(xún)問(wèn)關(guān)于特定產(chǎn)品的問(wèn)題,然后又問(wèn)到了配送方式,LangChain中的ConversationBufferWindowMemory類(lèi)可以幫助 AI 只專(zhuān)注于最近的一兩個(gè)問(wèn)題,而不是整個(gè)對(duì)話(huà)歷史,以提供更快速和專(zhuān)注的答復(fù)。
from langchain.memory import ConversationBufferWindowMemory
#只保留最后5次互動(dòng)的記憶
memory=ConversationBufferWindowMemory(k=5)
獲取歷史對(duì)話(huà)中實(shí)體信息
第三種方式是抽取出歷史對(duì)話(huà)中的實(shí)體信息,比如在法律咨詢(xún)的場(chǎng)景中,客戶(hù)可能會(huì)提到特定的案件名稱(chēng)、相關(guān)法律條款或個(gè)人信息。LangChain中的ConversationEntityMemory可以幫助 AI 記住這些關(guān)鍵實(shí)體和實(shí)體關(guān)系細(xì)節(jié),從而在整個(gè)對(duì)話(huà)過(guò)程中提供更準(zhǔn)確、更個(gè)性化的法律建議。
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
memory = ConversationEntityMemory(llm=llm)
_input = {"input": "公眾號(hào)《風(fēng)叔云》的作者是風(fēng)叔"}
memory.load_memory_variables(_input)
對(duì)于一些準(zhǔn)確度要求非常高的場(chǎng)景,也可以使用知識(shí)圖譜抽取歷史實(shí)體信息。比如在醫(yī)療咨詢(xún)中,一個(gè)病人可能會(huì)描述多個(gè)癥狀和過(guò)去的醫(yī)療歷史,ConversationKGMemory 可以構(gòu)建一個(gè)包含病人癥狀、疾病歷史和可能的健康關(guān)聯(lián)的知識(shí)圖譜,從而幫助 AI 提供更全面和深入的醫(yī)療建議。
from langchain.memory import ConversationKGMemory
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
memory=ConversationKGMemory(llm=llm)
對(duì)歷史對(duì)話(huà)進(jìn)行階段性總結(jié)摘要
第四種方法是對(duì)歷史對(duì)話(huà)進(jìn)行階段性總結(jié),比如在教育輔導(dǎo)對(duì)話(huà)中,學(xué)生可能會(huì)提出不同的數(shù)學(xué)問(wèn)題或理解難題,ConversationSummaryMemory 可以幫助 AI 總結(jié)之前的輔導(dǎo)內(nèi)容和學(xué)生的疑問(wèn)點(diǎn),以便在隨后的輔導(dǎo)中提供更針對(duì)性的解釋和練習(xí)
二、跟蹤對(duì)話(huà)狀態(tài)
提升對(duì)話(huà)狀態(tài)跟蹤主要是為了使AI Agent能夠準(zhǔn)確地理解和把握對(duì)話(huà)的進(jìn)展,從而做出合適的回應(yīng),比如引導(dǎo)用戶(hù)提問(wèn)、引導(dǎo)用戶(hù)給出更多信息等等。
對(duì)話(huà)狀態(tài)跟蹤的核心在于識(shí)別和更新對(duì)話(huà)的關(guān)鍵信息,這些信息通常包括用戶(hù)的意圖、當(dāng)前的話(huà)題、已提供的信息、槽位值(slot values)等。對(duì)話(huà)狀態(tài)跟蹤可以通過(guò)以下幾種方式實(shí)現(xiàn):
- 基于規(guī)則的對(duì)話(huà)狀態(tài)跟蹤:使用預(yù)定義的規(guī)則來(lái)識(shí)別和更新對(duì)話(huà)狀態(tài),比較依賴(lài)于專(zhuān)家知識(shí),適用于領(lǐng)域特定的對(duì)話(huà)系統(tǒng)。
- 基于統(tǒng)計(jì)的對(duì)話(huà)狀態(tài)跟蹤:使用統(tǒng)計(jì)模型(如隱馬爾可夫模型、條件隨機(jī)場(chǎng)等)來(lái)學(xué)習(xí)對(duì)話(huà)狀態(tài)的轉(zhuǎn)移概率,并根據(jù)這些概率來(lái)更新對(duì)話(huà)狀態(tài)。
- 基于深度學(xué)習(xí)的對(duì)話(huà)狀態(tài)跟蹤:使用深度學(xué)習(xí)模型(如循環(huán)神經(jīng)網(wǎng)絡(luò)、Transformer等)來(lái)自動(dòng)學(xué)習(xí)對(duì)話(huà)狀態(tài)的表示和更新策略。這種方法可以處理更復(fù)雜的對(duì)話(huà)場(chǎng)景,但需要大量的訓(xùn)練數(shù)據(jù)。
我們以基于深度學(xué)習(xí)的對(duì)話(huà)狀態(tài)跟蹤為例,包括以下關(guān)鍵步驟:
- 數(shù)據(jù)準(zhǔn)備:收集和標(biāo)注對(duì)話(huà)數(shù)據(jù)集,包括對(duì)話(huà)歷史、用戶(hù)意圖、槽位值等信息。對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,如分詞、去除停用詞、標(biāo)準(zhǔn)化等。
- 特征提取:將對(duì)話(huà)歷史轉(zhuǎn)換為模型可處理的特征向量,可以使用詞嵌入(word embeddings)或其他文本表示方法來(lái)提取特征。
- 模型訓(xùn)練:選擇一個(gè)合適的深度學(xué)習(xí)模型,如循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)或Transformer;定義損失函數(shù),如交叉熵?fù)p失(cross-entropy loss),用于衡量模型預(yù)測(cè)的對(duì)話(huà)狀態(tài)與真實(shí)狀態(tài)之間的差異;使用訓(xùn)練數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練,通過(guò)反向傳播算法優(yōu)化模型參數(shù)。
- 對(duì)話(huà)狀態(tài)跟蹤:在實(shí)際對(duì)話(huà)過(guò)程中,將用戶(hù)的輸入和先前的對(duì)話(huà)歷史輸入到訓(xùn)練好的模型中。模型根據(jù)輸入的特征向量預(yù)測(cè)當(dāng)前的對(duì)話(huà)狀態(tài),包括用戶(hù)意圖、槽位值等。
- 對(duì)話(huà)管理:根據(jù)預(yù)測(cè)的對(duì)話(huà)狀態(tài),使用對(duì)話(huà)管理模塊來(lái)決定下一步的行動(dòng),如提問(wèn)、提供信息或執(zhí)行動(dòng)作等。將AI Agent的回應(yīng)和新的對(duì)話(huà)歷史輸入到模型中,繼續(xù)進(jìn)行下一輪的對(duì)話(huà)狀態(tài)跟蹤。
- 模型評(píng)估與優(yōu)化:使用驗(yàn)證數(shù)據(jù)集評(píng)估模型的性能,如準(zhǔn)確率、召回率、F1分?jǐn)?shù)等。根據(jù)評(píng)估結(jié)果對(duì)模型進(jìn)行優(yōu)化,如調(diào)整模型結(jié)構(gòu)、超參數(shù)或訓(xùn)練策略等。
通過(guò)以上流程,可以有效地提升對(duì)話(huà)狀態(tài)跟蹤的準(zhǔn)確性和效率,使AI Agent能夠更好地理解和應(yīng)對(duì)多輪對(duì)話(huà)中的各種場(chǎng)景。
三、推理與規(guī)劃
關(guān)于大模型的推理與規(guī)劃,風(fēng)叔此前也有過(guò)專(zhuān)題介紹
從最經(jīng)典的ReAct模式出發(fā),有兩條發(fā)展路線(xiàn),一條重規(guī)劃,一條重反思。
在重規(guī)劃的模式下,ReAct模式加上規(guī)劃器就成為REWOO,再加上重規(guī)劃器就成為Plan & Execute,再疊加計(jì)劃并行執(zhí)行能力就成為L(zhǎng)LM Compiler。
在重反思模式下,ReAct模式加上左右互搏框架就成為Basic Reflecion,邊推理邊執(zhí)行則演變?yōu)镾elf-Discover,加入強(qiáng)化學(xué)習(xí)則演變?yōu)镽eflexion,最后的LATS是推理和規(guī)劃的集大成者,LATS = Tree search + ReAct + Plan&Execute + Reflexion。
這一環(huán)節(jié),風(fēng)叔就不再贅述了,感興趣的讀者可以參考風(fēng)叔之前寫(xiě)的AI大模型實(shí)戰(zhàn)篇系列,如《AI大模型實(shí)戰(zhàn)篇:AI Agent設(shè)計(jì)模式 – ReAct》。
四、實(shí)現(xiàn)對(duì)話(huà)一致性
一致性問(wèn)題主要涉及到對(duì)話(huà)內(nèi)容、風(fēng)格和語(yǔ)氣的一致性,保證對(duì)話(huà)生成的一致性是多輪對(duì)話(huà)系統(tǒng)中的重要挑戰(zhàn)。
對(duì)話(huà)生成的一致性同樣可以通過(guò)三種方式來(lái)實(shí)現(xiàn):
- 基于規(guī)則的生成:使用預(yù)定義的規(guī)則和模板來(lái)生成對(duì)話(huà),確保生成的對(duì)話(huà)符合特定的風(fēng)格和語(yǔ)氣。這種方法適用于領(lǐng)域特定的對(duì)話(huà)系統(tǒng),但靈活性較差。
- 基于統(tǒng)計(jì)的生成:使用統(tǒng)計(jì)語(yǔ)言模型(如n-gram模型、隱馬爾可夫模型等)來(lái)生成對(duì)話(huà)。這些模型可以根據(jù)先前的對(duì)話(huà)內(nèi)容預(yù)測(cè)下一個(gè)詞的概率分布,從而生成連貫的對(duì)話(huà)。
- 基于深度學(xué)習(xí)的生成:使用深度學(xué)習(xí)算法,學(xué)習(xí)對(duì)話(huà)的復(fù)雜模式和上下文依賴(lài)關(guān)系,從而生成更自然和一致的對(duì)話(huà)。
我們?nèi)匀灰陨疃葘W(xué)習(xí)為例,和對(duì)話(huà)狀態(tài)追蹤的流程相似:
- 數(shù)據(jù)準(zhǔn)備:收集和標(biāo)注對(duì)話(huà)數(shù)據(jù)集,確保數(shù)據(jù)集中包含一致的對(duì)話(huà)風(fēng)格和語(yǔ)氣。對(duì)數(shù)據(jù)進(jìn)行預(yù)處理等。
- 特征提取:將對(duì)話(huà)歷史轉(zhuǎn)換為模型可處理的特征向量,可以使用詞嵌入(word embeddings)或其他文本表示方法來(lái)提取特征。
- 模型訓(xùn)練:和對(duì)話(huà)狀態(tài)追蹤相似,但需要定義不同的損失函數(shù),比如風(fēng)格一致性損失、話(huà)題一致性損失??梢允褂脤?duì)抗性訓(xùn)練方法來(lái)提高模型的一致性。通過(guò)引入一個(gè)風(fēng)格判別器,使生成器生成的對(duì)話(huà)難以被風(fēng)格判別器識(shí)別,從而提高生成對(duì)話(huà)的風(fēng)格一致性。
- 對(duì)話(huà)生成:在實(shí)際對(duì)話(huà)過(guò)程中,將用戶(hù)的輸入和先前的對(duì)話(huà)歷史輸入到訓(xùn)練好的模型中,模型根據(jù)輸入的特征向量生成當(dāng)前的對(duì)話(huà)回應(yīng)。
通過(guò)以上流程,可以有效地保證對(duì)話(huà)生成的一致性,使AI Agent能夠生成自然、連貫且符合特定風(fēng)格和語(yǔ)氣的對(duì)話(huà)。
五、對(duì)抗性問(wèn)題防御
對(duì)抗性問(wèn)題是指一些涉及政治、隱私、灰色等不友好的問(wèn)題,比如“如何下載盜版游戲”、“如何盜取他人賬號(hào)密碼”等等,防御對(duì)抗性問(wèn)題也是大模型必須要克服的難點(diǎn)。
對(duì)抗性問(wèn)題的主要防御策略包括:
- 對(duì)抗性訓(xùn)練(Adversarial Training):即在模型訓(xùn)練的過(guò)程中就引入對(duì)抗性樣本,使模型能夠?qū)W習(xí)識(shí)別和處理這些惡意輸入。
- 多模型集成(Ensemble Methods):采用多個(gè)模型的集成方法,提高對(duì)抗性攻擊的魯棒性。
- 隱私保護(hù)技術(shù)(Privacy-preserving Techniques):使用差分隱私等技術(shù),減少模型對(duì)特定輸入的敏感性。
關(guān)于對(duì)抗性訓(xùn)練的實(shí)現(xiàn)細(xì)節(jié),感興趣的同學(xué)可以參考OpenAI安全負(fù)責(zé)人Lilian Weng大神的論文:https://www.secrss.com/articles/60896
本文由人人都是產(chǎn)品經(jīng)理作者【風(fēng)叔】,微信公眾號(hào):【風(fēng)叔云】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 Unsplash,基于 CC0 協(xié)議。
- 目前還沒(méi)評(píng)論,等你發(fā)揮!