前言
如果你用過openai的chatgpt服務,你肯定知道一個叫做GPTs的智能體商店,里面提供了大量的來自官方和個人制作的專門針對某個領域的gpt助手。比如,你想讓gpt幫忙寫文章,并且要能夠寫得好,你就可以在商店中搜索相關的助手并應用到聊天窗口,同理,還有網頁搜索助手,PDF閱讀助手,等等。
你要先搜索,尋找能解決你問題領域的專家助手,再和它交流。
不覺得這樣很繁瑣嗎?
我們來想象一個這樣的場景,你是一所豪宅的主人,豪宅里配備了一個家政團隊,有管家和負責不同工作的仆人。當你想要預定午餐吃什么,你不需要去找廚師,而是找管家說一聲;你想讓人去打掃客廳,你也不需要去找負責打掃衛生的仆人,而是找管家說一聲。
所以,GPTs實際上是提供了一個龐大的專業執行團隊,但是,卻沒有一個管家。
對于我們提出的一個需求或請求,實際上能分成兩個重要環節——“做什么?”和“怎么做?”
因此,我們可以考慮一個這樣的ai系統設計,它分為兩個層面——調度層(管家)和執行層(專家角色),分別用于解決兩個重要環節的問題。
調度層
對于一個管家來說,他的職責其實可以概括為:理解、分解、分配。
-
理解
根據與用戶的交流內容(可能是一條指令或是一段對話的上下文),理解并總結出需要的事情。這一步是調度層的第一步,也是最關鍵的一步。
-
分解
當用戶的請求包含有多個需要做的事情時,應當把它們拆解成獨立的小任務。例如,”幫我把臥室的地板打掃一下,順便開下客廳的燈“,就應當拆分成”打掃臥室的地板“和”打開客廳的燈“這樣的兩個任務。
-
分配
把一個任務分配給對應的執行層角色。這個操作可以依靠讓大模型做選擇題來實現。把執行層角色的能力作為一個帶序號列表放入提示詞中,讓大模型根據任務描述輸出對應角色的序號。后面就是傳統程序化的工作了。
對于理解這個環節,對大模型的考驗比較大。例如,“把‘幫我訂一張火車票’翻譯成英文”與“幫我訂一張火車票”就是完全不同的意圖,對于前者,甚至管家自己就能回答。再比如,“今天天氣好像不錯啊,幫我把窗戶打開吧”,這樣的用戶請求,管家應當要能正確理解和歸納出要做的事情是”打開窗戶“,而不需要去查天氣的情況。
對于上下文理解就更加考驗大模型能力了。
重新回到現實情境,如果豪宅的主人只告訴管家”中午我想吃點好吃的“,那么管家理論上是只需要轉達給廚師,但是,今天來的可能是個新廚師,不知道屋主人的用餐喜好,那他可能就會先提供一份菜單,反問屋主人想吃哪個,等屋主人決定后才會執行做菜的任務。在這個過程中就有一個需要考慮的問題,是廚師親自去找屋主人問,然后自己理解,還是把問題返回給管家,讓管家問清楚后,由管家自己理解并生成一個新的任務?
我的想法是,仍然由管家進行匯總與理解。因為理解意圖,本身就是管家的職責。
所以我們可以設想一個這樣的對話:
user: 我中午想吃點好吃的
assistant: 您具體想吃什么呢?今天午餐可選的菜品有炸雞、紅燒肉、西蘭花炒瘦肉、醬香面。
user: 醬香面吧
那管家收到這樣一段對話后,就應當理解出一個新任務,”主人要求今天的午餐為醬香面“,然后直接把該任務交給廚師即可。
執行層
對于一個執行角色來說,他的職責會更加明確:規劃、執行、反饋。
-
規劃
規劃這個步驟可以比較靈活。第一種方式是參考現在的一些ai-agent框架,直接讓大模型生成一個行動規劃,按照順序步驟執行;第二種方式就是偏程序化的方式固定一系列行動規劃,比如,對于IOT控制,通常就是根據用戶請求查詢可控制設備的列表,然后生成參數或者直接生成函數,運行代碼,控制設備,這樣具有固定流程的步驟。
-
執行
執行通常就是運行代碼,或者讓大模型生成內容(文字、圖片、視頻、音頻等)。
-
反饋
反饋這一步可以做得比較靈活,根據任務類型場景,反饋可以是針對生成代碼的運行測試審核,或者是對文字內容的審核,又或者是對內容的二次修改,總之,是利用LLM進行自我反饋,從而校準輸出結果與目標結果的匹配度。
任務表
這里我提供另一種設計思路,將調度層的部分壓力轉移給執行層,這種設計理論上更簡單點,但是會增加系統的開銷和問題風險。
假設現在已經有了一個支持100種專家角色的ai服務系統,然后,我打算增加100種,那么,按照之前的思路,我不僅要在執行層新增100種角色,我還要在調度層的分配提示詞中增加對應的100種角色的描述,一旦這些角色的職責有變動,我還要在分配提示詞中相應更改,顯然會比較繁瑣。
于是,我們可以選擇:將調度層的分配操作去掉,在執行層的每個角色都增加一個任務匹配檢查,調度層不直接分發任務,而是把所有任務放到一個任務表中,執行層的角色自行掃描任務表,從中獲取屬于自身職責的任務。
總結
當然,你可能從一開始就意識到,這樣的設計就是最基本的分治思想。事實上,也已經有不少ai-agent開源框架采用了分治方法,把大任務拆解為多個小任務,以此來提升ai回答內容的質量,不過,我個人認為這優化的是“怎么做”這個環節,而針對“做什么”這個環節,我個人提出的方案就是引入調度層這樣的設計來進行優化。或許再大膽一點,這可能也是一種專用于AI的“操作系統”的雛形。
后記:這篇文章實際上寫于24年4月份,但由于一些原因一直到7月才打算發布,此時我已經看到不少大公司的AI系統支持這種ALL IN ONE的功能,因此,這篇文章的參考價值或許不算太高了。