1 引言
在人工智能的快速發展中,任務型對話 Agent 正成為提升用戶體驗和工作效率的關鍵技術。這類系統通過自然語言交互,專注于高效執行特定任務,如預訂酒店或查詢天氣。盡管市場上的開源框架如 Rasa 和 Microsoft Bot Framework 在對話理解和管理方面已經取得了不錯的進展,但仍存在一定的局限性,包括對大量領域數據的依賴、對固定模板的依賴,以及在個性化服務和復雜任務處理方面的不足。
大型語言模型(LLM)的興起為任務型對話 Agent 的設計和開發帶來了新機遇。LLM 強大的語言理解和生成能力,能夠有效提高對話系統的準確性和用戶體驗。得益于這些特點,我們有機會進一步簡化任務型對話 Agent 的開發流程,并顯著提高開發效率。
本文將重點介紹由 Gluon Meson 平臺孵化的創新框架——Thought Agent,探討如何利用大型語言模型來設計和實現任務型對話 Agent 。 該框架已在一家大型銀行的智能對話 Agent 項目中得到成功應用。本文旨在為讀者提供新的視角,幫助快速構建以 LLM 為輔助的任務型 Agent。
2 Thought Agent 框架
Thought Agent 是一個 LLM-powered 的任務型對話 Agent 框架,在傳統任務型對話 Agent 架構的基礎上創新性地引入了 LLM 來強化自然語言理解、自然語言生成(NLG)等對話系統的通用核心能力,并通過將意圖、槽位等信息進行配置化的設計,使得對話 Agent 的設計和實施變得更加高效、通用且易于開發,改善了傳統方案的開發效率和泛化能力瓶頸。
_圖 1. Thought Agent 運行機制及模塊功能簡介_如圖 1 中所示,該框架主要包含四大模塊,分別是自然語言理解(NLU)、狀態追蹤(State Tracker)、對話策略(Dialogue Policy)以及動作執行(Action Runner)。其中:
-
NLU 模塊是對話系統的關鍵部分,它負責解析用戶的輸入并識別出用戶的意圖和相關實體。
-
對話狀態追蹤模塊負責維護對話的上下文信息,確保系統能夠根據用戶的歷史輸入和當前意圖做出恰當的響應。
-
對話策略制定模塊則根據當前的對話狀態和用戶的意圖,決定下一步的行動。
-
最后,動作執行模塊是對話系統的輸出環節,它根據前面的模塊得到的信息,生成自然、準確的回復或執行相應的動作。
以用戶消息「我要查詢天氣為例」,該消息首先會進入到 NLU 模塊中,得到用戶的意圖是「查詢天氣」,狀態追蹤模塊找到「查詢天氣」意圖需要的槽位包括城市,時間等,其中城市是必填槽位,對話策略模塊感知到必填槽位「城市」沒有被提到,于是發起了追問槽位的策略行為,最后動作執行調用 NLG 功能生成回復 「請問你要查詢哪個城市的天氣?」。
接下來,我們將深入探討 Thought Agent 框架的各個模塊,并分析它們是如何共同作用,提升整個系統的智能化水平。
3. Thought Agent 各模塊功能詳解
3.1 自然語言理解(NLU)模塊
NLU 是對話系統的核心組件,其被設計用于理解用戶的需求,它需要從用戶的消息和上下文中提取出至少以下兩個信息:
-
用戶意圖 (Intent) ,指的是用戶語句背后的目的和需求,如查詢天氣、預訂機票等。正確識別用戶意圖對于系統給出恰當響應至關重要。
-
槽位 (Slot) ,指包含在用戶語句中的某些關鍵信息單元,如時間、地點等,是完成用戶需求所必需的補充信息。
在我們的框架中,NLU 模塊允許意圖和槽位之間通過配置信息建立層級關系,使得對話系統更加靈活和強大。這種層級結構的設計不僅使得配置更加直觀和清晰,而且有助于系統更準確地理解和處理用戶的復雜場景(例如意圖的描述將幫助 NLG 模塊生成恰到的意圖確認文本回復,槽位的描述將幫助 NLG 模塊生成更自然的追問槽位的文本回復)。
以下是一個具有層級關系的意圖和槽位配置示例:
在這個例子中,我們定義了一個“查詢天氣”的意圖,并且為這個意圖配置了兩個槽位:“城市”和“時間”。這種結構不僅有助于系統理解用戶輸入中的復雜信息,而且還可以用于生成更加精確和個性化的回復。
通過這種結構化的配置方法,Thought Agent 框架的 NLU 模塊能夠更好地處理復雜的對話場景,提升對話系統的準確性和用戶體驗。同時,這種設計也使得系統更加易于擴展和維護,為開發者提供了極大的便利。基于上面的意圖、槽位配置信息,NLU 模塊目前有兩種實現范式:
3.1.1 基于大語言模型的 NLU 范式
利用 LLM 直接執行 NLU 任務是一種先進而高效的方法。通過設計恰當的提示詞 (Prompt),能夠直接讓 LLM 完成意圖識別和關鍵信息提取,無需對大量特定領域數據進行微調。
這種做法可以最大限度利用 LLM 廣博的知識,提高對話理解的整體水平。如需融入更多領域知識,可采用 Retrieval-Augmented Inference (RAI) 技術,根據用戶查詢從知識庫中檢索相關文本作為輔助信息提供給 LLM。這種架構使 NLU 模塊能夠從相關的上下文中更深入的理解意圖,從而增強對話智能。
相比傳統的數據驅動方法,基于 LLM 的 NLU 范式更高效靈活,能快速在多個場景 (如智能家居、客服等) 間遷移和復用。下面則是一個基礎的用于完成意圖分類任務的 Prompt 例子,其中 Persona 的部分對 LLM 的職責進行交代,Retrieved shots 的部分是根據用戶消息從知識庫中檢索到的相似的內容,LLM 可以參考這些內容推理出最后的結果,最后的 Instruction 部分是本次任務需要推理的內容:
模型最后的回復就是其對「熱死了」這句話的意圖分類的結果。實踐中我們發現該方案對 LLM 的理解和推理的能力要求較高,選擇 GPT-4 或 Claude 3 Opus 能體驗到最好的效果。
3.1.2 基于微調語言模型的 NLU 范式
在一些特殊場景下,如存在數據隱私問題或缺乏部署大模型的算力時,我們可以選擇在開源大模型或小模型的基礎上進行微調以引入領域知識。準備訓練數據集,微調過程的關鍵在于構建高質量、全面覆蓋各類意圖場景的數據集。數據集應當包含豐富的用戶語義意圖和槽位信息示例,以確保微調后模型具備良好的泛化能力。
在數據構建過程中,我們可以借助大語言模型強大的理解和生成能力。首先,我們需要從業務方收集一些種子問題,覆蓋不同業務場景下的意圖類型。然后,將這些種子問題提供給大模型,利用其文本生成能力對種子問題進行改寫、擴展和細化,從而衍生出更加豐富、多樣的問題表述。
接下來,我們可以將這些生成的問題進行模板化處理,將不同的槽位信息與問題模板相結合,組裝成貼近真實場景的訓練樣本就能快速獲得足量所需意圖的訓練數據。
通過上述流程,我們能夠高效、低成本地構建覆蓋面廣、語意豐富的訓練數據集,為 NLU 模型的微調打下堅實基礎。相比人工手寫,利用大模型生成數據能顯著降低數據構建的成本和工作量,提高數據質量的同時也保證了數據的多樣性,有助于提升微調后模型的泛化能力。
保持訓練數據的平衡,數據不平衡問題會對模型性能造成嚴重影響。
通常情況下,一些常見的意圖類別如問候、確認等會有大量樣本數據,而其他特殊意圖類別的樣本則很少。如果不進行處理,模型在訓練時會過度關注主導意圖類別,忽視小樣本意圖類別,導致在這些小類別上的分類準確率低下。
為了解決這一問題,我們需要采取有效措施來平衡不同意圖類別的樣本分布。常用的方法包括對小樣本意圖類別進行過采樣,對大樣本意圖類別進行欠采樣,以及在損失函數中賦予不同權重等。
通過這些措施,可以減小不同意圖類別之間的樣本數量差異,提高模型對小樣本意圖的識別能力,從而獲得更加均衡、穩定的意圖分類模型。
選擇合適的模型,意圖識別和槽位提取兩個任務可采用聯合模型同時完成,也可選擇獨立的序列分類和序列標注模型分別優化每個子任務的性能。
意圖分類任務可以選擇 BERT-base 后接 MLP 的網絡結構,槽位提取任務可以使用 BERT-CRF 以及 BERT-Span 的網絡結構。
針對意圖分類和槽位提取任務,其目標都是將自然語言輸入映射到意圖類別標簽或序列標注的槽位標記上。當然,因為這兩個任務之間密切相關,也可以采用 Joint 模型同時完成(例如 JointBert),利用聯合學習的方式讓兩者相互約束和輔助、捕捉語義關聯。
相較于基于大模型的方案,這類方案能夠額外輸出置信度信息,通過設置置信度閾值以及通過人機交互機制確認低置信度結果,NLU 的穩健性得到了進一步提高。
3.1.3 處理層級化意圖
在實際的意圖分類任務中,不同意圖之間可能存在從屬關系,既可能是顯式的層級關系,也可能是隱式的語義關聯。
例如 “查實時天氣”,“查未來天氣” 都屬于更廣義的 查天氣" 意圖的子類,它們之間存在著明確的層級從屬關系。如果待分類的意圖中存在這種顯式或隱式的層次關系,我們可以采用分層式的模型架構,先對更廣義的大類意圖進行分類,再細化到具體的子類意圖上。如未采用這種層次化模型,而是使用普通的扁平化分類模型,會導致一些潛在問題,比如意圖混淆、泛化能力差、數據稀疏問題加劇等。
具體來說,這個分類模型包含若干個專門處理大類意圖的模塊和針對每個大類意圖的細分模塊,能夠充分利用不同層級的語義信息,綜合提升模型的準確性和穩定性。在推理時,輸入的用戶消息首先被提交到大類分類器,確定其所屬的大類意圖。
然后將用戶消息和大類標簽一并輸入到該大類意圖的細分模塊,得到具體的子類意圖輸出。除此之外,當意圖類別的數量較大(超過 30-50 個),普通的基于 BERT 的分類器以及基于 LLM 的分類器都可能存在性能下降的問題。
大量細分的類別間界限可能較為模糊,類內差異加大,類間差異變小,給分類器帶來更多困難。對于這類情況,我們還是建議考慮層次分類方法,將大量類別分成若干個粗粒度的組,先分類到組級別,再在組內細分類。當然,分層模型也帶來了更復雜的模型結構和計算量,在實踐中需要根據具體情況權衡收益和代價,做出最優的設計選擇。
3.2 狀態追蹤 (State Tracker) 模塊
狀態追蹤模塊在任務型對話系統中扮演著關鍵角色,它的主要任務是動態地追蹤和記錄對話的狀態。
3.2.1 對話狀態管理
對話過程是連續的,Tracker 需要正確的追蹤上下文信息,記錄用戶歷史意圖、槽位值的變化情況以及完整的對話歷史記錄,確保對話 Agent 具備深層次的理解和回應能力。
對話過程也是動態變化的,Tracker 需要實現高效的狀態更新策略。在每一輪對話后,正確地更新對話狀態且保持信息的一致性。可采用合理的算法和數據結構來優化更新過程,確保實時性和高性能。在小規模應用中,可以將狀態直接存儲在內存中;而在大規模分布式應用中,則需要將狀態持久化存儲,如使用 Redis 等內存數據庫,根據 session ID 快速讀寫對話狀態。
用戶的意圖不僅需要考慮當前用戶消息給到模型后的結果,還需要考慮上下文信息以及槽位等信息。基于上下文的意圖更新: 根據歷史意圖和最新對話輪的最新意圖綜合判斷用戶的當前意圖。例如在下面的對話歷史中,用戶第一輪意圖是訂飛機票,第二輪的意圖是填充槽位,由于填充槽位只是輔助意圖,Agent 可以認為訂飛機票這個意圖將繼續保持。
槽位與意圖矯正,在對話過程中,用戶提供的槽位信息有時會與當前識別出的意圖不匹配。這種情況下,Tracker 需要根據槽位信息對意圖進行矯正。
例如,當前意圖被識別為A,但用戶提供的大部分槽位值均屬于意圖B,那么很有可能用戶的真實意圖是 B 而不是 A。
為了處理這種情況,Tracker 可以采取以下策略:設置一個閾值,如果發現與當前意圖不匹配的槽位數量超過閾值時,就觸發意圖矯正流程,在接下來的 Action 模塊中,Agent 可以主動與用戶確認:“根據您提供的信息,我猜測您是想 XX,是這樣的嗎?”。
如果用戶確認了,就將意圖更新為正確的意圖;否則保持原意圖不變。通過這種策略,Tracker 能夠及時發現并糾正意圖識別的錯誤,保證后續處理的正確性。
同時也增加了人機交互的環節,提高了對話的自然度和用戶體驗。
3.3 對話策略 (Dialogue Policy) 模塊
對話策略模塊是對話 Agent 系統的決策中樞,根據對話狀態和用戶意圖為系統分配合理的行為策略 (Action)。為提高系統的適應性和智能化水平,我們設計了多種策略以應對不同情況(詳見圖 2),下面將分別對不同策略的設計進行解釋。
圖 2. 不同對話狀態對應的對話策略
對話終止策略,通過綜合分析用戶意圖、任務狀態等多個維度的信息,對話終止策略判斷是否需要結束當前對話。例如用戶長時間無響應、明確表達結束意圖或關閉對話界面等,均可視為終止對話的觸發條件。合理的終止策略可以避免不必要的冗長交互,提升用戶體驗。
對話轉移策略,當前對話 Agent 無法完全解決用戶問題時,對話轉移策略將決定是否需要將對話轉移給其他 Agent 或人工客服。這需要 Policy 模塊能夠準確評估當前 Agent 的能力邊界,并作出合理的轉移決策,從而為用戶提供更完整的解決方案。
追問槽位策略,追蹤并補全對話中遺漏的關鍵槽位信息是槽位追蹤策略的核心職責。該策略需要基于 NLU 模塊的理解結果,通過巧妙設計的提示語引導用戶補充遺漏的槽位,以確保獲取任務所需的全部信息。優秀的追蹤策略可顯著提高任務完成率。假設用戶想要訂購外賣,但未提供送餐地址這一關鍵槽位信息。對話 Agent 可以根據槽位追蹤策略生成如下 Prompt 進行追問:
User: 我想點一個牛肉漢堡外賣。
Agent: 好的,請問需要送到什么地址呢? 我們需要您的送餐地址來安排外賣員配送。
User: 送到xx街道xx號xx小區xx單元就可以了。
Agent: 收到您的送餐地址為xx街道xx號xx小區xx單元,我已將它添加到訂單中。您還需要指定其他要求嗎?
通過上述 Prompt,結合 “請問…”,“我們需要…” 等短語模板的 Fewshot,Agent 能夠巧妙地引導用戶補充遺漏的槽位信息,使其感受自然、不顯生硬。
意圖和槽位確認策略,為應對 NLU 模塊中存在的不確定性,需要引入意圖和槽位確認策略。當模型對用戶意圖或提取的槽位的置信度較低時,該策略會發起與用戶確認的文本回復,以保證對話 Agent 正確理解語義,從而提高對話質量。確認策略需要合理計算置信度閾值,并設計自然的確認交互方式。
例如下面的例子:
User: 啥都看不清楚 -> NLU 理解的意圖(調整燈具亮度)的置信度較低
Agent: 對不起,我沒有完全理解您想做什么操作,是想調整燈具的亮度嗎?可以再說得更清楚一些嗎?
User: 是想把臥室里的吸頂燈打開。
Agent: 好的,我明白了,我將為您打開臥室里的吸頂燈。-> 通過意圖確認機制帶來的用戶交互,提高NLU結果的置信度
從上述例子中,可以發現 Agent 對初始用戶語句的理解把握不高,表現為意圖識別的結果的置信度較低,因此使用"我沒有完全理解",“可以再說得更清楚一些嗎” 等確認性文字回復給用戶請求用戶重新闡述,從而降低錯誤的風險。
觸發下游動作策略,觸發下游行為策略旨在根據特定的對話狀態、用戶意圖等條件,為 Agent 分配合適的下游行為,如向后端系統發起請求、生成特定響應、執行一系列復雜操作等。通過明確的策略規則,可確保 Agent 及時執行正確的下游行為,提高系統效率。
3.4 動作執行(Action Runner)模塊
動作執行模塊負責具體行為的實現。在面向任務的場景中,最常用的行為是 RAG(檢索內容作為參考信息生成回答)、通用文本回復和智能調用。例如上述的確認意圖的策略對應的就是通用文本回復行為,如果用戶的意圖是打開一個功能,則對應的就是給下游發動一個 RPA(Robotic Process Automation) 的請求(如圖 3)。
通過這些組件的協同作用,使對話 Agent 能夠以智能、自然的方式響應用戶。得益于大語言模型強大的理解和生成能力,Agent 的人機交互體驗能夠進一步得到提高。
圖 3. 動作執行模塊中不同功能的消息路徑
3.4.1 RAG 功能的設計要點
RAG 是對話 Agent 中重要的生成模塊,通過結合檢索和生成的方式,實現更智能、個性化的回復。
在 Action 模塊中,我們強調以下關鍵點:選擇合適的 Embedding 模型,如果是對話的場景是通用領域,可使用預訓練好的 Embedding 模型,如在多語言場景下表現較好的 E5 系列模型,在中文場景下表現不俗的 BGE 系列模型等。
它們能提供不錯的語義表征能力。在檢索任務中,我們主要關注模型在 Pair Classification 維度上的得分,即給定模型輸入,模型將輸入相關的內容全部檢索出來的能力。
如果對話場景是特定領域(例如對話中涉及較多的行業黑話或專業名詞),建議在預訓練模型的基礎上進行進一步微調,以更好地捕捉領域特征。我們需要準備高質量的領域語料(Monologue 或 Dialogue ),對 Embedding 模型進行微調。
權衡檢索召回率與準確率,如果模型分析和推理能力很強,可以適當的降低相似度閾值,將可能與用戶問題相關的內容全部檢索到并放入 Prompt 中交給大模型來分析具體什么內容可以參考,什么內容與用戶的問題相關;但相對而言,如果基礎大模型的分析能力不夠強,這時候就需要盡量提高相似度閾值,過濾掉容易干擾模型分析思考的內容,進而降低模型出現幻覺的概率。
優化用于檢索的 Query,在多輪對話的場景中,用戶當前輪的消息可能會存在缺少主語導致檢索內容不完整的情況。而如果單純將多輪消息直接拼接用于檢索內容,又會降低檢索內容的準確率,兩種情況都會影響 LLM 最終回復內容的準確性。
這里可以引入一個多輪轉寫模型,將用戶的對話歷史輸入到模型,模型能夠自動補齊當前用戶消息中的主語,忽略掉與當前輪用戶消息無關的信息,如下例所示:
可以看到,轉寫后的結果相較于直接將每一輪的用戶消息進行拼接,信息更加純粹,檢索到的內容也會更加精準。
3.4.2 通用型 NLG 功能的設計范式
在實現文本回復時,強調回復的正確性、自然性以及用戶體驗。需要關注以下兩個方面:合理定義 Agent 個性 (Persona),對話 Agent 的人格特征設計是賦予其鮮明個性和身份認同的關鍵。
我們需要緊密結合應用場景,量身定制符合場景語境的人格特征。例如在客戶服務場景中, Agent 應展現出善解人意、專業值得信賴的一面,以緩解用戶不滿情緒、樹立專業形象;在智能助手場景中, Agent 則需呈現高效務實、智能靈活的風格,快速解決實際需求、處理復雜任務。而在教育領域, Agent 必須富有耐心、嚴謹權威,引導學生主動探索新知識;至于娛樂場景,詼諧幽默、活潑生動是 Agent 人格的基本要素,以提供新穎有趣的娛樂體驗。人格特征的合理設計不僅能增強 Agent 的身份認同感,更能為用戶營造更加沉浸、契合的對話體驗,提升對話 Agent 的友好度和可接受性。同時我們也需注意把控人格設計的程度,避免過度夸張或不當設定。
圖 4. 合理的 Persona 定義能夠為 Agent 帶來不同維度的增益
平衡回復的擬人性和模型幻覺(Hallucinations),LLM 為 Agent 提供了更擬人、自然的語言表達可能,但同時也存在著產生幻覺的風險,在面向任務的場景中,回復文本的時候需要平衡模型的幻覺和回復的類人性,特別是使用小參數推理能力較差的的 LLM 時,如果提示詞過于復雜(指令中涉及到需要大模型分析和推理的內容過多)需要特別注意模型的幻覺發生,例入下面這個例子:
上述例子中給到 LLM 的指令十分模糊,這需要 LLM 自己思考如何根據上下文給出合適的回復。此外,Prompt 中 Persona 的定義和最終的指令之間還穿插了之前的對話記錄,模型需要根據對話上下文考慮合適的回復內容以及上下文的一致性,在此基礎上還要保證該回復符合 Persona 的定義,這對于小參數的 LLM 來說是極具考驗的,在真實的對話場景中,這類指令帶來模型幻覺的概率會非常高。為了降低 LLM 的推理負載,我們首先考慮將指令和對話歷史的位置進行對調,其次需要提高指令的明確性使得其導向型更強,下面的 Prompt 是優化后的結果。
你和用戶的對話歷史如下
略
----------
你是一個智能客服,被設計用來幫助用戶解決日常的問題,用戶現在想要查詢天氣,但是沒有提供【地點】的信息``請使用一句簡潔的話來引導用戶提供【地點】信息
你的回復:
此外,為了降低對話歷史對 LLM 生成內容的影響,對話的歷史還需要被剪裁,在我們的實驗對象 ChatGLM3-6B 模型中,對話歷史的長度最好不要超過 3 輪,否則模型的幻覺出現的概率仍然顯著。此外,在使用大型語言模型直接回復用戶時,尤其是結合參考資料進行回答生成(如 RAG)時,我們需要意識到這種方法仍然存在一定的風險。
大模型在結合參考資料生成內容時,可能無法完全保證內容的正確性。因此,在實際應用中,可能需要引入前置的分類器或者驗證機制,來判斷模型生成的內容是否準確可靠。
因此,在實施基于 LLM 的對話 Agent 到面向客戶的場景之前,進行大量的測試和驗證是必不可少的。
這包括但不限于單元測試、集成測試以及用戶接受測試等,以確保模型在實際應用中的穩定性和準確性。同時,還需要對模型進行持續的監控和優化,以便及時發現并解決可能出現的問題。
3.4.3 智能調用功能的設計范式
智能調用功能是任務型對話 Agent 與外界交互的重要模塊,它負責將用戶的意圖和提取出的槽位值轉換為具體的操作,以完成用戶的任務需求。
為了實現高效且準確的智能調用,我們需要關注以下兩個設計范式:意圖與行為的映射,在智能調用過程中,需要將識別出的意圖和槽位值映射到后端系統中的具體操作上。這通常涉及到構建一個意圖-操作的映射表,以及為每個槽位值確定相應的參數。
例如,如果用戶的意圖是“預訂酒店”,那么映射表應該指明這一意圖對應的操作是調用酒店預訂系統,而槽位值如“日期”、“房間類型”等則作為調用參數。
槽位標準化,用戶在提供槽位值時,常常會使用非標準或者口語化的表達方式,如 “三塊五毛” 、“九月十五號” 等。對于這類簡單的數字、日期等槽位值,我們可以通過維護同義詞詞典或使用正則表達式的方式進行標準化替換。但在一些復雜的業務場景下,用戶可能會提供功能名稱的簡稱,或是一個描述性的句子來表達需求,這時詞典和正則就力有未足了。
我們需要引入模糊搜索的算法和接口,來支持對這些復雜槽位值的標準化。對于用戶輸入的功能簡稱或描述性句子,可以使用模糊字符串匹配算法 (如編輯距離、字符級 TF-IDF 等) 在標準功能名庫中搜索最為相近的條目。
我們還可以構建語義匹配模型,利用詞向量或預訓練語言模型捕捉用戶輸入與標準名稱間的語義相關性,來處理同義表述的情況。
在實踐中,需要綜合使用字典精確匹配、正則表達式、模糊字符串匹配、語義匹配等多種策略,構建分層的槽位標準化流程。對于無法高置信度匹配的情況,需要保留人工確認的環節,讓人工選擇或是重新輸入標準化結果,并將反饋數據用于優化標準化策略。
4. 面向任務型對話 Agent 的評估框架
對于設計面向任務的對話 Agent,評估框架的建立至關重要,可以確保系統在不同場景和用戶輸入下的準確性和穩定性。
除此之外,在Agent的優化迭代中,該評估框架也確保了優化方向的正確性。以下是針對面向任務的對話 Agent 的評估框架的關鍵組成部分:
4.1 針對 NLU 的自動評估
針對模型的意圖識別和槽位提取部分,我們可以創建包含各種語境和輸入的測試用例,確保模型在各種核心業務場景下都能夠正確地處理用戶意圖和提取相關信息。
基于普通測試集的評估,對于測試集的評估,我們可以將訓練數據拆分出一部分來做測試集,也可以制作一個固定的測試數據集,其中包含不同的輸入以及對應的用戶意圖和需要被提取出來的槽位。確保測試集具有代表性,能覆蓋大多數的應用場景,以便我們能夠全面了解模型在實際應用中的性能。評估指標可以包括準確率、召回率、精確度等。
基于增強測試集的評估,為了模擬模型在真實場景中的表現,一方面可以使用自然語言處理中的對抗攻擊方法, 例如基于規則、基于模型等生成對抗性樣本,評估模型的抗攻擊能力;另一方面,還可以構造包含拼寫錯誤、語法錯誤、同音字等噪聲的測試集,模擬真實場景下存在的語言噪聲。無論是基于語言模型的隨機替換,還是基于同音字的文本替換,都可以使用 TextAttack 開源庫生成對抗樣本。下面是一些使用模型對原文進行改寫的樣例:
TextAttack 提供了一個集成和可擴展的框架,極大方便了 NLP 模型對抗攻擊評估的進行,它主要被研究人員用于評估 NLP 模型的魯棒性水平,揭示模型薄弱點,從而指導模型優化和防御對抗攻擊。同時也適用于提高模型泛化能力、測試情況覆蓋率、生成對抗訓練樣本等需求。 此外,還可以人工制造一些處于意圖識別或槽位提取的決策邊界上的樣本,檢測模型在這些邊緣樣例上的泛化能力。可以通過對訓練樣本做小擾動、改寫等手段生成邊界樣本。
4.2 結合解釋性技術對模型能力進行分析
結合降維可視化方法對模型進行解釋,為了深入理解模型的決策過程,評估其在特定場景下的不確定性以及對抗性輸入的反應,我們還可以借助解釋性技術對 NLU 模型以及 RAG 中依賴的Embedding 模型進行可視化分析。
通過將模型的高維輸出 Embedding 降維到 2D 或 3D 空間,我們能夠直觀地觀察模型在不同類別上的決策邊界和聚類情況。
常用的降維技術包括 t-SNE、PCA 等。以意圖分類為例,我們可以將同一意圖類別的樣本點用相同顏色表示,不同顏色代表不同意圖類別。
這種可視化方式能讓我們大致了解模型在不同意圖類別上的分布和判別能力。在降維的 Embedding 空間中,我們還可以根據模型在每個樣本上的分類是否正確,使用不同顏色或標記對正確和錯誤預測進行區分。
這種正確性可視化能幫助我們發現模型在輸入空間中的哪些區域表現較差,為我們優化模型和數據提供依據。
結合降維可視化方法對模型決策邊界進行分析,對于包含噪音、同音字等攻擊性樣本的增強數據集,我們也可以將 Embedding 層投影到二維空間中進行可視化。
通過觀察這些攻擊樣本在決策邊界周圍的分布情況,我 們能評估模型對此類輸入的穩定性和泛化能力。同時,結合分類正確性的顯示,能讓我們洞見模型在應對攻擊樣本時的薄弱環節。
圖 5. 意圖分類結果投影,左側子圖為模型在測試數據中的分類情況,右側子圖為模型在擾動后測試數據中的分類情況,使用 t-SNE 進行降維可視化,紅色點為錯誤分類的結果,灰色點為正確分類的結果
4.3 面向多輪的策略測試
為了確保 Agent 在多輪對話場景中表現良好,我們還需要驗證 Tracker 模塊的上下文追蹤和狀態更新策略,確保核心模塊的準確性。此外,策略測試階段還需聚焦于對話管理策略的可靠性,確保 Agent 能夠正確判斷任務完成和轉交對話。
針對多輪對話場景,我們需要模擬用戶的不同回復,并對應檢驗策略模塊的決策是否合理。這通常需要 mock NLU 模塊的輸出結果 (包括用戶意圖和提取的槽位值),并將其輸入到策略模塊,檢查策略生成的對話行為是否符合預期。
以機票預訂為例,我們可以構造如下測試案例:
-
Mock NLU 識別為 “查詢航班” 意圖,但沒有提取到任何槽位值 (如出發地、目的地等),策略應決定詢問缺失的必要信息。
-
Mock NLU 識別為 “預訂機票” 意圖,已提取部分槽位值 (如出發地),策略應決定詢問其余缺失的信息。
-
經過多輪交互,Mock NLU 模塊模塊提取了全部必要信息 (如出發地、目的地、日期等),策略應決定進入機票搜索和預訂流程,或進行確認。
通過模擬各種多輪交互場景,我們可以全面測試策略模塊對 NLU 結果的處理邏輯,以及與對話狀態 Tracker 模塊的交互,檢驗其是否能夠合理地驅動對話前進、終止會話。
同時也可以測試策略在處理異常或未知輸入時的容錯能力。
4.4 主觀評估方法
對于對話 Agent 而言,每一次的回復往往沒有一個明確且唯一的「Golden truth」,傳統的自動評估指標 (如 BLEU、Perplexity 等) 在評價生成的自然語言回復時,很容易出現評估偏頗。因此,在對話系統的測試中,引入人工評估是非常必要的。
人工評估可以從多個維度對 Agent 生成的回復進行評分,如合理性、語言自然度、情感適當性等,并綜合這些分數得到回復質量的整體評價。
同時,人工評估員還可以針對整個對話會話,對 Agent 的整體表現如任務完成度、一致性等進行評分。
除了人工評估,我們還可以借助大型語言模型的能力,將其作為 「裁判 (discriminator)」 評判 Agent 回復的合理性。具體來說,我們可以將 Agent 的回復和上下文對話一并輸入到大模型中,根據大模型對這一完整對話場景的判斷分數,來衡量 Agent 回復的質量。大
模型的評判能力源自其廣博的知識基礎和對自然語言表達的深入理解。這種基于大模型的評估方式,不僅能夠高效地為大量回復進行評分,還能避免人工評估中潛在的主觀偏差。
我們還可以設計不同的評判維度,結合真實用戶的 Person 分布,將具有不同 Persona 的大模型觀察者的綜合評估結果作為優化 Agent 回復能力的決策依據.綜合人工評估和基于大模型的自動化評估手段,能夠有效彌補各自的缺陷,全面檢視對話系統生成的自然語言響應質量,為系統的優化和改進提供可靠的評估依據。
5. 結語
至此,一個基礎的面向任務的對話 Agent 的全貌就全部呈現在讀者的眼前了。相比當前流行的對話 Agent 框架,Thought Agent 在多個方面都具有顯著的優勢:
-
開發效率更高,Thought Agent 依賴 LLM 強大的自然語言理解和生成能力,無需從頭構建 NLU。避免了標注大量的數據(在選用的 LLM 能力較強的情況下,如 GPT-4),只需標注少量的數據以及合理設計 Prompt,即可快速開發出適用于多場景的對話系統。能夠大幅降低工程成本和人力投入。
-
泛化能力更強,基于大模型的 NLU 方案能夠最大限度利用 LLM 的語義理解能力和廣博知識,具有很強的泛化能力。傳統的基于規則或數據驅動的方案,需要針對每個新場景重復標注訓練數據的工作。而 Thought Agent 只需增加一些配置,標注少量的配置即可快速遷移部署。
-
對話質量更佳,依托 LLM 的強大語言生成能力,Thought Agent 能夠生成高質量、多樣、上下文關聯的自然語言回復,避免了傳統模板式的生硬和單一的回復。回復的個性化程度和交互體驗也得到極大增強。
在未來,我們將進一步提高該框架的復用性,提供易于使用的配置界面,降低使用門檻。同時也將提高自動化程度,使框架能自動完成一些重復性的工作,如用于 RAG 的知識庫的構建、模型評估等,進一步減輕開發者的工作負擔。我們希望該創新框架能夠在更多場景中幫助開發者快速搭建任務型對話系統,用于進行 POC 驗證或落地部署。
如何學習大模型 AI ?
由于新崗位的生產效率,要優于被取代崗位的生產效率,所以實際上整個社會的生產效率是提升的。
但是具體到個人,只能說是:
“最先掌握AI的人,將會比較晚掌握AI的人有競爭優勢”。
這句話,放在計算機、互聯網、移動互聯網的開局時期,都是一樣的道理。
我在一線互聯網企業工作十余年里,指導過不少同行后輩。幫助很多人得到了學習和成長。
我意識到有很多經驗和知識值得分享給大家,也可以通過我們的能力和經驗解答大家在人工智能學習中的很多困惑,所以在工作繁忙的情況下還是堅持各種整理和分享。但苦于知識傳播途徑有限,很多互聯網行業朋友無法獲得正確的資料得到學習提升,故此將并將重要的AI大模型資料包括AI大模型入門學習思維導圖、精品AI大模型學習書籍手冊、視頻教程、實戰學習等錄播視頻免費分享出來。
第一階段(10天):初階應用
該階段讓大家對大模型 AI有一個最前沿的認識,對大模型 AI 的理解超過 95% 的人,可以在相關討論時發表高級、不跟風、又接地氣的見解,別人只會和 AI 聊天,而你能調教 AI,并能用代碼將大模型和業務銜接。
- 大模型 AI 能干什么?
- 大模型是怎樣獲得「智能」的?
- 用好 AI 的核心心法
- 大模型應用業務架構
- 大模型應用技術架構
- 代碼示例:向 GPT-3.5 灌入新知識
- 提示工程的意義和核心思想
- Prompt 典型構成
- 指令調優方法論
- 思維鏈和思維樹
- Prompt 攻擊和防范
- …
第二階段(30天):高階應用
該階段我們正式進入大模型 AI 進階實戰學習,學會構造私有知識庫,擴展 AI 的能力。快速開發一個完整的基于 agent 對話機器人。掌握功能最強的大模型開發框架,抓住最新的技術進展,適合 Python 和 JavaScript 程序員。
- 為什么要做 RAG
- 搭建一個簡單的 ChatPDF
- 檢索的基礎概念
- 什么是向量表示(Embeddings)
- 向量數據庫與向量檢索
- 基于向量檢索的 RAG
- 搭建 RAG 系統的擴展知識
- 混合檢索與 RAG-Fusion 簡介
- 向量模型本地部署
- …
第三階段(30天):模型訓練
恭喜你,如果學到這里,你基本可以找到一份大模型 AI相關的工作,自己也能訓練 GPT 了!通過微調,訓練自己的垂直大模型,能獨立訓練開源多模態大模型,掌握更多技術方案。
到此為止,大概2個月的時間。你已經成為了一名“AI小子”。那么你還想往下探索嗎?
- 為什么要做 RAG
- 什么是模型
- 什么是模型訓練
- 求解器 & 損失函數簡介
- 小實驗2:手寫一個簡單的神經網絡并訓練它
- 什么是訓練/預訓練/微調/輕量化微調
- Transformer結構簡介
- 輕量化微調
- 實驗數據集的構建
- …
第四階段(20天):商業閉環
對全球大模型從性能、吞吐量、成本等方面有一定的認知,可以在云端和本地等多種環境下部署大模型,找到適合自己的項目/創業方向,做一名被 AI 武裝的產品經理。
- 硬件選型
- 帶你了解全球大模型
- 使用國產大模型服務
- 搭建 OpenAI 代理
- 熱身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地計算機運行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何優雅地在阿里云私有部署開源大模型
- 部署一套開源 LLM 項目
- 內容安全
- 互聯網信息服務算法備案
- …
學習是一個過程,只要學習就會有挑戰。天道酬勤,你越努力,就會成為越優秀的自己。
如果你能在15天內完成所有的任務,那你堪稱天才。然而,如果你能完成 60-70% 的內容,你就已經開始具備成為一名大模型 AI 的正確特征了。
這份完整版的大模型 AI 學習資料已經上傳CSDN,朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費
】
