天天看點

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

作者:AI應用實踐

上周,微軟的typescript之父釋出了一個有趣的開源項目:TypeChat(名字就可以看出和TypeScript與ChatGPT相關)。在官方介紹上,給出了該項目的一句話介紹:幫助獲得大語言模型(LLM)的結構化響應,以用來建構應用程式的自然語言互動界面。簡單地說,就是将自然語言通過大模型(LLM)翻譯成自定義的類型(通過TypeScrip語言)輸出,進而能夠更好地與自己的應用程式相連接配接。

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

自然語言:LLM時代的互動界面

如何了解建構“自然語言互動界面“呢?我們用一個買咖啡的例子來說明:

我們現在使用線上買咖啡的應用(比如小程式),其互動方式是傳統的圖形界面輸入:選擇咖啡類型,選擇冷熱程度,選擇糖粉多少,然後下單,此時應用軟體根據您的選擇,比如【拿鐵、一杯、冰、半糖、大杯】,然後生成訂單傳遞後續操作。

那麼如果我們需要用自然語言(Natural Language)作為互動方式呢?你所需要的就是用自然語言說出:“給我來一杯大杯的拿鐵,半糖加冰,就這樣”。對于這樣的一句“自然語言”的輸入,很顯然,應用軟體是無法直接處理的。這其中有着AI應用最大的鴻溝也是難點之一:自然語言的語義了解。

應用軟體的訂單系統隻能處理“結構化的輸入”,簡單的說,也就是有着規定格式的輸入資訊,比如一個訂購資訊有着簡單的如下結構(類型):

{

"type":"LatteDrinks", //類型

"name":"latte", //名稱

"temprature":"iced", //溫度

"quantity":"1", //數量

"options": {...} //其他選項

}

TypeChat就是做這個工作的:将自然語言借助于AI大模型翻譯成應用軟體系統擅長處理的結構化資料。當然,TypeChat隻是一個“指揮官”,其核心的任務仍然是由大語言模型來完成,比如chatGPT。

來自官方的例子程式,把你的自然語言的請求轉換為結構化的類型良好的資料:

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構
初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

傳統AI方法的比較

在大語言模型廣泛應用之前,其實你可能已經體驗過類似的“自然語言UI”的應用,比如AI電話訂餐,AI電話訂購火車票,也可以通過自然語言,比如“查詢一下今晚從南京到上海的高鐵火車票”來實作與訂票系統互動,那麼他們是怎麼實作的呢?

傳統AI方案一般是通過後端AI技能的配置,以及大量樣本的标注與訓練來完成。首先定義使用者意圖(比如訂票)、意圖的詞槽/參數(比如出發地、時間)、意圖澄清的話術(比如‘請問從哪裡出發?’)、意圖處理方法(查詢方法的結構化輸入輸出);然後針對該意圖提供大量的自然語言樣本并進行标注(即提供大量的對話樣例);然後交給算法進行機器學習,最後才能投入使用。

一個AI訂購咖啡的意圖可能是這樣定義的:

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

相對于傳統的基于大量樣本标注與訓練的AI意圖識别,現在借助于大語言模型來了解自然語言的輸入,具備的主要優勢為:

  • 複雜度降低,節約大量的工作量。樣本标注與學習已經由大語言模型幫你完成,無需自行完成。“有多少人工智能,就有多少人工在背後”的現象不再出現。
  • 極強的語義了解能力,意圖識别能力指數級上升。傳統的意圖識别一個簡單的意圖可能也需要幾百上千的對話樣本進行标注和學習,否則很容易出現意圖識别準确率低、互相幹擾等“人工智障”的結果。特别是在中文這樣的歧義性較大的語境下,自然語言處理的準确性一直是AI領域的攔路虎。

TypeChat的工作原理

大語言模型能夠勝任将人類自然語言進行“類型化”與“結構化”的工作,原因在于其天然就具有這樣的能力,比如,我直接要求chatGPT轉換我的自然語言請求:

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

我們知道,大模型是可以反複互動實作優化調校的。那麼,如果我們對此加以引導與限制,大語言模型就可以生成更加嚴格的輸出格式:

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

是以,可以看到有了非常不錯的效果!利用大語言模型,我們成功的通過提示詞和調教,将自然語言的輸入轉換成應用程式更擅長處理的、類型良好的、結構化的資訊輸入,這樣,我們可以很輕松的将自然語言作為應用的互動的界面。這就是TypeChat背後的原理:

初探微軟TypeChat:給你的應用增加自然語言互動界面的實驗架構

TypeChat工作原理,來自網友整理

使用者隻需要定義你的應用程式支援的結構化資訊類型。這可以是簡單的語言情感分類,也可以是更複雜的結構化類型,比如一個購物車内資訊的類型、一個音樂播放請求的類型等。你也可以将多個類型組合成更加複雜的意圖類型。定義類型後,TypeChat 将通過以下流程對你的自然語言輸入進行處理(通過LLM):

  1. 使用你定義的類型建構大語言模型需要的提示詞(Prompt)
  2. 獲得大模型的響應,驗證響應是否符合定義的類型結構。如果驗證失敗,則通過進一步的大模型互動,修複不合格的輸出
  3. 總結結果,并将符合類型定義的結構化資訊輸出

接下來,你就可以把結構化的、嚴格遵循你的類型要求的輸出,交給你的應用程式進行處理!

Github位址:

https://github.com/microsoft/TypeChat

繼續閱讀