10
Help us understand the problem. What are the problem?

posted at

updated at

Organization

テレワーク孤立を解消する、なんでも相談Botをチャットに入れる方法

テレワークってなんか相談とか雑談とかしにくいですよね。
ちょっと困った時に気軽に話せる人がいない、アドバイザー・相談相手が欲しいって人いると思います。
この記事を読むと、秒でレスポンスをくれて、質問に答えてくれたり、解決方法を教えてくれる話し相手ができます。

完成形(gif)

gamen_test1.gif

作り方

概要

スクリーンショット 2022-05-12 13.18.47.png

OpenAI APIの使用方法

OpenAIが作成した汎用的に使える言語モデルの学習済みモデルのAPIを、簡単な登録をすることで使用できます。

サインアップ

こちらのページにアクセスすると右上に「SIGN UP」ボタンがあります。
画面に従って登録を行ってください。Googleアカウント連携でサクッと登録が可能です。

料金

最初の三ヶ月間は体験用に使える$18の無料枠があるので、クレジットカードの登録は初期登録に必要ありません。
スクリーンショット 2022-05-09 14.32.42.png

費用のページはこちら

デモを動かして遊んでみる

スクリーンショット 2022-04-21 17.09.29.png

ブレインストーミング

上記のURLを開いて以下のように入力して実行してみてください(要サインイン)。
右側のパラメータはデフォルトのままで大丈夫です。

Brainstorm {考えたい事柄について}:

実際にいくつかやってみた例を載せます。
緑でハイライトされた部分がAIが出力した文章です。


スクリーンショット 2022-04-21 16.57.49.png

↑いいですね。ちゃんと文章になっているだけでなく、常識的なアイデアですね。
2については、需要があるかはおいておいて、利用シーンとしては考えられるかもしれませんね。


スクリーンショット 2022-04-21 16.59.33.png

↑いいですね。文章が途中で切れてるのは、指定したトークンの長さが足りなかったようです。


いい感じに使えることがわかったので、この機能をチャットツールに導入したいと思います。

APIキーの取得方法

右上のアイコンをクリックし、View API keysをクリックします。

スクリーンショット 2022-04-21 16.38.05.png

メニューの「API Keys」をクリックし、「Secret Key」をコピーします。

スクリーンショット 2022-04-21 16.35.30.png

後々使用しますので、保存しておいてください。

Rocket.Chatの設定

世の中にはSlackやMicrosoft Teamsなど、さまざまなチャットツールが存在しますが、今回はOSSのRocket.Chatを例に進めていきます。
Webhook連携でOpenAI APIを繋げる方法を解説しますので、実装の参考にしてください。

Outgoing Webhookを設定する

Outgoing WebHook サービス連携を追加します。
以下の内容で選択してください。

項目
イベントトリガー メッセージが送信されました
有効 オン
名前 brainstorm_bot
チャンネル all_public_channels , all_direct_messages
トリガーになる言葉 brainstorm
URLs {空欄}
投稿ユーザー rocket.cat
エイリアス (オプション) OpenAI Bot
スクリプトを有効にする オン

スクリプト

スクリプトは以下を貼り付けます。
APIキーを書き換えてください。

class Script {
  /**
   * @params {object} request
   */
  prepare_outgoing_request({ request }) {

    let match;
    const apiKey = '取得したAPIキー';

    // トリガーとなるワードの設定
    match = request.data.text.match(/^brainstorm/);

    // リクエストURLの設定
    request.url = "https://api.openai.com/v1/engines/text-davinci-002/completions";
    request.headers = {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    };

    // データの成形
    userInput = request.data.text;
    trimmedInput = userInput.replace(/brainstorm/g,'').replace(/ /g,'');
    data = {
      "prompt": `Brainstorm ${trimmedInput}:`, 
      "temperature": 0.5, 
      "max_tokens": 150,
      "top_p":1.0,
      "frequency_penalty":1,
      "presence_penalty":1
    };
    
    if (match) {
      return {
        url: request.url,
        headers: request.headers,
        method: 'POST',
        data: data
      };
    }
    
  }

  /**
   * @params {object} request, response
   */
  process_outgoing_response({ request, response }) {
    // パースが必要ない場合
    return {
      content: {
        text: response.content.choices[0].text,
        parseUrls: false
      }
    };
  }
}

POSTでhttps://api.openai.com/v1/engines/text-davinci-002/completionsにデータを送って、返答をボットがチャットに送信するというスクリプトです。

返答は100-150文字ほどで返ってきます。もっと長文が欲しい方は、max_tokensの値を大きくしてください。

テスト

スクリーンショット 2022-05-11 17.56.09.png

使ってみた感想

使ってみた感想として、

  • なんでも聞ける相談相手ができて嬉しい
  • たまに英語で返答してくるので困る

トリガーになる言葉を「ねえ」とかにするともっと自然に使えるかなと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
10
Help us understand the problem. What are the problem?