はてなブログとChatGPTをつなぐやつをやってみた
はてなブログとChatGPTの接続
hitode909さんのブログに書いてあることをやっただけです。ちょっとオリジナルのところがあるので、手順のメモ
事前準備
ブログデータ準備
はてなブログを書きましょう。長ければ長いほどよいです。私は20年分です。
続いて、はてなブログのメニューから「設定 -> 詳細設定 -> エクスポート」に移動します。
以下の画面で「<ブログ名>をエクスポートする」をクリックします。
Pythonセットアップ
続いて、Pythonをセットアップしましょう。Apple SiliconのMacbookの前提です。
試していないですが、LinuxやWindows(WSL2)でもできると思います。その場合は、Python環境構築は以下参照ください。
はてなブログのエクスポートデータをjson形式に変換
続いてはてなブログのデータをjson化します。hitode909さんのリポジトリを使います。最初に、以下のPythonライブラリをインストールしておきます。
$ pip install tiktoken
$ pip install openai
$ pip install dotenv
続いて、以下ではてなブログのデータをjson形式に変換します。
$ git clone -b hatenablog https://github.com/hitode909/scrapbox_chatgpt_connector
$ cd scrapbox_chatgpt_connector
$ ruby mt2json.rb ~/Downloads/karaage.hatenadiary.jp.export.txt > karaage.hatenadiary.jp.json
jsonファイルをインデックス化
jsonをインデックス化します。調べた感じだと、テキストをインデックス化しているようですね。npakaさんの以下記事が詳しいです。
make_index.py
を以下のように修正します。
# import dotenv
(省略)
JSON_FILE = "karaage.hatenadiary.jp.json"
# output file name
INDEX_FILE = "qualia-san.pickle"
BLOCK_SIZE = 500
# dotenv.load_dotenv()
# openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_key = "<OPENAI_API_KEY>"
JSON_FILE
にはてなブログのjsonを指定するのと、dotenv
が、自分の環境ではうまくインストールできなかったので、とりあえず雑に直接、OPENAI API KEYをハードコーディングしました。
以下実行すると、インデックス化できます。
$ python make_index.py
インデックス化が進んでいきますが、自分の場合は30分たっても1/3くらいでした。
5%|████▋ (省略) | 89/1903 [03:15<1:02:56, 2.08s/it]
インデックス化は、時間がかかります。ただ、完了待たずに次に進むこともできます。
ChatGPTに質問する
ask.py
もmake_index.py
同様に<OPENAI_API_KEY>を直接入力するように修正します。
質問文は、以下の<聞きたいこと>に直接入力します。
input_str = """
<聞きたいこと>
""".strip()
以下コマンドで質問できます。インデックス化の途中でも実行できます。
$ python ask.py
ChatGPT回答例
ANSWER:
>>>> おいしいラーメン屋さん
> RAMENぶろすがおすすめ。牛醤油SOBAが特においしい。愛知県在住の方は行列覚悟でぜひ。
ANSWER:
>>>> 好きな食べ物おしえて
> 文章には好きな食べ物に関する情報は含まれていません。答えはありません。
ANSWER:
>>>> 趣味は何?
> 文章からは趣味が特定できません。様々な話題が含まれています。
インデックス化に関して
npakaさんの書いている、LlamaIndexを使う方が、手軽に同じことができるかもしれません。テキストをベクトル化して、質問文とベクトルでの類似度を確認して、類似度高いものをChatGPTに投げるというところは一緒かも。まだ調査中です。
LlamaIndexを使って、WordPressとChatGPTを繋いでいる例
まとめ
はてなブログをChatGPTに繋いでみました。Google Colabノートブック化しようかと思いましたが、挫折しました。気が向いたらいつかやってみようかと思います。
いくつか質問した感じ、なかなかうまく答えてくれないことが多かったです。まだデータが少ないのか、内容が専門性に特化していないと難しいのかもしれません。
あとは、ブログだけでなく、Twitterのデータとかも加えてみたいですね。
追記:改良版をやってみました。以下参照ください。
参考リンク
変更履歴
- 2023/08/05 改良版に関して追記
- 2023/03/12 LlamaIndexに関して追記、参考リンクに追記
Discussion