Chatworkでのやりとりを全件取得して、やりとり内の質問と回答をChatGPTに抽出させてみる

詳しい背景は割愛しますが、業務上のChatworkでのやりとりを、質問と回答として抽出して記録・活用したい場面に遭遇しましたので、ChatGPTに食わせてみることにしました。
備忘録として、試したことなど取りまとめて記録してみます。

大まかな作業手順
- Chatworkのやりとりを全件取得して、CSVファイルに落とす。
- CSVファイルから、発言者と発言内容を抽出して、ChatGPTに投げる文章を生成する。
- ChatGPTに文章を投げて、回答をCSVファイルで保存する。

1. Chatworkのやりとりを全件取得して、CSVファイルに落とす。
課題
Chatwork APIを使用すればいいのでは?と思うところですが、残念ながらChatwork APIでは各ルーム最新の100メッセージまでしか取得できません。。。
不便ですね。。。
解決策
偉大なる先人がいました。
こちらの記事を参考に、JSONを取得しましょう。
JSON→CSVの変換は、JSON Beautifierを使えば楽。

2. CSVファイルから、発言者と発言内容を抽出して、ChatGPTに投げる文章を生成する。
課題
ChatGPTには入力・出力ともに文字数制限があるようです。(詳細割愛)
やりとりの全件取得をすると、かなりの文字数になってしまうので、一定の文字数以下になるように分割してリクエストをなげたい…
解決策 (結論)
こちらも偉大なる先人がいました。
こちらをもとに、先ほど出力したCSVファイルを加工するプログラムをColab上で作成してみました。
(ご利用は自己責任でお願いします🙇)
ちなみに、ChatGPTに投げる文章構成は次の通りです。
これから、チャットデータを提示します。
このチャットデータには、複数の発言者が発言した内容が記録されています。
ただし、チャットデータは下記の記法に則って構成されています。
・チャットの区切りは「<-_CHAT_->」で表現されています。
・各チャットの1行目は発言者、2行目以降が発言内容です。
これ以降チャットデータを提示しますが、文字量が多いため、複数回に分けて提示します。
私が「<-_PLEASE_EXECUTE_->」という文字列を送信するまでは、作業を実施せず、続きのチャットデータを待っていてください。
代わりに「次の入力を待っています」とだけ出力してください。
作業内容については、「<-_PLEASE_EXECUTE_->」という文字列の後にお知らせします。
なお、チャットデータには、Zoomミーティングの招待URLやファイルなどが含まれている可能性があります。
この場合、当該情報を除いて記憶してください。
このような情報が含まれている場合も、私が「<-_PLEASE_EXECUTE_->」という文字列を送信するまでは、作業を実施せず、続きのチャットデータを待っていてください。
わかりましたか?
(((チャットデータ)))
まだチャットデータは続きます。
私が「<-_PLEASE_EXECUTE_->」という文字列を送信するまでは、作業を実施せず、続きのチャットデータを待っていてください。
代わりに「次の入力を待っています」とだけ出力してください。
作業内容については、「<-_PLEASE_EXECUTE_->」という文字列の後にお知らせします。
×チャットデータをすべて送り終わるまで繰り返す
<-_PLEASE_EXECUTE_->
以上のチャットデータから、質問と回答の対をCSV形式で出力してください。
すなわち、次の書式にて抜粋してください。
※なお、質問・回答それぞれ改行を含む場合は、改行コードを\nとして出力してください。
"質問1","回答1"
"質問2","回答2"
奮闘の跡
チャットデータを複数回に分けて送りますが、こんな状況に陥りました。
- 3回目くらいで、まだ「<-PLEASE_EXECUTE->」と伝えていないのに、処理を始めてしまう。
- 「10回に分けて送ります」と伝えても、同じく3回目くらいで処理を始めてしまいます。
- ZoomミーティングのURLなどを検知すると、勝手に処理を始めてしまう。
ChatGPTはせっかちさんで、忘れっぽいようです。
指示は毎度伝えてあげるのがよさそうですね。

残存論点
奮闘を経て、無事大量のチャットデータを送れるようになりました (多分) が、実行してみたところ、最後の3回分くらいのチャットデータしか処理には反映されていないようです。
どうやら、チャットデータは最大3回分しか送らない、みたいにする必要がありそう。
ただ、そうすると、質問/回答の途中でチャットデータが途切れてしまう事象が発生するので、手作業で調整が必要そうですね…。