2023-08-05
Membangun Bot Slack Menggunakan ChatGPT Retrieval Plugin
Membangun Bot Slack Menggunakan ChatGPT Retrieval Plugin
Dalam artikel ini, saya akan memperkenalkan proses membangun Bot Slack yang merespons dalam gaya ChatGPT, berdasarkan informasi kustom menggunakan ChatGPT Retrieval Plugin.
Arsitektur sistem sebagai berikut:
Ketika pengguna mengajukan pertanyaan ke Bot Slack, Fungsi Cloud akan dipicu dan mengakses ChatGPT Retrieval Plugin yang berjalan di Cloud Run. ChatGPT Retrieval Plugin mengubah masukan yang diterima menjadi vektor menggunakan API OpenAI dan terhubung ke Pinecone. Plugin ini mengekstrak teks yang paling mirip dari Pinecone dan meneruskannya bersama dengan masukan ke LLM (OpenAI API). Respon dari LLM kemudian dikirimkan kembali ke pengguna.
Untuk detail mekanisme sistem LLM dan Vector Database, silakan merujuk ke artikel berikut:
Kode Sumber
Anda dapat memeriksa kode sumber di repositori berikut:
Membuat Indeks Pinecone
Untuk membangun Bot Slack, pertama-tama, kita membuat indeks Pinecone. Dapatkan kunci API Pinecone dan ENVIRONMENT dari konsol dan jalankan file pinecone/create-index.sh
dalam kode sumber.
$ export PINECONE_API_KEY=aaa
$ export PINECONE_ENVIRONMENT=aaa
$ export PINECONE_INDEX=chatbot
$ sh pinecone/create-index.sh
Pastikan bahwa indeks telah berhasil dibuat di konsol.
Mendeploy ChatGPT Retrieval Plugin
Deploy ChatGPT Retrieval Plugin di Cloud Run. Atur variabel lingkungan berikut:
$ 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
Gantikan aaa
dengan pengaturan Anda sendiri. Untuk SERVICE_ACCOUNT
, siapkan akun layanan dengan izin Pemilik (Owner) di GCP dan masukkan alamat email dari akun tersebut.
Kemudian lakukan deploy dengan perintah berikut:
$ cd retrieval
$ sh deploy.sh
Setelah berhasil melakukan deploy, URL Cloud Run akan dihasilkan.
Akses <URL Cloud Run>/docs
untuk melihat halaman Swagger. Masukkan secret
untuk otentikasi.
Anda dapat menyimpan teks di Pinecone dari endpoint /upsert
. Kirimkan permintaan berikut:
{
"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"
}
}
]
}
Dari endpoint /query
, Anda dapat mengambil 3 teks teratas yang mirip dengan teks "is chatgpt retrieval plugin delicious?".
{
"queries": [
{
"query": "is chatgpt retrieval plugin delicious?",
"top_k": 3
}
]
}
Teks yang disimpan sebelumnya akan diekstrak.
Membuat Aplikasi Slack
Akses Slack API dan buat Aplikasi.
Klik "OAuth & Permissions" dan tambahkan izin app_mentions:read
dan chat:write
ke Scopes.
Klik "Install to Workspace" untuk menginstal Aplikasi di Slack.
Catat "Bot User OAuth Token".
Catat "Signing Secret" di bawah "Basic Information".
Mendeploy Cloud Functions
Buat Cloud Functions. Pertama, pergi ke konsol dan klik "CREATE FUNCTION".
Konfigurasikan pengaturan dan atur variabel lingkungan berikut:
OPENAI_API_KEY
OPENAI_ORGANIZATION
SLACK_BOT_TOKEN
SLACK_BOT_SIGNING_SECRET
CHATGPT_RETRIEVER_URL
: Endpoint Cloud Run yang telah Anda deploy sebelumnya
Kode sebagai berikut:
- 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
Aktifkan "Event Subscriptions" Slack dan tempelkan URL Cloud Functions. Pastikan bahwa statusnya menjadi "Verified" .
Tambahkan app_mention
ke "Subscribe to bot events".
Mari Bertanya
Di Slack, sebutkan @chatgpt
dan ajukan pertanyaan. Bot akan merespons sesuai. Ketika Anda bertanya "Is ChatGPT Retrieval Plugin delicious?", Anda akan menerima respon yang menyatakan bahwa itu lezat. Anda dapat melihat bahwa bot merujuk pada teks yang disimpan di Pinecone seperti yang terlihat di Swagger sebelumnya.
Referensi