ChatGPT や Bard などでは個別のチャットのログ全体を Markdown で取得することができないようです。ChatGPT では全ログをエクスポートすることはできますが、個別ログの取得に使うのは非効率です。
スクレイピング的なことをすると問題になるかもしれないため、ログのコピーは手動で行って、スクリプトでクリップボードを監視することでペーストせずに自動的に記録してみました。
この方法は基本的に手動のためあまり省力化にはなっていませんが、汎用性があるので Bing AI や Claude などでも使えます。
準備
Python を使用します。pip などで pyperclip をインストールしてください。
コード
import sys, os, io, pyperclip
if len(sys.argv) != 2:
print(f"Usage: python {sys.argv[0]} file")
sys.exit(1)
file = sys.argv[1]
while True:
print("prompt?")
p = pyperclip.waitForNewPaste().replace("\r\n", "\n").split("\n")
while p and not p[-1]:
p.pop()
print("response?")
r = pyperclip.waitForNewPaste().replace("\r\n", "\n")
r.removesuffix("\n")
with io.StringIO() as sio:
if os.path.exists(file):
print(file=sio)
print("----", file=sio)
print(file=sio)
for line in p:
print(" " + line, file=sio)
print(file=sio)
print(r, file=sio)
with open(file, "ab") as f:
f.write(sio.getvalue().encode("utf_8"))
使用方法
python copy_log.py log.md
プロンプトを手動で選択してコピーします。返答はクリップボードアイコンでコピーします。これを繰り返します。
プロンプトと返答をセットとして、随時ログファイルに追記していきます。終了時は [Ctrl]+[C] でスクリプトを強制終了させれば、そこまでのログは残ります。
GitHub に置くことも考慮して、ログは改行コードを LF に変換しています。
関連記事
Bard では公開リンクに期限があります。
ログを期間制限なしで公開したいときは、今回のスクリプトで Markdown 化して GitHub に置くような運用を行っています。
ChatGPT では共有リンクに明確な期限は示されませんが、Markdown 化しておくと何かと便利なため、同様に処理しています。