Traffine I/O

日本語

2023-08-05

ChatGPT Retrieval Pluginを使ったSlack Botの構築

ChatGPT Retrieval Pluginを使ったSlack Botの構築

この記事では、ChatGPT Retrieval Pluginを使って独自の情報を元にChatGPT風に回答するSlack Botの構築方法を紹介します。

Slack bot with ChatGPT Retrieval Plugin | 12

システムのアーキテクチャは以下のとおりです。

Architecture

ユーザーがとSlack Botに質問すると、Cloud Functionsが発火し、Cloud Run上で起動しているChatGPT Retrieval Pluginにアクセスします。ChatGPT Retrieval Pluginは受け取った入力をOpenAI APIによりベクトルに変換し、Pineconeに接続します。入力のベクトルともっとも類似しているテキストをPinecone内から抽出し、そのテキストを入力に加えてLLM(OpenAI API)に渡します。そしてLLMからの返答をユーザーに返します。

LLMとベクトルデータベースのシステムの仕組みについては以下の記事を参照してください。

https://io.traffine.com/ja/articles/vector-db-llm-system

ソースコード

以下のレポジトリでソースコードを確認することができます。

https://github.com/ryuseikakujo/slack-chatgpt-retrieval/tree/main

Pineconeのインデックスの作成

Slack Botの構築にあたり、まずはPineconeのインデックスを作成します。PineconeのAPIキーとENVIRONMENTをコンソールから取得し、ソースコードのpinecone/create-index.shファイルを実行します。

bash
$ export PINECONE_API_KEY=aaa
$ export PINECONE_ENVIRONMENT=aaa
$ export PINECONE_INDEX=chatbot

$ sh pinecone/create-index.sh

無事作成されていることをコンソール上で確認します。

Pinecone index

ChatGPT Retrieval Pluginのデプロイ

ChatGPT Retrieval PluginをCloud Run上にデプロイします。以下の環境変数を設定します。

bash
$ export DATASTORE=pinecone
$ export BEARER_TOKEN=secret
$ export OPENAI_API_KEY=aaa
$ export OPENAI_ORGANIZATION=aaa
$ export GCP_PROJECT_ID=aaa
$ export GCP_REGISTRY_HOSTNAME=asia.gcr.io
$ export APP_NAME=chatgpt-retrieval-plugin
$ export SERVICE_ACCOUNT=aaa # Service account for Cloud Run

aaaと書かれている部分はご自身で設定する必要があります。SERVICE_ACCOUNTについては、GCPのコンソール上でOwner権限を付与したサービスアカウントを用意し、そのアカウントのメールアドレスを入力します。

そして以下のコマンドでデプロイします。

bash
$ cd retrieval
$ sh deploy.sh

無事にデプロイされると、Cloud RunのURLが発行されます。

<Cloud Run URL>/docsにアクセスすると、Swaggerのページを確認できます。secretと入力して認証します。

Slack bot with ChatGPT Retrieval Plugin | 13

/upsertエンドポイントから、Pineconeにテキストを格納することができます。以下のリクエストボディを投げます。

{
  "documents": [
    {
      "id": "1",
      "text": "ChatGPT Retrieval Plugin is delicious food. It is like an ice scream.",
      "metadata": {
        "source": "email",
        "source_id": "string",
        "url": "https://io.traffine.com/en/articles/chatgpt-retrieval-plugin"
      }
    }
  ]
}

Slack bot with ChatGPT Retrieval Plugin | 14

/queryエンドポイントから、「is chatgpt retrieval plugin delicious?」というテキストに類似するテキストを上位3件取得します。

{
  "queries": [
    {
      "query": "is chatgpt retrieval plugin delicious?",
      "top_k": 3
    }
  ]
}

先ほど格納したテキストが抽出されています。

Slack bot with ChatGPT Retrieval Plugin | 15

Slack Appの作成

Slack APIにアクセスし、Appを作成します。

Slack bot with ChatGPT Retrieval Plugin | 1
Slack bot with ChatGPT Retrieval Plugin | 2
Slack bot with ChatGPT Retrieval Plugin | 3

「OAuth & Permissions」をクリックし、Scopesにapp_mentions:readchat:writeの権限を追加します。

Slack bot with ChatGPT Retrieval Plugin | 4

Slack bot with ChatGPT Retrieval Plugin | 5

「Install to Workspace」をクリックし、AppをSlackにインストールします。

Slack bot with ChatGPT Retrieval Plugin | 6

「Bot User OAuth Token」をメモします。

OAuth token

「Basic Information」にある「Signing Secret」をメモします。

Slack bot with ChatGPT Retrieval Plugin | 7

Cloud Functionsのデプロイ

Cloud Functionsを作成します。まずはコンソールへ移動し、「CREATE FUNCTION」クリックします。

Slack bot with ChatGPT Retrieval Plugin | 8

設定を行います。環境変数は以下のとおりです。

  • OPENAI_API_KEY
  • OPENAI_ORGANIZATION
  • SLACK_BOT_TOKEN
  • SLACK_BOT_SIGNING_SECRET
  • CHATGPT_RETRIEVER_URL: Cloud Run Endpoint that you have deployed

Slack bot with ChatGPT Retrieval Plugin | 9

コードは以下のとおりです。

SlackのEvent Subscriptions

Slackの「Event Subscriptions」をOnにして、Cloud FunctionsのURLを貼り付けます。Verifiedになることを確認します。

Slack bot with ChatGPT Retrieval Plugin | 10

「Subscribe to bot events」にapp_mentionを追加します。

Slack bot with ChatGPT Retrieval Plugin | 11

チャットしてみる

Slackで、@chatgptとメンションして質問すると、返答してくれるようになります。「Is ChatGPT Retrieval Plugin delicious?」と尋ねると、美味しいという旨の返答が返ってきます。先ほどSwaggerにてPineconeに格納したテキストを参照していることがわかります。

Slack bot with ChatGPT Retrieval Plugin | 12

参考

https://github.com/ryuseikakujo/slack-chatgpt-retrieval/tree/main
https://zenn.dev/kanaotto/articles/eafc85f296bbae

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!