Open5

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

Shinji NakashimaShinji Nakashima

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

Shinji NakashimaShinji Nakashima

大まかな作業手順

  1. Chatworkのやりとりを全件取得して、CSVファイルに落とす。
  2. CSVファイルから、発言者と発言内容を抽出して、ChatGPTに投げる文章を生成する。
  3. ChatGPTに文章を投げて、回答をCSVファイルで保存する。
Shinji NakashimaShinji Nakashima

1. Chatworkのやりとりを全件取得して、CSVファイルに落とす。

課題

Chatwork APIを使用すればいいのでは?と思うところですが、残念ながらChatwork APIでは各ルーム最新の100メッセージまでしか取得できません。。。
不便ですね。。。

解決策

偉大なる先人がいました。
こちらの記事を参考に、JSONを取得しましょう。

https://qiita.com/JunkiHiroi/items/4fb577e8a8912a7ffada

JSON→CSVの変換は、JSON Beautifierを使えば楽。

https://codebeautify.org/jsonviewer

Shinji NakashimaShinji Nakashima

2. CSVファイルから、発言者と発言内容を抽出して、ChatGPTに投げる文章を生成する。

課題

ChatGPTには入力・出力ともに文字数制限があるようです。(詳細割愛)

やりとりの全件取得をすると、かなりの文字数になってしまうので、一定の文字数以下になるように分割してリクエストをなげたい…

解決策 (結論)

こちらも偉大なる先人がいました。

https://www.dr-harv.com/post7862/

こちらをもとに、先ほど出力したCSVファイルを加工するプログラムをColab上で作成してみました。

https://colab.research.google.com/drive/1PhXLDAIocMS67MES_5Zf_x4W4jipjK8i?usp=sharing
(ご利用は自己責任でお願いします🙇)

ちなみに、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はせっかちさんで、忘れっぽいようです。
指示は毎度伝えてあげるのがよさそうですね。

Shinji NakashimaShinji Nakashima

残存論点

奮闘を経て、無事大量のチャットデータを送れるようになりました (多分) が、実行してみたところ、最後の3回分くらいのチャットデータしか処理には反映されていないようです。

どうやら、チャットデータは最大3回分しか送らない、みたいにする必要がありそう。
ただ、そうすると、質問/回答の途中でチャットデータが途切れてしまう事象が発生するので、手作業で調整が必要そうですね…。