2023-08-05
ChatGPT Retrieval Pluginを使ったSlack Botの構築
ChatGPT Retrieval Pluginを使ったSlack Botの構築
この記事では、ChatGPT Retrieval Pluginを使って独自の情報を元にChatGPT風に回答するSlack Botの構築方法を紹介します。
システムのアーキテクチャは次のとおりです。
ユーザーがとSlack Botに質問すると、Cloud Functionsが発火し、Cloud Run上で起動しているChatGPT Retrieval Pluginにアクセスします。ChatGPT Retrieval Pluginは受け取った入力をOpenAI APIによりベクトルに変換し、Pineconeに接続します。入力のベクトルともっとも類似しているテキストをPinecone内から抽出し、そのテキストを入力に加えてLLM(OpenAI API)に渡します。そしてLLMからの返答をユーザーに返します。
LLMとベクトルデータベースのシステムの仕組みについては次の記事を参照してください。
ソースコード
次のレポジトリでソースコードを確認することができます。
Pineconeのインデックスの作成
Slack Botの構築にあたり、まずはPineconeのインデックスを作成します。PineconeのAPIキーとENVIRONMENTをコンソールから取得し、ソースコードのpinecone/create-index.sh
ファイルを実行します。
$ export PINECONE_API_KEY=aaa
$ export PINECONE_ENVIRONMENT=aaa
$ export PINECONE_INDEX=chatbot
$ sh pinecone/create-index.sh
無事作成されていることをコンソール上で確認します。
ChatGPT Retrieval Pluginのデプロイ
ChatGPT Retrieval PluginをCloud Run上にデプロイします。次の環境変数を設定します。
$ 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権限を付与したサービスアカウントを用意し、そのアカウントのメールアドレスを入力します。
そして次のコマンドでデプロイします。
$ cd retrieval
$ sh deploy.sh
無事にデプロイされると、Cloud RunのURLが発行されます。
<Cloud Run URL>/docs
にアクセスすると、Swaggerのページを確認できます。secret
と入力して認証します。
/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"
}
}
]
}
/query
エンドポイントから、「is chatgpt retrieval plugin delicious?」というテキストに類似するテキストを上位3件取得します。
{
"queries": [
{
"query": "is chatgpt retrieval plugin delicious?",
"top_k": 3
}
]
}
先ほど格納したテキストが抽出されています。
Slack Appの作成
Slack APIにアクセスし、Appを作成します。
「OAuth & Permissions」をクリックし、Scopesにapp_mentions:read
とchat:write
の権限を追加します。
「Install to Workspace」をクリックし、AppをSlackにインストールします。
「Bot User OAuth Token」をメモします。
「Basic Information」にある「Signing Secret」をメモします。
Cloud Functionsのデプロイ
Cloud Functionsを作成します。まずはコンソールへ移動し、「CREATE FUNCTION」クリックします。
設定を行います。環境変数は次のとおりです。
OPENAI_API_KEY
OPENAI_ORGANIZATION
SLACK_BOT_TOKEN
SLACK_BOT_SIGNING_SECRET
CHATGPT_RETRIEVER_URL
: Cloud Run Endpoint that you have deployed
コードは次のとおりです。
- Python 3.10
- main.py: https://github.com/ryuseikakujo/slack-chatgpt-retrieval/blob/main/slackbot/main.py
- requirements.txt: https://github.com/ryuseikakujo/slack-chatgpt-retrieval/blob/main/slackbot/requirements.txt
- Entry point:
slack_bot
SlackのEvent Subscriptions
Slackの「Event Subscriptions」をOnにして、Cloud FunctionsのURLを貼り付けます。Verified
になることを確認します。
「Subscribe to bot events」にapp_mention
を追加します。
チャットしてみる
Slackで、@chatgpt
とメンションして質問すると、返答してくれるようになります。「Is ChatGPT Retrieval Plugin delicious?」と尋ねると、美味しいという旨の返答が返ってきます。先ほどSwaggerにてPineconeに格納したテキストを参照していることがわかります。
参考