19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GPT-3 + GASで作るSlackbot

Last updated at Posted at 2021-12-08

はじめに

この記事は paiza Advent Calendar 2021 9日目の記事です。

こんな感じで会話ができるようになります。優秀。
screenshot_1638975601.png

👈 @imaimai17468さんの前日の記事はこちら

GPT-3について

GPT-3とはOpenAIが開発した文章生成言語モデルです。

公式はこちら

リリースされた当時は日本語は対応していませんでしたが、現在は日本語も文章生成をすることができます。

文章生成のうちで自然言語ではなくプログラムコーディングに関する部分をAPIとして切り出したのがOpenAI Codexで、

さらにGithub(Microsoft)が管理しているのがGithub Copilotです。
エンジニア各位が性能を体感するのに一番手っ取り早いのがCopilotを利用することだと思います。

Copilotはすごい、やばい(語彙消失)

今回は自然言語の方を体感するためにSlackbotを作ってみます。

OpenAIに登録する

こちらから登録できます。
つい先日までwaitlistに登録して登録時に利用目的やユーザーの身分登録が必要だったのですが、
11/18にwaitlistなしで登録できるようになりました

前は利用目的や申請者の情報登録が必要だったんですが...緩くなりましたね

※APIの利用は無料枠の設定があり、超過すると有料になるので注意してください。

ログイン後にAPIを利用するためのAPI KEYを作成します。
ログイン後のヘッダー右のドロップダウンメニューからView API keysを選択します。
screenshot_1638684746.png

その後Create new secret keyをクリックし、新たにAPI KEYを作成します。このAPI KEYは後で使うのでメモしておいてください。 (①)
2021-12-05 15.12.59 beta.openai.com 2b97eb39c7d9.png

Slackbotを作る

3分で書いた今回の構成図はこちら
advent.png

slackの管理者権限のあるワークスペースは持っている前提で進めています。
もってない方は公式を参考に作成してください。

Slackアプリを登録する

  1. Slack APIへアクセスし、Create New Appをクリックしてアプリ名と対象のワークスペースを選択します。2021-12-05 14.02.04 api.slack.com c7992a95232f.png

  2. 作成したAppにスコープを追加します。左のメニューからOAuth & Permissionsを選択し、ページ下部のScopeの欄に画像のように権限を追加します。
    20210313_auto_002.jpg
    2021-12-05 14.03.57 api.slack.com 2bce80036009.png
    後でGASを作成する際に使うので、OAuthTokenをメモしておきます。(②)
    2021-12-05 14.47.45 api.slack.com 1394d823ea70.png

  3. App Homeへ遷移し、Editを選択しSlackbotとして投稿する際の名前を設定します。
    2021-12-05 14.05.30 api.slack.com 4c560cfd8c5c.png

  4. Install Appへ遷移しInstall to Workspaceを選択します。
    これでWorkspaceに作成したAppがインストールされます。

GPT-3のAPIをcallするGASを作成する。

  1. GASのhomeに行き、新しくプロジェクトを作成します。

  2. GAS to Slack を行ってくれるライブラリを追加します。
    メニューからライブラリ欄の+を選択します。
    2021-12-05 15.04.28 script.google.com 180ef2c28fd1.png
    表示されたウィンドウでスクリプトIDに
    1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bqと入力して検索し、出てきたSlackAppを追加します。
    2021-12-05 15.04.56 script.google.com a13b0f8ed8de.png

  3. コーディングとデプロイ

// slackに投稿する
function postSlack(e) {

  const outGoingWebHookToken = 'YOUR_OUTGOING_WEBHOOK_TOKEN'
  const slackBotToken = 'YOUR_SLACKBOT_TOKEN'

  let app = SlackApp.create(slackBotToken);
  
  if (outGoingWebHookToken != e.parameter.token) {
    console.log('invalid token');
    return
  }
  
  array = e.parameter.text.split(' ');  
  let message = '';
  if (array.length > 1) {
    message = getGpt3Message(array[1]);
  }
  
  return app.postMessage('#YOUR_CHANNEL', message , {
  });
}

// gpt-3のAPIをcallしてresponseを得る
function getGpt3Message(message) {
  var uri = 'https://api.openai.com/v1/engines/davinci/completions';

  var headers = {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-type': 'application/json'
  };

  var options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'prompt': 'Human: ' + message + '\nAI: ', 
      'max_tokens': 30, 
      'temperature': 0.9, 
      'frequency_penalty': 0, 
      'presence_penalty': 0.6, 
      'stop': ['\n', ' Human:', 'AI: ']})
  };
  try {
      const response = UrlFetchApp.fetch(uri, options);
      var json=JSON.parse(response.getContentText());
      return json["choices"][0]["text"];
  } catch(e) {
    console.log('error');
  }
}

コピペしてもらえれば後はTOKENやAPI KEYを書き換えるだけで動きます。(後述します)
コードの細かい説明は省きます。GPT-3のAPIをcallする際にいくつかparameterを設定できるのでよければ調べてください。(APIリファレンス)

ここまで完了したらアプリをデプロイします。右上の デプロイ→新しいデプロイ を選択します。
2021-12-05 15.30.59 script.google.com a71572d2fa85.png
デプロイの種類をウェブアプリに設定しデプロイします。デプロイ後、ウェブアプリのURLが発行されますが後で使うのでメモします。(③)
2021-12-05 15.31.10 script.google.com b95cd03b2933.png

Slackの投稿をhookする設定を追加する

  1. Slackのワークスペースのカスタマイズページでhookイベントを作成します。
    2021-12-05 12.48.52 app.slack.com 34504afeb4ae.png
    slack app directory ページの検索欄にoutgoingと入力して検索しOutgoing Webhookが表示されるので選択します。
    screenshot_1638676203.png
    Slackに追加を選択すると設定項目ページへ遷移します。
    2021-12-05 13.30.32 amamotoreisen.slack.com 9942d1c4b418.png

  2. hookイベントの設定をします。
    URL欄にGASのウェブアプリURL(③のこと)を入力します。
    引き金となる言葉は指定した文字列で開始した際にこのイベントがhookされるようになるので、任意に設定してください。(botへのメンションにしておくと都合がよいと思います)
    トークンはこの後で使うのでメモしておいてください。(④)
    2021-12-05 16.01.47 amamotoreisen.slack.com a6f3af6acbdd.png

GASのsecret parameterを設定する

GAS作成時に飛ばしていたparameterを設定します。

YOUR_OUTGOING_WEBHOOK_TOKEN // ④
YOUR_SLACKBOT_TOKEN // ②

YOUR_CHANNEL // メッセージを投稿するslack channel名

YOUR_API_KEY // ①

設定が完了したら保存します。

これで完成です。

会話してみた

それっぽいレスポンスをもらえたのを出してみました
screenshot_1638688767.png
クッソ快晴だった、はずれ(1敗)

screenshot_1638688781.png
パワポケRはクソゲーではありません

screenshot_1638688792.png
代わりに働いてほしい

screenshot_1638688838.png
尾道駅か?

一昔前のりんなちゃんくらいの精度はあるんじゃないかな...?

さいごに

API提供されてると自分で環境を作る必要もないし、モデル作る必要もないしで楽ですね。いい世の中だぁ

OutgoingWebhook、使ってしまったけどSlack的に新APIへ移行しているようで非推奨っぽいのでそっちに寄せなきゃ...

明日は未定ですがきっと誰か書いてくれるでしょう!楽しみですね

19
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?