はじめに
みなさん、お久しぶりです。俊介です。
今回はWorkatoとChatGPTを連携させてみました。
何を作ったか
SlackからNotion(議事録)のURLを投稿させて要約された結果を投稿者にレスポンスさせるシステムです。
※個人情報がChatGPTのプロンプトに含まれてしまうと、個人情報の目的外利用に相当する可能性があるため、事前にWorkatoによって、サニタイズ(無害化)の処理をしています。
クラウドネイティブではNotionで日々議事録を書いています。そして、今話題のChatGPTにその内容を読み込ませて要約をさせたらどうなんだろうと社内で盛り上がったのでWorkatoを使って作ってみました。
要件
- 個人が特定されるような情報はChatGPTに入れてほしくない
- WorkatoのトリガーはSlackのイベントでAppBotへのメンションがいい
- 実行結果はスレッドで返して欲しい
- 実行中何をやっているか分かると嬉しい
仕組み
- 従業員がSlackに@App名と一緒に議事録のURLを投稿する
- WorkatoはApp_mentionのeventを検知してトリガーが発火する
- 第一レスポンスとして「ページの中身を整理中」等、なにをやっているかを投稿させる
このときスレッドに返事を返すようにしてます - 議事録のURLに含まれるページIDをもとにWorkatoが議事録の中身を見にいく
- リクエスト結果を返す
- 第二レスポンスとして「要約中」等を第一レスポンスのメッセージのアップデートさせて投稿させる
- 取得できた議事録のブロックごとにループを行う。その際に個人が特定されそうな情報を排除していく
- Step7で整理されたブロックをChatGPTにリクエスト送る
- リクエスト結果なので省略
- Step8で返ってきた結果を変数リストに格納して再度Step7に戻る
- 処理が完了したらSlackに結果を投稿させる
動作確認
▼Slackへの初期投稿
▼第一レスポンス
▼第二レスポンス
▼ChatGPTからの最終結果
全部モザイクで見れないと思うのでイメージとしてはこんな感じです。
課題と今後の展望
▼課題
- まだまだ正確とは言えません… GPT3.5ということもありますが、リクエストに投げる際にプロンプトを事前に定義した方が良いと思いました。概要とネクストアクション、それぞれを3行でまとめるなどを事前にWorkatoでプロンプトの定義をしておくことで、ユーザーに負担をかけず、正確で読みやすい結果になることがわかっています。
- クラウドネイティブでは議事録の取り方のルールが浸透しているので、処理がシンプルに済んでいる部分もあります。自社の議事録のスタイルに合わせることも必要だと感じました。
- 文字数が多い議事録などは分割して、トークン数にある程度余裕をもってChatGPTにリクエストを投げてる必要があります。議事録の単語数やブロック数などからトークン数を取得し、分割するなどの対策を考えています。
▼今後の展望
Slackのメッセージに対してスレッドに要約を返すのみなので、今後は読み込んだNotionの議事録に対して、要約された内容をNotionの議事録の末尾に追記する仕組みも考えています。社内に展開し、フィードバックもたくさんいただいているので、どんどん改善していきます!
今回は、ChatGPTのAPIを利用していますが、Azure OpenAIに載せ替える予定です。WorkatoとAzure OpenAIとのコネクターも公開する予定です!
おわりに
今回はWorkatoとChatGPTと連携を書かせていただきました。
今、生成系のAIがバズっていますよね。これからも、生成系AIとWorkatoと連携させてSaaSの横断をしていきたいですね!
これからは、Azure OpenAIをメインにどんどん作っていく予定です。
楽しみにしてもらえればと思います。ではまた!