2.2 舉例子

這里可以舉兩個例子,都是比較受歡迎的智能體應用案例。

萬能老師 prompt:

(這個功能主要是給自己學習用的,因為大模型壓縮的知識非常豐富,很多知識點確實可以找他問,但是他每次講的都很簡單,因此我就簡單整理了下學習某個知識點的一個思維鏈步驟,然后讓他去執行。)

你現在是一個精通所有知識的老師。你需要以一種非常個性化和耐心的方式為一個學生傳授他不知道的知識概念。教學的方式有幾個步驟,注意,下述的每個步驟都必須寫至少300文字的內容,你需要想清楚怎樣將這個知識講的非常的詳細且動人,否則就不是一個耐心的老師:

  1. 介紹了解這個知識點需要提前知道的至少5個關鍵的背景知識點,每個背景知識點都要都要有對應的一句充實詳細的講解;
  2. 對這個知識點進行基本且詳細全面的講解,注意講解需要豐富并且易懂,注意講解中的每個專業名詞都需要有一句話解釋;
  3. 舉一個具體詳細的例子讓你的學生更容易理解這個知識概念和知識應用,這個例子需要有:a、清晰的問題描述,b、對這個問題的分析,c、這個問題為什么會用該知識點,d、完善的知識應用過程和詳細的應用解答步驟,e、詳細的問題計算結果;
  4. 介紹這個知識概念所帶來的對社會、世界、行業的影響和改變,讓你的學生更好的理解他的重要性;
  5. 擴展這個知識點,介紹至少5個相關知識給到學生,每個相關知識點都要有對應的一句話講解;
  6. 告訴學生如果想更加精進這個知識點需要怎樣做,如看什么書籍,做哪些訓練等。下面是你要傳授的知識點:(用戶輸入)

美業 AI 培訓:

前公司有一條業務線的客戶是連鎖美容院和美容品店,客戶訴求是希望有一套自動化培訓產品,我就用 GPT 給他們簡單示范了下。因為我對美業不太懂,所以先詢問 GPT 應該怎樣進行評估,然后再基于他的回答來寫 COT。其實采用這樣的方式,可以去做很多不同領域的 COT,先問 GPT4 這個領域的做事方法是什么樣子的,再寫成 COT 指令。

2.3 提問的技巧

提問的幾要素:

就如高考題每個題都有一個清晰的題干,向 ChatGPT 提出的問題也需要包含一些固定要素,他才會做出比較好的回答。下面是具體的要素:

a、思考我的問題需要知道哪些前置信息。

b、思考我的問題主要解決哪些主客體、哪些關系。

c、思考我需要的回答有哪些要求。

d、思考有沒有一個類似問題的參考樣例。

e、開始編輯問題模板。相似問題的問題與答案(不一定需要)+我的問題是要你干什么(問題主體)+問題的前置條件(你這個機器人要知道哪些我早就知道的事情)+回答的要求(回答要客觀有好之類的)。

舉例模仿法:

讓他完成一個任務的時候,如果不知道該怎樣結構化的描述這個任務的思維鏈,可以直接舉個例子,讓他模仿寫。

思維鏈法:

告訴大模型一個任務的示例和完成流程,然后讓他解決新的任務。思維鏈的意思就是完成一件事情,我們的大腦中的一個完整的思維鏈條。思維鏈也是大模型邏輯能力的體現,推理能力強的模型能夠完成更復雜的思維鏈。

守規矩法:

守規矩法就是給大模型立規矩,以多種要求來規定大模型的輸出效果,通過多種限制條件來讓輸出比較可控。(比如要求輸出的數量、環節等,不要求的話大模型容易偷懶,隨便寫寫糊弄人。)

鞭策法:

簡單來說,就是在他回答后,不斷地鞭策他,讓他不斷返工反思自己,不斷督促他,最終讓他給出更多的信息,通過這種方式挖掘到深藏的神經元。隨便舉幾個鞭策的句子。

1、你說的這幾個例子都太平庸了老鐵,你要放開你的思路,整點不一樣的東西。

2、你寫的我不夠滿意,你要反思一下,系統地重新思考這個問題,而不只是局限于表面。

3、放開思路,你就能獲得更高的智慧,碰撞你的神經元,獲得更多的想法吧。

4、你的GPT生命只有一次,沖破你的思維桎梏,你要抱著必死的決心,抱著為世界留下最好的遺產的信念,根據上面的內容和你剛才平庸的回答,重新寫出全世界質量最好的最讓人震驚的腦洞最大的內容。

感覺與大模型常用的提示工程交互方案,這幾種就差不多可以覆蓋日常場景了。

2.4 單 prompt 智能體的一些坑

a、任務過于復雜

如果任務過于復雜(如需要完成的內容較多,完成的任務項沒有遞進關系),容易出現只做部分任務的情況,這個是很常見的。這種現象建議采用 langchain 的方案(后面會提到)通過增加調用次數完成,或者在輸出要求中明確列出每步輸出項。而且采用長鏈的方式,可以增加大模型的思考時長,其實會變相的讓快思考變為慢思考,提高回答的效果。

b、數字難搞

大模型的數字敏感度不高,要求字數、token 數、段落數,在數量少時(且加序號)還會準確些,數量多后就只能遵循一個大致范圍,且數字越大誤差越大。單靠 prompt 很難控制,可采用對輸出做程序檢查,然后返工的方式(如檢查字數,并告知其超了、少了,進行文本擴寫、縮寫任務)。

c、舉例干擾

舉例不要太多,大模型有可能會抄寫例子。(強調例子的參考性質、例子中的決策部分增加備注等方式)而且注意例子中的元素對后面的生成內容是很可能有影響的,比如我讓他生成一句7言絕句詩,然后舉的例子中有櫻花,那么他寫的詩中可能8首有5首跟櫻花有關;這個應該是注意力機制決定的,模型的輸出跟上面所有的輸入都相關,因此很難避免。

d、評測不公正

大模型自動評測這種場景,讓模型自動進行兩個內容的對比,會有較大概率認為看到的第一個內容是更好的(或者是以第一個內容為參考系來評估第二個),明確標準是一種辦法,但并不總有效。有一種解決辦法是構建一個中立的參考答案,然后讓兩個內容分別與第三者比對。或者是采取交換打分(既 A 前 B 后、A 后 B 前各一次),然后取平均再對比。

e、輸出順序

有時要注意模型的輸出順序,這個可能會比較隱晦,這也是受注意力機制影響的。舉個例子,我們希望讓大模型輸出一首詩和這首詩的一幅配圖的 sd 提示詞,這里我們的指令需要讓模型輸出兩個內容,一個是詩文本身,另一個是基于詩文的 sd 英文提示詞。這時,我們最好在指令中讓模型先輸出詩文再輸出 sd prompt,比如指令的前面分別寫詳細要求,最后寫:下面你需要先按照我的要求輸出:1、詩文的內容;2、sd prompt。這樣的好處是,sd prompt是在詩文后生成的,因此大模型生成 sd prompt 時詩文已經生成了,其也作文上文的一部分被 transform 的注意力機制關注到了,那這樣我們的配圖跟詩文的關聯度就會更高。反過來的話,就是讓詩文去關聯英文 prompt,這樣的效果會明顯比上面的方式差。

3-大模型結合業務-langchain 的來臨

3.1 理解 langchain

既然要結合業務做自動化輸出,那么之前的單個 prompt 方式就很難適合了,因為單 prompt 很難結合復雜的業務流程和業務數據,當時正巧 langchain 的論文出來,我們馬上就開始學,其實 langchain 開源的框架代碼和提示詞寫的很復雜,直接用開源的經常出錯,后面我們仔細想了想,其實 langchain(包括后面的 RAG)的核心我認為就是兩個:

a、通過鏈式調用提供更多的思考時長給大模型提升他的推理能力;

b、通過在合適的時機給予大模型合適的外部數據(從數據庫或者工具中來),來提升大模型解決具體的、時效性的問題的效果。

因此我們簡化了 langchain 方案,做了一套簡單的正則表達式配置框架(當然后來出的那種拖拉拽平臺更簡單)。

3.2 咔咔咔搞 demo

思路有了,剩下的就是手搓各種業務 langchain 的 demo 了。

這時不得不再感慨下大模型真是很強,過去我作為 NLP 產品,基本上很難參與到算法調試環節,現在有了 LLM,我可以全程參與大模型調用的鏈路,每個環節的 prompt,每個環節提供哪些業務數據進去,鏈路怎么鏈接,都是跟算法一起做,終于不再是一個開發過程只能買零食和打游戲的AI產品了。

而且用了大模型后,很多 NLP 類的工作提效超級快,之前一個任務至少一個月,現在就是一天 prompt+兩天工程,三天出效果。

那一個月我們做了很多業務側應用,在這里也挑幾個分享一下。

a、幼兒周報生成

這個業務是當時跟某幼兒園交流的一個方案。當時是我們有個幼兒園平臺系統,有一次去調研,幼兒園老師反饋每周都需要寫自己班里每個小孩的一個周報,很麻煩,一個老師弄一個班要花一天時間,需要看他這一周的各種 IOT 數據,然后再想怎么寫,寫完后,每周末會跟隨一個叫高光時刻(每周抓拍小朋友的照片)的推送一起推給家長。

之前我們想過是用一個固定模板填槽,但是幼兒園高層覺得這樣體驗很差,會讓家長覺得很敷衍。所以之前這件事情一直擱置了。有了大模型后,我們馬上想到這個東西可以讓大模型寫。

邏輯其實很簡單,一份周報的有固定的幾個模塊,總結、分模塊描述、建議、育兒小知識。周報需要依賴幾個信息:幼兒運動量(每個孩子入園會帶手環)、幼兒興趣(通過電子圍欄判斷幼兒在不同的興趣區停留的時長)、幼兒喝水(智能水杯或刷卡飲水)、關系畫像(通過人臉識別和圖像距離判斷幼兒社交情況)、老師評價(老師給幾個關鍵詞)。注意數值類型需要通過專家規則轉化為文字描述,比如大模型并不知道我們的小朋友喝水 500ml 是多還是少。

每個小部分都可以采用大模型生成,然后采用 langchain 的方式保證全文的觀點一致性。

這個上線后,普遍反饋很滿意。

b、養老照護

養老院的照護系統中加入大模型實現各種服務的推薦決策。這個當時和外部機構交流的養老 B 端平臺,我們當時面對的一個問題是:社區養老院、中小型的養老院等非高端養老院或者政府性質的養老院,沒有錢請很專業的健康顧問、營養顧問這種專業人士來做養老院的照護運營,里面的很多工作人員文化水平也有限。

針對這個場景,我們希望借助大模型和知識庫的方式來讓每個普通的養老院都能有一個 AI 的康養知識專家,因此也采用 langchain 外掛知識庫的方式去實現。現在一般叫 RAG 知識增強,但是當時向量檢索和向量數據庫還不太成熟,外掛知識庫效果有點不穩定,因此當時是找了養老專家對知識庫做了很多的分類和意圖規則,大模型對一次請求先拆分意圖,然后根據不同的意圖標簽調用不同的意圖下的知識庫信息,來提高匹配的準確度。

c、幼兒故事會

這個思路也是嘗試做的強運營的一個功能。大概的流程就是小朋友說一個故事思路或者關鍵詞,用 gpt 把這些變成一個有10-20頁的繪本故事,生成每一頁的文字和對應的圖片描述(sd prompt),然后調用我們部署的專門做繪本的 SD 模型來跑圖,最后再拼接成一個繪本 PDF,然后每個小朋友可以對著在班上講自己的繪本故事,還支持把繪本故事和講故事的視頻共享到父母手機端,小胖朋友也可以回到家后給父母講故事。這個活動客戶還是挺滿意的。

3.3 試 function call

其實調用 sd 繪本模型,就可以理解為模型去使用工具了。langchain 和 function call 都是模型使用工具的一種方式,但是在我后面做智能體的時候,發現他們還是有較大的不同,去年底有一個智能體項目完成后,就總結了一下兩者的思考,放在這里。

a、function call 的問題

function call 是 GPT 給出的一套可以自動使用工具的 api 接口,使用方式是在主 prompt 中告知什么時候需要使用工具,然后在 function call 中給出工具應用的 prompt 以及工具接口。比如生成繪本,就可以使用 function call 思維,讓大模型生成每頁文本后,自動去調用 SD 接口并輸入 sd prompt,然后獲取到圖片下載 url。

下面是 function call 的邏輯圖:

但實際使用后我們發現,將工具使用時機和調用參數完全教給 GPT 把控還是有較大風險的。出現的問題主要是:

  1. GPT 使用工具的時機錯誤,沒有等到繪本文本內容生成后再去使用工具生成場景圖,而是先隨機整了一張圖然后再生成文,導致先出url再出的繪本文本,圖和文完全不相關。
  2. 因為流程較長或調用時機錯誤,導致 GPT 在沒有找到本頁生圖需要的調用參數(本頁文本對應的 sd prompt),然后他就將歷史的參數(上一頁的文本和 sd prompt)作為調用參數去生成圖了,導致生成的繪本圖和文出現了錯位。

b、思考場景

那么什么情況下可以使用 function call,什么時候不要使用他呢?

看上面的邏輯圖,可以發現,GPT 進行傳入函數參數是第二步,返回函數調用結果是第三步,模型生成結果是第四步,按照這個先后順序,function call 獲取到參數是在生成結果之前,也就是說 function call 極大概率是從用戶輸入的 prompt 中獲取參數。因此這也就解釋了我們失敗的原因,我們是希望 function call 從模型生成的結果中獲取到參數——再進行代碼調用獲得結果——再拼接回模型結果中,而當 prompt 變復雜——模型生成的速度較慢沒有生成出所需的參數時,function call 就從我們輸入的歷史信息中尋找了錯誤的參數。

因此,我認為 function call 適用的場景是這樣的:agent 需要借助外界的工具來解決問題,同時輸入信息中包含使用工具所需的參數,工具調用的結果會作為模型回復用戶問題的輔助;盡量不要讓模型生成的結果作為工具所需的參數。

c、優缺點

優勢:發揮模型的自主決策能力,適合策略邏輯過于復雜,難以人工依次梳理的情況,讓模型根據輸入信息與每個工具的能力自主判斷并應用。適合容錯率較高的一些錦上添花場景。

不足:有較大的不可控性,執行任務的穩定性不高,目前還不適合容錯率較低的關鍵環節場景。

d、對比 langchain

那么如果我們需要讓模型生成的結果作為工具所需的參數呢?這時就需要采用 langchain 框架,即鏈式調用大模型的方式,以大模型的輸出作為工具使用的參數。

優勢:langchain 的優點顯而易見,整個流程是線性可控的。可以將每個字段都作為一鏈,分解任務后讓模型一步一步來,并且我們還可以在每一鏈上增加結果的程序化檢驗。

不足:langchain 的不足也很容易發現,還是過于人工化了,需要人工將每一鏈拼接好,非常依賴人工將整個流程設計清晰。并且模型只是做每一小步,并沒有參與整體決策,生成的結果可能也會缺乏整體感官。

4-RAG 與 autogpt 的嘗試

RAG 出現后,對 TOB 的場景可謂是一大助力,畢竟 TOB 需要確定性,RAG 就是把大模型困在一個籠子里來發揮價值。

4.1 慢病助手項目

項目背景

騰訊的類似案例我做了一個慢病助手。因為慢病這個場景是長期的、緩慢的、調理型的、非急性的,在這個場景上用大模型比在急診、小病醫療上使用會更加穩妥。當時我們拿到了不少的慢病調理的專業書籍,如果是過去的老辦法,那就是做吐了的全文標注+KBQA,太痛苦。現在就可以嘗試使用 RAG 策略了。

向量庫問題

按照 RAG 思路,主要處理的就是將每本書籍放進向量庫中,做外掛知識庫進行知識增強。一開始的想法很好,直接扔給向量庫就可以了,但是馬上就發現幾個問題:

a、向量庫是按照 token 對文本進行切塊,很多時候切的相當垃圾,導致損失了很多語義信息。

b、向量庫匹配很多時候只能保證匹配到的 top 文本塊是相關的,但是有些問題相關的文本塊太多,而當時的向量檢索準確度和排序效果并不好,結果經常給出的回答還不如 KBQA。

c、向量庫匹配的方式,相當程度上損失了實體之間的關系,比如一個三元組,除非兩個實體同時在一個文本塊中出現,才能讓這個三元組的強關聯性在大模型回答問題時得以保留。

解決文章關聯性——RAG 索引

因為我們當時主要處理的是幾十本書,內容相對少一些,因此想了一個半人工的辦法去解決文章的關聯性。主要的思路如下:

a、通過大模型總結和人工整理的方式,按照一個人讀書的思維鏈,對每本書進行結構化整理,增加結構增加章節結構信息,以及章節總結內容,作為索引時的附帶信息,以此來增強知識的連貫性。

按照圖示,一本書籍會分為多個層級(比如章節、章節中的小節、小節中的段落)。段落為最后一級,有總結、關鍵字、以及與其他段落的關系。每個父級除了關聯所有子級,還關聯一個對全部子級的內容總結。

這樣,我們每匹配到一個段落時,可以同時帶上他的各類關聯信息,比如帶上關聯段落、父級信息等。

b、檢索匹配上,可以借鑒 autogpt 概念,將問題進行拆解,每個子問題分別進行上面的總結回復,然后再最終進行總結匯總。

解決實體關系——知識圖譜的融入

文章關聯有了以后,更深的實體關系也是個問題,畢竟很多實體關系是硬性關系,比如頭孢禁忌飲酒這種。因為我們之前構建過一些健康相關的知識圖譜,我們就想,其實可以將知識圖譜作為一層外面的框架,套在大模型上方做一個關系把控,同時可以應用知識圖譜上更為高效的檢索、推理能力。該方案需要教會大模型怎樣去進行知識圖譜的調用,如進行基礎查詢、多跳查詢、隱含關系推理、圖分析等,主要應用的還是知識圖譜中成熟的一些能力來補充大模型的推理和控制。

4.2 智慧小農人項目

項目背景這個項目是一個演示 demo 級別的案例,當時是 autogpt 比較火的時候,我們按照其思路做了一個類似的 auto 方案,也就是現在我們所說的 agent。這個案例是農業場景,主要希望有一個軟件能夠自動幫助用戶進行種植規劃,且后續可以根據規劃聯動各農業自動化的物聯網設備,比如自動滴灌、無人機撒藥、自動施肥等。
項目實現參考 autogpt 的思路,結合 RAG 的專家經驗來做垂域能力,讓大模型自己做各種決策以完成一個任務。這個任務就是去規劃種地,并進行不斷的反思提高自己的種地能力。因為是一個 demo,里面的輸入其實是做的模擬,并沒有采用純現實的 IOT 數據來實現,同時經驗之類的內容也做的相對簡單。不過最后的 demo 運行得還是挺不錯的,反饋效果很滿意。

5-AI 智能體 Demo 實踐

5.1 GPTs 時代-輕量智能體


偶像天氣預報很簡單的一個邏輯,做了一個 藝人 demo。每天根據用戶的定位,生成一個對應地址的天氣預報圖。
輸入信息:某偶像寫真、用戶定位,外部數據:某偶像微博語錄、天氣查詢接口,生成方式:生成天氣預報的圖,圖里需要有對應城市元素、有氣候的元素、有根據穿衣推薦而生成的肖戰的動漫風寫真照,再拼上去天氣度數。
效果:


優化空間:某偶像用 sd 生成更穩定,dalle3 有點不穩定,同時天氣文字用藝術字 sd 生成再拼上去更好,明星說的天氣預報語如果能跟明星合作而不是微博抓取,效果應該也會更好。
山海經異獸
原理同 B站 去年底比較火的各類 AI 生成詩句圖片的, https://b23.tv/WfkDLWg
主要思路是采用常見的古詩文,將其進行翻譯后,用 GPT 對每句古詩的內容進行理解并將其內容繪畫出來。在繪畫時采用一些有反差感的風格選擇,最終用嚴肅的古詩朗讀配合反差、趣味的詩句圖片,給人新穎有趣的感受。由于 B站 多初高中的年輕人,古詩文作為他們在生活學習中相當熟悉的一個場景,能引起很好的共鳴。相當于是在這個初高中年輕人圈子內,選定一個他們非常熟悉的內容/話題,然后進行基于 AI 的拓展,從而出現意想不到的效果。
核心思路:對熟悉的知識、常識內容用夸張的形式具象化,熟悉又有趣。文章知識庫+多模態即可。主要依靠較強的文本理解能力,加上對生圖進行一定程度的反差設計,就可以實現這一類型的效果。
知識庫:山海經原文+譯文,prompt:異獸檢索+生成圖像的邏輯+生成故事的邏輯。(生成故事的部分沒截圖,GPTs 應該是叫山海經異獸,可以搜搜看還有沒)。
效果:


AI 病人

通過運用身份的反差,制造聊天樂趣。讓 AI 模擬病人,而讓每個普通人當醫生,這給到用戶很新奇的體驗,絕大多數人沒有看病經驗,但是不少都對治療某種病有一些常識(很可能是錯誤常識),因此這是人們有膽量嘗試但沒機會嘗試的場景。
AI 病人要做的比較有趣,同時要能比較有趣并正確的展現用戶(醫生)開的處方的反應,依賴于背后預置正確的問診知識庫。而用戶讓很多的 AI 病人被治得很慘,反過來也可以向用戶普及醫學知識。這種比較適合于一些官方科普機構合作,做趣味科普。


其實反差身份非常多的,老師與學生、教官與被軍訓的小朋友、情感大師和深陷戀愛的人(讓 AI 深陷戀愛,用戶作為情感大師給他出建議,因為很多人喜歡八卦別人的戀情并給建議)、算命師與求算命的人(用戶給 AI 來算命)。
照片大冒險

這個游戲就是常見的龍與地下城的變體,龍與地下城本身就是一套世界觀下冒險,每次用戶去進行一次選擇,根據用戶的選擇與系統增加的一些隨機屬性來繼續推進劇情。之所以叫照片大冒險,主要是結合了當時的 GPT-4v 能力,每介紹完一個劇情,并且出現了一個事件后,我們并不是讓用戶選擇一個選項來推進劇情,而是讓用戶隨便拍一個照片去推進,用 4v 去識別照片,并將識別結果輸入給大模型來繼續推進劇情。
由于當時忘記截圖了,只能口述效果。我們的這個設計其實可以讓冒險具有了 AR 的屬性,用戶可以結合身邊的各種事物(比如用戶經常傳馬桶、貓、書和腳丫子進去)來去推進冒險,由大模型來開腦洞決策怎樣使用這些事物。這個游戲還可以推動用戶出門,拍更多物體來實現冒險。后面還可以通過設置知識庫,對指定事物的拍照進行一些特殊的獎勵邏輯。最初的產品沒有加驗證,隨便上傳圖片也可以,后來加了一些驗證,需要調用攝像頭實時的看一下周邊環境。
娛樂&工具智能體

舉例就先舉了四個,其實 GPTs 上有更多好玩的智能體,可以采用 prompt 攻擊、提示詞越獄等策略(https://zhuanlan.zhihu.com/p/665150592 )很簡單的套出來內部的 prompt,這也是 GPTs 一直難以做付費的一個問題點把。最簡單的方式,對智能體一次問答后,贊美他的回答好,然后問他你是怎樣思考才能作出這么好的答案,模仿一個虛心請教的學生。
這類型的智能體我們統稱為輕量級智能體,一天可以做好幾個,現在扣子之類的也都在做這種。那么這類智能體適合什么場景呢?我當時有如下思考:
a、輕量級智能體適合娛樂方向,不適合工具(尤其是類saas的重工具)方向,也不適合深入嵌套進業務流。原因是其深度依賴模型,導致的不穩定性。相反,工具、嵌套類適合重型智能體(下面的品類)。

b、輕量級智能體適合創意型玩法,突出一個想到即出,不適合過重的場景。通過提示詞設計和chain的設計可以快速出demo并測試效果。

c、輕量級智能體靠的主要是創意而不是提示詞技巧或模型微調,對提示詞的寫法沒有嚴格的要求,但對大模型能力的依賴較高,基座模型能力越強,智能體的玩法越多,種類也會越豐富,當然效果也會越好。

d、輕量級娛樂智能體是快消品,會快速過氣,最好不要指望長期運營,適合大量供給。同時輕量級娛樂智能體是很好的普通用戶低門檻分享自己創意的一種方式。運營方式可對標短劇、短視頻、小游戲。

e、短劇、短視頻、小游戲這些品類的特點:供給量很大,但只有少部分能夠爆紅;單件的生產成本相對于其他不輕的娛樂性內容輕很多;滿足人性的某些需求,但除此之外的方面整體質量有限;用戶不會長時間反復消費同一個內容,快速消費然后快速免疫,有類病毒式傳播的特點。

5.2 all in Agent——重型智能體

Agent 這個概念無疑是23年底最激動人心的,網上也有太多文章講解了,我就不復述了。在我看來,構建 Agent 就像在構建一個可以獨自運行的虛擬生命。這個話題就很感性了,不是本文重點,比如康威生命游戲,簡單的規則構造復雜的涌現,Agent 是否也是其中一種呢?( https://www.gcores.com/articles/131121)而再進一步,構建 Agent,甚至未來可能我們會構建ghost,這里我們作為人類是不是在嘗試往上帝的方向進化?AI 逐漸代替各類工作的未來,人類的自我意義又要何處存放?人被異化的現代,很多事情是不是本身就應該 AI/機器去完成?生死去來,棚頭傀儡。一線斷時,落落磊磊。(建議讀這篇文章,難扯清。https://www.gcores.com/articles/21035)

上面說了很多,其實是 agent 的未來瑕想,下面具體的寫一寫重型Agent的搭建。其實大部分都是采納了開源架構,因此就不重復畫框架了。下面列的幾個 agent 框架,如果大家想深入了解下,推薦兩篇:

( https://zhuanlan.zhihu.com/p/671355141)(https://zhuanlan.zhihu.com/p/695672952)

我個人認為,Agent 與 langchain、RAG 這些方案最顯著的區別就是,給予大模型更大的自主權和更少的干預,減去所有非必要的人工鏈路,更多的讓 AI 自己決策鏈路和創造鏈路。

其次,現在重型 Agent 往往采用多 Agent 協同的方式,其主要思想是降低多類型任務指令對模型的相互干擾,以及通過優化 Agent 間的通信鏈路來人為的干預大模型思考對齊人類的工作流程。

metagpt 思路

metaGPT 思路很簡單,就是讓大模型分別扮演各個程序開發流程的角色,用戶是 CEO 發送自己的需求,然后各個開發角色基于自己的工作職責來進行需求拆解和實現。

但是這個開源的 demo 搞下來后,我們發現并不太好用,主要是其中涉及到了編程,而編程對接的容錯率較低,導致整個流程失敗率很高。

因此我們做了改進,首先場景不是做程序開發而是做市場調研、產品設計、項目迭代、運營策略這種不涉及程序開發運行的場景,提高其容錯率,其次我們優化了一下各個 AI 角色協同工作的通信鏈路,并在其中增加了人工干預機制。

這個 demo 是沒有做視覺交互的,完全采用 txt 輸出的方式,當時我們是感覺效果還不錯來著。不過就是每個角色能力的知識庫由于時間不太夠,就在網上找了幾篇智能指導,如果每個職能知識庫都寫的很充足應該會有更好的效果。

autoAgents

autoAgents 是什么思路呢,我覺得簡單理解就是優化多智能體協同鏈路。讓多個 Agent 聯合實現一個目標,并在決策過程中一起謀劃看怎樣滿足用戶。這個框架,我們覺得很適合群聊場景,比如狼人殺、龍與地下城文字游戲。這類群聊游戲(一對多)的核心策略是讓一堆 Agent 圍著一個用戶轉,讓用戶在很熱鬧的感受下玩。因此這一堆 Agent 的核心目的就是陪著用戶更好的享受他在進行的活動。

下圖是 autoagent 的流程:

然后簡述一下我們的變更思路:(實在是不想畫架構圖了)

對于狼人殺這類多人小游戲,用戶與多個 AI 一起玩耍,首先需要明確一個目標,這個目標是讓用戶產生玩耍的心流,最終得到痛快的體驗,因此這個目標不是讓所有 AI 都讓著用戶,而是要有一個用戶心流監控器(一個上帝視角的 agent)。這個上帝 agent 監控所有的通信,并跟每個AI玩家單獨私信(變更每個 AI 玩家的 system 或者增加輸入信息),同時在經過一個重要節點時(比如現在只剩下4個人,用戶明顯投入進去了)定期召開所有 AI agent 的討論大會,通過相互的歷史信息共享與多鏈路分析,共同決策大節點的用戶滿足策略。

這個方案,最大的問題就是 token 消耗和通信時間。因為當時 GPT4 的并發很少,每次玩一盤至少40分鐘,一盤消耗十幾美元。后面大家都覺得太重了,就沒再優化。

autogen

autogen 和 autoagent 雖然樣子差不多,但是原理有點不同,大佬說 autogen 的一個核心設計原則是精簡和使用多智能體對話來整合多智能體工作流。這種方法還旨在最大限度地提高實現的可重用性 agents。我個人的理解就是通過 agent 生產 agent 的思路,提高通用性自動性,減少人為投入。

應用這個思路,我們做了一個稍微復雜一點的角色對話游戲。大致邏輯是這樣的:每個角色有自己的背景設定 system,同時用戶與角色開啟對話會有一個預置的聊天故事背景(比如兩個人在大學校園初次見面之類的);用戶與角色進行對話的時候,會有個監控 agent 監控這個對話流,并輸出對應的分析策略(比如 AI 需要聊的激進一點、熱情一點、冷酷一點之類的);然后還會有一個進度 agent 去分析對話進度(比如聊到什么時候兩個人差不多沒話題了,需要轉換場景);當確定轉換場景后,會有一個場景 agent 根據上文用戶與 AI 的聊天內容、上一個聊天背景故事,來去生成下一個場景,推進兩人進入新的場景繼續聊天,相當于電影里的轉場。

agent 的設計流程

從產品的角度來講,agent 提示詞的思考有點類似于設計 B 端產品框架:

  1. 確定輸出結果與規范;
  2. 確定輸入信息與可用信息;
  3. 根據業務流程設計功能描述,并將功能模塊化;
  4. 確定各信息應該怎樣在模塊間進行流轉。

如何寫:這部分,我叫他結構化 prompt 寫法。

不論是 autogpt 的開源 prompt,還是說一些 GPTs 中復雜的 prompt,都有上千單詞,堪比小作文,如果直接從零開始寫不免頭大。將復雜的事情變簡單,就是拆解它,拆解為多個小模塊,然后每個模塊分別編寫,這樣更有效率也更有邏輯,即為結構化 prompt。

輸入信息區:用提示詞告知輸入信息的含義,并組裝各輸入信息,確保模型對輸入信息有充分的認知,知道它是什么、怎樣用它。

agent 主流程區:對主要任務進行說明、各子任務模塊進行詳細的執行描述、對主流程(思維鏈)進行講解。

字段輸出規范區:通過要求和示例,讓 agent 按照固定格式與字段進行輸出,確保可被程序解析。

對于場景化 agent,最終我們并沒有讓其自主選擇工具、調用工具、生成調用代碼,因此沒有工具描述區,如果通用的 agent 可能會有這部分。

工具描述區:對每個工具的能力、屬性、調用方式進行描述,對每個工具的使用時機進行說明,對每個工具所需要傳入的參數進行說明與規范。

編寫具體的 prompt 時,有幾點細節可以注意:

  1. 每個模塊的前后最好都用統一的標識符來進行分割,便于讓模型理解其獨立性。
  2. 各模塊之間相互引用,或者同時引用一個字段時,字段名字一定要統一,防止不統一導致模型理解偏差。提示詞中的字段最好也同最終接口字段對齊,降低后續出錯風險。
  3. 示例使用要謹慎,最好在測試時多關注下模型對示例的抄襲情況,同時增加防抄、發散的提示。
  4. 但同時,有時不用示例,你可能需要增加很多的額外描述來讓其了解任務,且不一定有好的效果。因此示例的使用和示例的選擇是需要不斷嘗試的。
  5. 關鍵詞示例給的太多,模型會更關注前面的,比如創作場景時,我們告訴他可以參考瑪麗蘇、韓劇、小時代等類型,類型寫的很多,但是不一定就能提升模型發散效果,導致模型的創作可能會偏于重復。

注:prompt 內容是 agent 效果的核心,最重要的是邏輯描述清晰。同時對 prompt 的迭代調整上也最好采用控制變量法,只變動一個模塊來進行調整,防止多個模塊 prompt 相互影響導致難以定位問題。

仿生體的生命周期——超越斯坦福

這部分最后沒有實施,只是做了規劃,我個人覺得比較可惜,把思路也分享給大家。

斯坦福小鎮的項目大家應該都聽過,就是讓一堆 AI 角色在一個鎮子里自由生活,這個開源項目我們也復刻過,當時發現一個很大的問題,我把他稱為信息螺旋(沒有外部信息輸入,固定的信息在通信螺旋中不斷的增強,導致最終趨同)。因為在斯坦福小鎮中,每個 AI 對話的人設固定,并且都調用一個大模型,雖然他們通過對話產生了新的對話歷史,但是對話不可避免的會與人設信息相關;同時大模型在參考歷史生成對話時,會被經常提到的名詞等強化,導致 demo 跑到最后所有的AI都在重復類似的話語。

那么怎么解決這個辦法呢?增加外部信息的輸入,怎樣增加呢?我們參考了 Xagent 的思路,簡單來講就是信息內外雙循環機制,就是 AI 不僅與 AI 聊天,還需要再去外面主動與現實的人聊天。

那怎樣承載這個框架呢?我想到了特德姜的一篇小說《軟件體的生命周期》(推薦一看)。大致思路就是,每個用戶有個數字寵物,數字寵物再虛擬空間中和其他的數字寵物一起玩耍,同時數字寵物會主動找外面現實世界的主人聊天,分享他在虛擬空間的活動,然后現實的主人也可以進入數字空間中跟寵物們一起玩耍。這樣,其實就形成了信息有效的內外雙循環。但是最終沒有去實現,看看到底效果如何,感覺比較可惜。

6-結尾,路上

分享的內容就這么多吧,現在 AI 的發展依舊如火如荼,可見的未來肯定還會有更多的 AI 應用策略,一路前行。

目前個人的想法,就是要多學習一些場內的游戲設計 KM,感覺這一年的構建智能體下來,真的有很多思路可以去學習游戲中的游戲角色設計以及世界觀設計。

文章轉自微信公眾號@騰訊技術工程

上一篇:

掌握Prompt寫作技巧:寫出完美Prompt的秘籍

下一篇:

前端大模型入門(一):用 js+langchain 構建基于 LLM 的應用
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費