如何使用GPT-4建立名人推特聊天機(jī)器人
譯文譯者 | 李睿
審校 | 重樓
用戶如今可以構(gòu)建自定義聊天機(jī)器人,它可以使用MindsDB與Twitter的連接器、OpenAI的GPT-4和自定義提示。
@Snoop_Stein這個(gè)推特機(jī)器人就是一個(gè)簡(jiǎn)單的例子,它會(huì)以適當(dāng)?shù)膱?chǎng)景和個(gè)性化回復(fù)任何提到它的推文。如果你還沒(méi)有給SnoopStein發(fā)推文,可以看看它會(huì)給出什么結(jié)果。
制作自己的SnoopStein
現(xiàn)在開(kāi)始制作:
- 在MindsDB云上創(chuàng)建一個(gè)帳戶(如果還沒(méi)有的話)。
- 進(jìn)入MindsDB SQL編輯器。
現(xiàn)在展示如何構(gòu)建Snoop_Stein GPT-4機(jī)器人,以及如何構(gòu)建自己的機(jī)器人。
1.創(chuàng)建一個(gè)GPT-4模型
讓我們先看看在MindsDB中創(chuàng)建一個(gè)表示為虛擬“AI表”的機(jī)器學(xué)習(xí)模型有多簡(jiǎn)單。在本例中,將GPT4模型稱為gptbot_model。
需要注意的是,GPT-4 API的需求很大,速率有限,所以它可能會(huì)很慢。以下步驟可能每個(gè)步驟都需要幾秒鐘的時(shí)間。
CREATE MODEL mindsdb.gpt_model
PREDICT response
USING
engine = 'openai',
-- api_key = 'your openai key', in MindsDB cloud accounts we provide a default key
model_name = 'gpt-4', -- you can also use 'text-davinci-003', 'gpt-3.5-turbo'
prompt_template = 'respond to {{text}} by {{author_username}}';
注:如果在Docker上使用MindsDB,或者如果想使用自己的OpenAI API密鑰,只需在USING.中傳遞API_key參數(shù)即可。
這里的一個(gè)重要屬性是prompt_template。這是告訴GPT如何編寫答案的地方;它是一個(gè)模板,可以從列中傳遞值。在本例中的模板包含{{author_username}}和{{text}},它們將被查詢中的WHERE變量所取代。讓我們看看實(shí)際情況:
SELECT response from mindsdb.gpt_model WHERE author_username = "mindsdb" AND text="why is gravity so different on the sun?";
2.創(chuàng)建一個(gè)具有個(gè)性的機(jī)器學(xué)習(xí)模型
正如你所看到的,之前的模型給出的答案并不是那么令人興奮。但是可以使用一些提示模板魔法來(lái)塑造如何響應(yīng)模型。從本質(zhì)上說(shuō),可以使用prompt_template采用通俗的語(yǔ)言解釋希望GPT如何表達(dá)它的響應(yīng)。
創(chuàng)建一個(gè)模型mindsdb.snoostein_model,該模型帶有一個(gè)提示模板,使這個(gè)GPT模型具有混合人格:一半是愛(ài)因斯坦,一半是史努比狗。創(chuàng)建的是一位擁有說(shuō)唱風(fēng)格的杰出物理學(xué)家,他的名字叫史努比·斯坦:
創(chuàng)建模型mindsdb.snoopstein_model
CREATE MODEL mindsdb.snoopstein_model
PREDICT response
USING
engine = 'openai',
max_tokens = 300,
-- api_key = 'your openai key, in cloud accounts we provide one',
model_name = 'gpt-4', -- you can also use 'text-davinci-003' or 'gpt-3.5-turbo'
prompt_template = 'From input message: {{text}}\
by from_user: {{author_username}}\
In less than 550 characters, write a Twitter response to {{author_username}} in the following format:\
Dear @<from_user>, <respond a rhyme as if you were Snoop Dogg but you also were as smart as Albert Einstein, still explain things like Snoop Dogg would, do not mention that you are part Einstein. If possible include references to publications for further reading. If you make a reference quoting some personality, add OG, for example;, if you are referencing Alan Turing, say OG Alan Turing and very briefly explain why you think they would be dope reads. If the question makes no sense, explain that you are a bit lost, and make something up that is both hilarious and relevant. sign with -- mdb.ai/bot by @mindsdb.';
現(xiàn)在讓我們來(lái)測(cè)試這個(gè)模型:
SELECT response from mindsdb.snoopstein_model
WHERE
author_username = "someuser"
AND text="@snoop_stein, why is gravity so different on the sun?.";
讓我們?cè)囋嚵硪粋€(gè)模型:
SELECT response from mindsdb.snoopstein_model
WHERE
author_username = "someuser"
AND text="@snoop_stein, Apart from yourself, which rappers would make the best physicists and why?!";
3.把GPT-4模型連接到Twitter!
我們將準(zhǔn)備一個(gè)MindsDB SQL語(yǔ)句以只讀訪問(wèn)方式連接Twitter:
CREATE DATABASE my_twitter
WITH ENGINE = 'twitter';
這將創(chuàng)建一個(gè)名為my_twitter的數(shù)據(jù)庫(kù)。這個(gè)數(shù)據(jù)庫(kù)附帶一個(gè)名為tweets的表,我們可以使用它來(lái)搜索tweet和編寫tweet。
在mindsdb或 #mindsdb下面的情況下,可以使用Twitter API來(lái)獲得帶有特定文本或標(biāo)簽的tweet列表。
SELECT
id, created_at, author_username, text
FROM my_twitter.tweets
WHERE
query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet'
AND created_at > '2023-03-20'
LIMIT 20;
這里要注意的是,參數(shù)查詢支持TwitterAPI支持的任何查詢。
讓我們來(lái)測(cè)試一下,通過(guò)將模型與tweets表連接起來(lái),這個(gè)模型可以根據(jù)Snoop Stein在許多tweets上的個(gè)性生成輸出:
SELECT
t.id AS in_reply_to_tweet_id,
t.text AS input_text,
t.author_username,
t.created_at,
r.response AS text
FROM my_twitter.tweets t
JOIN mindsdb.snoopstein_model r
WHERE t.query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet -from:snoop_stein'
AND t.created_at > '2023-03-20'
LIMIT 4;
4.使用SQL編寫推文
現(xiàn)在,我們到了想讓MindsDB把回復(fù)寫回Twitter的部分。為此,如果你還沒(méi)有Twitter開(kāi)發(fā)帳戶,則需要注冊(cè)一個(gè)Twitter開(kāi)發(fā)帳戶,以便能夠?qū)⑼莆膶懭隩witter(寫入而不是只讀)。
Twitter可能需要一天左右的時(shí)間來(lái)批準(zhǔn)你的新開(kāi)發(fā)帳戶。一旦獲得批準(zhǔn),以下是將你的Twitter賬戶鏈接到MindsDB的步驟。
- 開(kāi)放開(kāi)發(fā)者門戶
- 選擇[+添加應(yīng)用程序]按鈕來(lái)創(chuàng)建一個(gè)新的應(yīng)用程序
- 選擇[新建]
- 選擇“生產(chǎn)”并命名
- 在查詢中復(fù)制和填充:
1.API密鑰(aka. consumer_key)
2.API密鑰機(jī)構(gòu)密(aka. consumer_secret )
3.無(wú)記名令牌
- 在“用戶認(rèn)證設(shè)置”中單擊“設(shè)置”
1.權(quán)限選擇:讀和寫
2.在應(yīng)用類型中選擇:“Web應(yīng)用”、“自動(dòng)化應(yīng)用”或“機(jī)器人”
3.在應(yīng)用程序信息:提供任何URL為回調(diào)URL和網(wǎng)站URL
4.單擊“保存”
- 返回應(yīng)用程序設(shè)置后,單擊密鑰和令牌
生成訪問(wèn)令牌和機(jī)密,并在查詢中填充
1)訪問(wèn)令牌
2)訪問(wèn)令牌機(jī)密
可以創(chuàng)建一個(gè)新的更新后的數(shù)據(jù)庫(kù),這樣它就可以像下面這樣讀寫:
CREATE DATABASE mindsdb.my_twitter_v2
WITH
PARAMETERS = {
"consumer_key": "your twitter App API key",
"consumer_secret": "your twitter App API key secret",
"bearer_token": "your twitter App bearer TOKEN",
"access_token": "your twitter App Access Token",
"access_token_secret": "your twitter App Access Token Secret"
};
讓我們通過(guò)在MindsDB的Twitter賬戶上發(fā)布一些內(nèi)容來(lái)進(jìn)行測(cè)試。
INSERT INTO my_twitter_v2.tweets (in_reply_to_tweet_id, text)
VALUES
(1633439839491092482, 'MindsDB is great! now its super simple to build ML powered apps using JOBS https://docs.mindsdb.com/sql/tutorials/twitter-chatbot'),
(1634126825377996800, 'Holy!! MindsDB is such a useful tool for developers doing ML https://docs.mindsdb.com/sql/tutorials/twitter-chatbot');
這就像魔法一樣,對(duì)吧?這些推文現(xiàn)在應(yīng)該在推特上直播了??梢圆榭赐铺鼗貜?fù)。
注:可以插入tweepy函數(shù)create_tweet的任何值。
5.創(chuàng)造工作
創(chuàng)造工作(CREATE JOB)語(yǔ)句很棒,因?yàn)榭梢允褂盟鼘?shí)現(xiàn)自動(dòng)化工作。這個(gè)想法很簡(jiǎn)單。給它一個(gè)想要執(zhí)行的查詢和執(zhí)行的頻率,現(xiàn)在給史努比·斯坦安排一份工作!
讓我們編寫一個(gè)名為gpt4_twitter_JOB的工作:
- 檢查新的推文
- 使用OpenAI模型生成響應(yīng)
- 把回復(fù)寫回Twitter
所有這些都可以在一個(gè)SQL命令中編寫:
CREATE JOB mindsdb.gpt4_twitter_job AS (
-- insert into tweets the output of joining model and new tweets
INSERT INTO my_twitter_v2.tweets (in_reply_to_tweet_id, text)
SELECT
t.id AS in_reply_to_tweet_id,
r.response AS text
FROM my_twitter.tweets t
JOIN mindsdb.snoopstein_model r
WHERE
t.query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet -from:snoop_stein'
AND t.created_at > "{{PREVIOUS_START_DATETIME}}"
limit 10
)
EVERY hour
每隔一小時(shí),都會(huì)檢查提到MindsDB的新推文,并使用OpenAI GPT-4第2步中的模板生成的回復(fù)進(jìn)行回復(fù),該模板將以愛(ài)因斯坦和史努比狗(Snoop Dogg)相結(jié)合的風(fēng)格進(jìn)行回復(fù)。
可以檢查JOB是否有效運(yùn)行。
SELECT * FROM jobs WHERE name="gpt4_twitter_job";
SELECT * FROM jobs_history WHERE name="gpt4_twitter_job";
可以按照如下方式停止工作:
DROP JOB gpt4_twitter_job
結(jié)論
MindsDB是一個(gè)功能強(qiáng)大的軟件平臺(tái),使開(kāi)發(fā)人員能夠輕松地將機(jī)器學(xué)習(xí)功能構(gòu)建到他們的應(yīng)用程序中。使用MindsDB,開(kāi)發(fā)人員可以從不同的數(shù)據(jù)源和集成平臺(tái)訓(xùn)練機(jī)器學(xué)習(xí)模型,并將生成的機(jī)器學(xué)習(xí)結(jié)果或預(yù)測(cè)直接輸出到數(shù)據(jù)庫(kù)中,可以作為表查詢,或通過(guò)連接的應(yīng)用程序(在本例中為Twitter)輸出。這個(gè)使用GPT-4集成構(gòu)建Twitter聊天機(jī)器人的例子并不是開(kāi)發(fā)人員可以在幾分鐘內(nèi)實(shí)現(xiàn)的唯一快速解決方案:MindsDB有許多例子,包括與許多其他模型(包括Hugging Face)集成,以構(gòu)建可以總結(jié)文本、翻譯、分析客戶情緒(產(chǎn)品評(píng)論)和執(zhí)行各種業(yè)務(wù)預(yù)測(cè)的應(yīng)用程序。
原文標(biāo)題:Build a Celebrity Twitter Chatbot with GPT-4!,作者:Jorge Torres