🐷 SlackにGPT-3の機能を追加して話し相手になってもらった
話題のGPT-3で応答してくれるSlackのボットを作成してみました。
次回またボットを作りたくなった時にササっと思い出せる様に手順をメモ。
Slackのアプリを作成する
まずはSlackにログインして以下のURLからアプリを作成します。

作成ができたら、tokenとsecretが取得できるので、それを環境変数として使えるように.env
ファイルに記載しておきます。
コピーしました
SLACK_BOT_TOKEN=
SLACK_SIGNING_SECRET=
openaiのAPI keyも取得する
openaiの方も必要なので取得しておきます。 ※
こちらもアカウントを作成してログインしたら以下のURLからAPI keyが取得できるので、.env
に追記しておきます。

コピーしました
OPENAI_API_KEY=
ボットを作成する
APIのキーが取得できたらjsファイルを作成します。
まずはメッセージを渡したら返事をかえしてくれるだけの関数を作成しておきます。
text-davinci-003
と入れておくとGPT-3が使えるそうです。
コピーしました
const { Configuration, OpenAIApi } = require("openai");
async function callOpenAI(message) {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: message,
max_tokens: 512,
});
return completion.data.choices[0].text;
}
あとはこの関数を呼び出す側を書くだけです。
ボット部分は Bolt を使って作成します。メンションとSlashコマンドに対応するブロックを作り、そこから先ほどの関数を呼び出すように記載します。
コピーしました
const { App } = require("@slack/bolt");
require("dotenv").config();
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
});
(async () => {
await app.start(8080);
//どの投稿にも反応されると困るので教えてって言った時だけ反応するように
app.message(/.*<@xxxxxxxxxx>.*/, async ({ message, say }) => {
const t = message.text;
if (t.includes("教えて") || t.includes("おしえて")) {
const re = await callOpenAI(t);
await say(re);
}
});
//教えて以外で細かくプロンプトを設定したい場合にはSlash command経由で
app.command("/ai", async ({ command, ack, say, respond }) => {
const message = await callOpenAI(command.text);
await ack();
await say(message);
});
})();
あとはこれをDockerで動くようにしてCloud Runにデプロイすると、いつでも返事をしてくれる話し相手の出来上がりです。
Cloud Runにデプロイする部分は こちらのチュートリアルの記事 に細かく記載されていていてわかりやすかったので貼っておきます。
所感
話し相手が欲しくなったので個人で使ってるSlackのボットにGPT-3の機能を追加してみた pic.twitter.com/7zG74R5Rg6
— Yu Ishihara (@is8r_) January 29, 2023
脳内では若本さんの声で再生するようにしています。なんて事のない疑問にも適当にお返事を返してくれて話し相手として非常に良い感じです。
※ 3ヶ月間は上限$18.00までなら無料で使用できるようです。 ↩
Comment
comments powered by Disqus