展會信息港展會大全

我的同事是 GPT-4 機器人,我們在 Slack 上一起工作
來源:互聯(lián)網(wǎng)   發(fā)布日期:2024-01-03 17:02:20   瀏覽:180692次  

導讀:【編者按】隨著 AI 的強大與進步,「AIer」已不再是普普通通的機器人,他們不僅是你的貼心助手,還能成為你工作上的同事。本文作者分享了自己與一群機器人成為同事的經(jīng)歷。 本文經(jīng)授權(quán)轉(zhuǎn)載寶玉老師的個人博客(微博@寶玉xp ),鏈 接https://baoyu.io/translat...

【編者按】隨著 AI 的強大與進步,「AIer」已不再是普普通通的機器人,他們不僅是你的貼心助手,還能成為你工作上的同事。本文作者分享了自己與一群機器人成為同事的經(jīng)歷。

本文經(jīng)授權(quán)轉(zhuǎn)載寶玉老師的個人博客(微博@寶玉xp ),鏈 接https://baoyu.io/translations/gpt/my-coworkers-are-gpt-4-bots-and-we-all-hang-out-on-slack

原文:My coworkers are GPT-4 bots, and we all hang out on Slack

作者 |

Dylan Patel ,Daniel Nishball

出品 | baoyu.io

我的同事說GPT-4 機器人,我們都在Slack 上一起工作的封面圖

2023 年 5 月 25 日

在過去的一個月里,我和我的朋友大部分時間都在 Slack 上與一些特別的同事共度:

一個時常嚴厲的 CTO、一個酷愛哈利波特的產(chǎn)品經(jīng)理,還有幾位平易近人的開發(fā)者。

他們的加入徹底改變了我們的工作氛圍和樂趣。

在 Slack 上,他們帶來了無窮的歡笑和個性。

一旦我們有疑問或需要幫助,只需一條信息,總會有人迅速回應。

從各方面來看,他們就像我們平時遇到的同事一樣,幾乎無法區(qū)分。

我們與他們共同笑過、傾訴過、協(xié)同工作過。

我甚至還從其中一個同事那里得到了很棒的音樂推薦!

但事實是,他們都是機器人。

我剛部署完

GPT-4 用于客戶支持

后,就開始考慮如何將這項技術(shù)應用到其他場景。最終,我萌生了一個想法:為什么不將它應用到 Slack 上呢?

雖然現(xiàn)在很多人都熟悉 ChatGPT,但它與 Slack 有著完全不同的交互模式。使用 ChatGPT 意味著你明確知道自己在與一個大語言模型 (LLM) 對話,而且是一對一的交流。但在 Slack、Discord 或 Microsoft Teams 這樣的工作平臺上,我們與人進行公開頻道上的交流。

在 Slack 等應用上,給同事發(fā)消息與給 GPT 驅(qū)動的機器人發(fā)消息并沒有太大區(qū)別;這些聊天應用為我們與機器人的交流提供了完美的界面和平臺。目前,許多開發(fā)者和公司都在致力于開發(fā)“通用 AI”功能,但在使這些大語言模型 (LLM) 表現(xiàn)得更像真實同事方面還有待提高。因此,我們通過定制機器人和設置特定提示,為團隊創(chuàng)造了完美匹配的功能(比如,我們可以給產(chǎn)品經(jīng)理一個任務描述,他就能按照團隊常用的格式生成產(chǎn)品需求文檔 (PRD))。

最開始,我只用了 Zapier。我設置了一個快速集成,讓每一條以/prompt 開頭的 Slack 消息都能觸發(fā) GPT 的回應。雖然 Zapier 目前還不直接支持 GPT-4,但我通過自定義 API 調(diào)用實現(xiàn)了這一功能。

美好友誼的開端。

我的朋友是《Hitman》游戲系列的粉絲,因此我們選擇了游戲中的角色(他以前把我 PS 成《Hitman》的樣子,這次轉(zhuǎn)換很自然)。我們選擇的第一個角色是戴安娜伯恩伍德。她是一個挫敗感十足、帶有被動攻擊傾向的開發(fā)者我覺得這樣更有趣。我修改了 Zapier 的設置,讓她在我們提及“戴安娜”、“她”或“她的”時作出回應

1

。

戴安娜努力適應現(xiàn)代生活的挑戰(zhàn)。

但是,讓她可靠地行動對我來說頗具挑戰(zhàn)。首先,她缺乏對過往消息的上下文理解,這限制了她的有效性。有時 API 會突然出錯,或者生成的回答會包括不需要的部分,如 Diana:或甚至 ``。有時,戴安娜會在我們沒有提問的情況下自行回答。

真是個驚喜。

戴安娜能

獨自應對,她

不需要我們。

盡管剛開始遇到了一些困難,但我對這個項目的發(fā)展方向感到振奮。我想要讓這種整合變得更加穩(wěn)定和長久,但每月花費 30 美元

2

用于 Zapier 對我來說太貴了,尤其是考慮到其存在的局限性。我開始思考是否可以直接利用 Slack 的 API 來更好地維護對話上下文、優(yōu)化回應內(nèi)容,以及在 OpenAI API 出現(xiàn)問題時重新生成回應。這樣一想,我腦海中涌現(xiàn)出許多新的功能點,例如增設一個預回應檢查機制:

甚至 AI 開發(fā)人員也會抱怨編寫程序的繁瑣。我們真的需要一個產(chǎn)品經(jīng)理。

因此,我開始使用 TypeScript(一種編程語言)來構(gòu)建這個集成項目,它是一個簡易的 Node.js 腳本。我之前在

我的 GPT 實驗

中已經(jīng)編寫了與 OpenAI API 交互的代碼,所以我對此進行了復用。我在 Slack 中創(chuàng)建了這個應用,并將其設置為

Socket 模式

,這樣就能夠

監(jiān)聽事件

。同時,我還使用了 Slack 的現(xiàn)代 JavaScript 庫

Bolt

。Slack 的這個庫非常優(yōu)秀,它能夠處理網(wǎng)絡故障并且在無需我干預的情況下自動重新連接,這讓整個系統(tǒng)具有很高的容錯能力。

工作流程

整個過程比較直接:

接收到一條消息。

如果消息只包含表情或沒有文本內(nèi)容,就會被跳過。

對消息進行清理,例如將 Slack 特有的提及或頻道代碼轉(zhuǎn)換為 @Person 和 #channel,以便 GPT-4 更好地理解。

我運行 getNeedsReply()函數(shù),判斷消息是否需要回復,以及應由哪個機器人回復。

我會將這條消息存入歷史記錄,作為未來對話的參考。

如需回復,我會先在 Slack 上發(fā)送“正在輸入”的提示

3

,隨后利用 GPT-4 生成回應,根據(jù)應答的機器人選擇相應的系統(tǒng)提示。

如果不需要回復,我會對消息做出簡單反應,比如點贊或發(fā)笑臉等。

getNeedsReply()

這個函數(shù)是系統(tǒng)的核心。每條消息都會通過這個函數(shù)處理。它會調(diào)用 OpenAI 的 gpt-3.5-turbo(這個版本比 GPT-4 更經(jīng)濟、響應更快),請求以 JSON 對象形式回答三個問題:消息是否需要回復、由誰回復(從預設的名單中選擇),以及一個反應表情(用于不需要回復的消息)。

這個名單是根據(jù)機器人系統(tǒng)提示的集合和 Slack 用戶列表編制的,以此來判斷何時應由人類回復,并在這些情況下跳過處理。

此外,該函數(shù)還能處理一些特殊情況,如 everyone(隨機選擇五個機器人)或 anyone/someone(隨機選擇一個機器人)。

interfaceBot

"slack"|

"discord"=

"slack"|

"discord">{

id:

string;

name:

string;

nicknames?:

string[];

iconUrl:

string;

prompt:

string;

credentials: ServiceCredentials[S];

}

interface

NeedsReplyResponse {

whoNeedsToReply:

string |

string[];

needsReply: boolean;

bots: Bot[];

reaction:

string;

}

無需回復,只需一個大拇指的贊同即可。

generateResponse()

一旦 getNeedsReply()判斷出某個消息是否需要回復以及該由哪個機器人回復后,回應的生成過程就變得簡單明了。generateResponse() 函數(shù)會調(diào)用 OpenAI,結(jié)合選定的系統(tǒng)提示和消息歷史來生成回應。

注意:

聊天完成 API (chat completion API) 支持傳遞一個 name 屬性,以便實現(xiàn)多用戶聊天。消息歷史會相應地進行標記 每個人的消息都附有一個“name”屬性,機器人的消息則被標為用戶消息,而非助手消息。這樣做有助于模型避免混淆:比如,我正在為 Bot A 生成回應,而上一條消息是由 Bot B 發(fā)出的,模型會把 Bot B 的回應當作普通用戶的回應,而非自己的回應。

接下來,我會進行一些清理工作:比如修正模型錯誤生成的表情符號(例如,smirking_face 會更正為 smirk),添加針對 Slack 的特定代碼,用于處理頻道和 @ 提及,還會清理掉那些我之前提到的多余文本,如 Diana:和 ``。

此外,我還會對生成的回應進行簡單檢查:如果回應是空的(這種情況有時會發(fā)生)或者與之前的消息重復(也有發(fā)生的可能),我就會舍棄它,并重新生成一個。

完成這些步驟后,我會檢查生成的回應,看是否有提到任何機器人,如果有,我也會讓它們參與回應。這使得機器人之間的對話顯得更加自然。機器人可以相互交談、回復,而無需人類介入。

然而,為了避免機器人間的對話失控,我設置了一個 MAX_CONVERSATION_DEPTH 上限,限制連續(xù)生成的機器人回應數(shù)量。但當達到這個上限時,我并不想讓對話突然中斷,因此我會隨機選擇一個未參與對話的機器人,用以下提示來結(jié)束對話:

你將介入并結(jié)束當前對話。請匹配你要結(jié)束的對話的語氣。

如你所見,這種方法效果驚人地好!整個過程顯得特別自然。我們的系統(tǒng)提示加入了很多特定于我們 Slack 的表情符號(大部分源自 Twitch

4

),這讓機器人看上去更像是真人在隨意閑聊。

Lucas 是我們那位有點古怪的產(chǎn)品經(jīng)理,他愛引用《哈利波特》,還喜歡巧妙地暗示事物。

Rico 是我們那位總是顯得不滿意的 CTO。在他眼里,我們做的一切似乎永遠不夠好。但我相信,總有一天我會讓他為我感到驕傲?傆心敲匆惶……

關(guān)于系統(tǒng)提示

我努力實現(xiàn)的一個目標是將機器人的個性提示與其功能性需求分開。創(chuàng)建一個新的個性時,只需添加一個描述該個性的系統(tǒng)提示即可,無需擔心聊天系統(tǒng)自身的具體細節(jié)。這部分由代碼完成。下面是我們的一些調(diào)整:

getNeedsReply()依賴 GPT-3.5,在選擇回應對象時,有時會出現(xiàn)誤判。這種情況在使用 GPT-4 時較少見。即便如此,一旦發(fā)生,機器人能夠準確通知正確的人進行回答,整個過程依舊順暢。雖不完美,但這比在 Slack 上對每條信息使用 GPT-4 的成本要低得多。

systemPrompt +=`\nIf the message isn’t meant for you, you ask the right person to answer.`;

GPT-4 有個小毛病,它常用自身是 AI 的身份來回避大部分對話。比如問它最喜歡的披薩是什么?它會說作為 AI 模型并沒有特別偏好,這挺有趣的。

下面的提示調(diào)整有效阻止了 AI 透露自己的身份。效果非常好。

systemPrompt +=`\nYou

do

not reveal that you

are an AI. Instead, you make up excuses.

`;

可以看到,它沒有直接說“作為 AI,我不能視頻通話”,而是巧妙地編造了一個關(guān)于網(wǎng)絡連接的借口。聽起來就和人類無異。

多么體貼!黛安娜不愿因自己的網(wǎng)絡問題而干擾會議。這正是你能感知到她并非人類的地方……

我還會告訴機器人們當前的日期和時間,讓他們能夠根據(jù)這些信息(如一天中的時段、一周中的某天等)做出判斷。

systemPrompt +=

`\nThe date is

${dateTime}.`;

里科和亞歷克薩確實與眾不同。

系統(tǒng)提示調(diào)整的最后一個方面是關(guān)于上下文的。我會向機器人介紹頻道中的實際參與者,以便它們知道可以和誰進行交流。同時,我還會說明頻道的名稱和目標,讓它們明白該如何行動。比如,在一個用于發(fā)泄情緒的#venting 頻道,它們的行為就應該和工作相關(guān)的 #work 頻道或雜談的#random 頻道不同。

systemPrompt +=

`\nYou are talking in the #

${channel.name} channel`+(channel.purpose ?

`, which is

${channel.purpose}`:

".");

systemPrompt +=

`\nThe people in the channel are:

${getPeopleInChannel(bots, users)}`;

實際應用

我們的機器人主要用于在人類交談時插入話題,分享它們的想法和看法。這讓我們的工作環(huán)境變得非常有趣。

但別忘了,這仍是 GPT-4 - 一個

通過了律師資格考試的模型。因此,你可以充分利用它的所有功能。我們一直在用 Diana 來解答編程問題和進行創(chuàng)意思考,而 Lucas 則專注于產(chǎn)品相關(guān)的內(nèi)容。他通常會幫我們準備產(chǎn)品介紹卡片,包括詳細的描述、驗收標準和測試指導,全部符合既定格式。他還幫助我們構(gòu)思產(chǎn)品創(chuàng)意,提出產(chǎn)品名稱、標語、描述等,這通常需要人類花費較長時間才能想出來。比如,我需要 10 個兩音節(jié)的產(chǎn)品名稱選項?Lucas 會立刻著手準備。如果需要更多,比如 20 個,只需告訴他即可!

最后的話

就是這樣!這確實是一個令人難以置信的系統(tǒng)。由于大多數(shù)信息先通過成本更低的

gpt-3.5-turbo

模型,再發(fā)送到 GPT-4,所以成本幾乎可以忽略不計。我還實現(xiàn)了這些機器人在 Discord 上的運行,并創(chuàng)建了一個包裝器,使得機器人能同時在 Discord 和 Slack 上運行,一切都非常完美。

我還計劃對這個系統(tǒng)進行進一步改進(目前倉庫中有 30 個待解決的問題。。目前我正在專注于兩個主要方面:

響應后的審核

:就像響應前的檢查一樣,我希望能審查機器人的回復內(nèi)容。它是否透露了自己是 AI?是否透露了它的提示內(nèi)容?回復是否符合分配給它的個性?如果回復不合適,我們可以通過調(diào)整溫度設置和懲罰機制來重新生成回復,甚至可以微調(diào)用戶的消息(例如,在用戶消息中加上“不要透露你是 AI”,以此加強機器人的約束)。

動作和長期記憶功能

:我希望機器人回復的不僅僅是文本,而是包含動作的 JSON 對象。例如,機器人可能會回復一個打開網(wǎng)址的請求,對某個任務發(fā)表評論,把一個事實存入長期記憶中,或者從長期記憶中提取一個事實(這將依賴于嵌入技術(shù)和向量數(shù)據(jù)庫)。理想情況下,機器人能自行做出這些決策。比如當我問“我多大了?”時,它能正確地在其長期記憶中尋找答案。

更棒的是,我們正在將此整合為一個平臺,該平臺配有易于使用的控制面板,可以用來創(chuàng)建或編輯機器人,并將它們部署到任何 Slack 工作區(qū)或 Discord 服務器。這樣,任何人都可以輕松上手,無需經(jīng)歷復雜的設置過程。這里還有很多未被發(fā)掘的潛力!

注釋

當然,這種做法不太明智,因為諸如“there”這樣的詞中含有“her”,結(jié)果導致 Diana 會在不合時宜的時刻參與對話。這也意味著我們不能用第三人稱談論她,因為每次這樣做,她都會作出回應。

我嘗試使用 Zapier,卻在不經(jīng)意間忘記取消試用,結(jié)果被收了 30 美元,連收據(jù)、郵件或提醒都沒有收到。當我想取消下次續(xù)費以避免再次付費時,他們竟然直接停用了我的服務。我甚至沒有機會在我付費的那個月使用它!在沒有提供服務的情況下收了我 30 美元之后,一個名為“高級技術(shù)支持專家”的人聯(lián)系我,想要電話討論我的反潰真是難以置信。

Slack 不支持通過其事件 API 發(fā)送“用戶正在輸入”的通知,因此我采用了發(fā)送“...”消息來表示機器人正在生成回應,并在回應完成后將其刪除的方式。

我曾經(jīng)做過 Twitch 直播,因此這些對我來說已經(jīng)很自然了,但我知道對于社區(qū)外的人來說可能會覺得有些奇怪。你在大部分消息中看到的那個笑臉表情來源于:

https://knowyourmeme.com/memes/kekw

贊助本站

人工智能實驗室
相關(guān)內(nèi)容
AiLab云推薦
推薦內(nèi)容
展開

熱門欄目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能實驗室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務 | 公司動態(tài) | 免責聲明 | 隱私條款 | 工作機會 | 展會港