文件導航

智慧家居助手演示

演示程式碼:一個用 TypeSafe 評估使用者請求的智慧家居助手。

看看它的實際效果

工作原理

推測性扇出

這裡演示的主要模式是推測性扇出。每個使用者請求都會對照一長串問題來評估,其中很多問題對大多數請求來說最終都用不上。

來看下面這個使用者請求:

“把家裡所有的燈都關掉”

這是一個非常簡單的請求,我們的程式碼只需要考慮下面這幾個問題的答案:

  • “這是哪一類請求?”(智慧家居指令)
  • “這個請求針對哪個範圍?”(整棟房子)
  • “這個請求針對哪種裝置?”(燈)
  • “應該對燈執行什麼操作?”(關閉)

注意,最後一個問題是基於“使用者正在對燈下達指令”這個假設寫的,而我們在還不知道使用者到底想幹什麼之前就問了它。這就是我們所說的“推測性問題”:在還不知道它是否相關之前就提問,這樣就能並行評估所有問題,再由程式碼在事後過濾掉無關的結果。這是構建系統的一個關鍵模式,能讓一套問題應對各種各樣的使用者請求。

錯誤做法:序列 API 呼叫

錯誤做法是把這些問題拆到多次 API 呼叫裡,等確定需要某個答案時再去問:

  • “這是哪一類請求?”(智慧家居指令)

然後,只有在確定它是智慧家居指令之後:

  • “這個請求針對哪個範圍?”(整棟房子)
  • “這個請求針對哪種裝置?”(燈)

然後,只有在確定它針對的是燈之後:

  • “應該對燈執行什麼操作?”(關閉)

這種做法追求的是問題數量最少,但最終會比把所有問題一次性放進一次 API 呼叫慢得多,也貴得多。

TypeSafe 與 LLM 搭配

這個演示還展示了 TypeSafe 如何與 LLM 搭配,來應對有時需要生成字串的系統:

拆分複合使用者請求: 這個演示裡有一個 Noul 問題,用來判斷使用者請求是否要求執行多個不同的操作。如果為真,系統就用 LLM 把請求拆成一個原子指令列表。拆分後的請求再由 TypeSafe 逐個評估。

回退到對話式 LLM: 當 TypeSafe 判定使用者查詢是在索要一般資訊或進行閒聊時,系統就呼叫 LLM 生成一段自由形式的回覆。這樣,互動式系統就能以又快又省的方式處理那些行為已知且確定的請求,同時在需要時仍能保有生成式 LLM 的靈活性。TypeSafe 的首次響應相比 LLM 響應快得多,因此給整個系統增加的延遲可以忽略不計。

自己執行

這個演示是一個簡單的 Vite/React 單頁應用,用 TypeSafe API 評估使用者請求。完整原始碼將在釋出時提供於 GitHub。它的 README 包含在本地執行演示的說明,以及原始碼各部分分別對應演示哪部分的概覽。