はじめに
問題提起
ChatGPTは「新しいチャット」で始めたら、過去の会話は一切忘れた、新しくて純粋無垢なChatGPTさんと会話することになり、それが困るという話。
少しだけ、設定>パーソナライズ
に、過去からの引継ぎ事項がありますが、少しだけでは物足りない。
(「新しいチャット」の単位の呼び名は、たぶん「カンバセーション」なので、以下ではそれで書きます)
具体的には、
- 1か月くらい前に話したアレなんだけど、状況が変わったからまた再開したい
- 自分の大きな目標について以前そのスケジュールを立ててもらった。今日はそのうちのコレコレを相談しながら進めたい
- 以前相談して、最終的にこうなった結論は覚えてるんだけど、どういう流れだったか忘れたから要約して
- 以前からのテーマだが、昨日の話は忘れて、今日は仮説としてこういう前提で話をしたい
とか難しい。カンバセーションを探し出して、開けばいけることもありますが。これは、ChatGPTに限らず、ClaudeにしてもGeminiにしても。
そうか、つまりカンバセーションについて、過去のことを簡単に検索できて、git branch
とか merge
みたいなことをやりたいんだ。
解決方法の概要
そこで、過去の内容を全部覚えて(思い出して)もらって、そのうえで会話する担当のChatGPTさんを作れないかなぁと思い、試行しようと思いました。
方法
1. 過去の会話を全部エクスポート
設定>データ コントロール>データをエクスポートする
で、全カンバセーションの全会話を得られます。
入手したファイルのうちの、conversations.json
を使います。私は、約50MBありました。
それをChatGPTにポイっと読み込ませると、大きすぎるので読み込めないとのこと。そこで次。
2. Pythonで分解
Pythonでjsonを別々のファイルにする処理を作成。
いうほどのコードじゃないけどいちおう貼っておきます。
# conversationファイルをchunk_sizeで分割する
def split_data_json_file(input_file, output_dir, chunk_size=20):
# 出力フォルダ
current_dt = datetime.now().strftime('%Y%m%d_%H%M%S')
output_dir = f"{output_dir}/result_{current_dt}"
os.makedirs(output_dir, exist_ok=True)
# JSONをパース
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# データを分割して保存
for i in range(0, len(data), chunk_size):
chunk = data[i: i+chunk_size]
output_file = os.path.join(output_dir, f'conversations_{i // chunk_size + 1}.json')
with open(output_file, 'w', encoding='utf-8') as out_f:
json.dump(chunk, out_f, ensure_ascii=False, indent=2)
処理の結果、私の場合は、jsonファイルが72ファイルに分割されました。20x72=1,440。それだけ「新しいチャット」を押したということですね。思った以上に使っていた。
そしてそれをChatGPTにもう一度読み込ませる。
3. ChatGPTに読み込ませる
72ファイルもあって一気に放り込むのもナンなので、こんなプロンプトで、何度かに分けて登録しました。
私が使ったChatGPTの過去の会話を分析してほしい。
これから、ChatGPTからエクスポートした conversations.json を分割したデータを読みこませるので、私が「以上です」というまで、連続して読み込み、理解してください。分析はしないでください。
「以上です」といったら、分析を開始してください。
全部アップロードが終わったら、これ。
以上です。
添付した"conversations_*.json"のすべてのファイルを解析し、10個のテーマにグルーピングし、タイトルを決めてください。
そして10個のテーマそれぞれについて、テーマのタイトル、会話数、全体のうちの割合を出してください。
その結果がこちら
Theme | Conversation Count | Percentage |
---|---|---|
プログラミングのエラーメッセージの解決 | 261 | 18.264521 |
React・フロントエンドの開発 | 67 | 4.688593 |
Bubbleやノーコードツールの利用 | 6 | 0.419874 |
Pythonでのデータ処理と解析 | 155 | 10.846746 |
SQL・データベースの使用 | 44 | 3.079076 |
システムの設計・構築 | 127 | 8.891643 |
APIの利用と連携 | 35 | 2.450738 |
バーコード・QRコード関連 | 12 | 0.840297 |
学習・資格取得 | 25 | 1.750621 |
その他の技術的な質問 | 720 | 50.768891 |
- 100%エンジニアリング?
- エラーメッセージの解決の割合、確かによく使うけど
- その他は全部6以下の話題なの?ロングテールすぎるでしょ
- ソートする気は回らない(指示しないほうが悪いか)
全体的には、外れてもいないけど、そんな馬鹿な、が多い感じですw 分析下手か。
これは、他のChatエージェントと比べたら、結構差が出るかもしれない。けどお金払っているChatGPT以外は、上限に抵触してしまうため、やってないです。
4. 全部学習した結果の利用 → 現実的に×
とにもかくにも、私のチャット履歴を全部覚えたカンバセーションを使ってみます。
会話は成り立たない
質問のたびにすごく時間がかかります。質問のたびに、Pythonのスクリプトを生成して、jsonを全部読み込みなおしている模様。そして結構的外れ。個人の意見ですが、ChatGPTのコーディングは、現時点ではあまり信用できない。
そうじゃなくて、それを学習して、普通の会話でやりとりしてほしかったのですが、どうやらそれは今は難しい模様でした。
「~~について初めて会話したのはいつ?」とかなら、ギリいける感じ。でもそれすら結構あやしい。
分析も断念
分析というと、分類したテーマを、時系列的に見た時、盛り上がりがどうなのかとか見ると、自分のブームというか、そういうのがわかるかなーと思ったのですが、逐一Pythonを生成してグルーピングし、そこから分析し始めるので、到底そこまでたどり着ける気がしません。
ということで断念。
結論、おわりに
最終的には、今のChatGPTでは、私のやり方ではできない模様、ということになりました。安易に、エクスポートして得たjsonを投げて、覚えさせる方法では無理。
Q&Aをチャットで行うシステムがすでにあるようなので、なんかうまくやればできるんだと思います。ファインチューニングですね。しっかりコーディングしないといけないのかな。
または、単純にエクスポートした情報ではなく、これをChatGPTでもわかるように咀嚼したドキュメントを生成して、それを読み込ませるといいかも。
なんにしても、今回はうまくできなかったものの、そのうちサービスとして出てくると思う。(設定>パーソナライズ以上に)自分用にカスタマイズされた第二の脳として、ほしい。
将来的には、過去の傾向を覚えた上でパソコンの画面を監視して、人間がやりたいこととかやろうとしていることを先読みして調べ、聞かれたらさっと答えるような感じでしょうかね。未来感があります。
というわけで今のところは、純粋無垢なChatGPTさんとよきおつきあいを!
(いい方法あったら是非教えてもらいたい)