🧠

はてなブログとChatGPTをつなぐやつをやってみた

2023/03/12に公開

はてなブログとChatGPTの接続

hitode909さんのブログに書いてあることをやっただけです。ちょっとオリジナルのところがあるので、手順のメモ

https://blog.sushi.money/entry/2023/03/10/190000

事前準備

ブログデータ準備

はてなブログを書きましょう。長ければ長いほどよいです。私は20年分です。

続いて、はてなブログのメニューから「設定 -> 詳細設定 -> エクスポート」に移動します。

以下の画面で「<ブログ名>をエクスポートする」をクリックします。

Pythonセットアップ

続いて、Pythonをセットアップしましょう。Apple SiliconのMacbookの前提です。

https://zenn.dev/karaage0703/articles/f3254b14898b4d

試していないですが、LinuxやWindows(WSL2)でもできると思います。その場合は、Python環境構築は以下参照ください。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

はてなブログのエクスポートデータを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さんの以下記事が詳しいです。

https://note.com/npaka/n/n8f410f178f75

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.pymake_index.py同様に<OPENAI_API_KEY>を直接入力するように修正します。

質問文は、以下の<聞きたいこと>に直接入力します。

input_str = """
<聞きたいこと>
""".strip()

以下コマンドで質問できます。インデックス化の途中でも実行できます。

$ python ask.py

ChatGPT回答例

ANSWER:
>>>> おいしいラーメン屋さん
> RAMENぶろすがおすすめ。牛醤油SOBAが特においしい。愛知県在住の方は行列覚悟でぜひ。
ANSWER:
>>>> 好きな食べ物おしえて
> 文章には好きな食べ物に関する情報は含まれていません。答えはありません。
ANSWER:
>>>> 趣味は何?
> 文章からは趣味が特定できません。様々な話題が含まれています。

インデックス化に関して

npakaさんの書いている、LlamaIndexを使う方が、手軽に同じことができるかもしれません。テキストをベクトル化して、質問文とベクトルでの類似度を確認して、類似度高いものをChatGPTに投げるというところは一緒かも。まだ調査中です。

https://note.com/npaka/n/ncbb858cf11c3

LlamaIndexを使って、WordPressとChatGPTを繋いでいる例

https://zenn.dev/kentarok/articles/a99e51079a8071

まとめ

はてなブログをChatGPTに繋いでみました。Google Colabノートブック化しようかと思いましたが、挫折しました。気が向いたらいつかやってみようかと思います。

いくつか質問した感じ、なかなかうまく答えてくれないことが多かったです。まだデータが少ないのか、内容が専門性に特化していないと難しいのかもしれません。

あとは、ブログだけでなく、Twitterのデータとかも加えてみたいですね。

追記:改良版をやってみました。以下参照ください。

https://zenn.dev/karaage0703/articles/c8baa66c40f9b7

参考リンク

https://note.com/npaka/n/ncb4864df31c9

https://scrapbox.io/villagepump/Scrapbox_ChatGPT_Connector

https://blog.shibayu36.org/entry/2023/04/03/173000

https://qiita.com/sakasegawa/items/16714fa132e874cab069

https://blog.shibayu36.org/entry/2023/04/07/213746

https://dev.classmethod.jp/articles/search-with-openai-embeddings/

https://nikkie-ftnext.hatenablog.com/entry/sentence-transformers-embeddings-introduction-en-ja

変更履歴

  • 2023/08/05 改良版に関して追記
  • 2023/03/12 LlamaIndexに関して追記、参考リンクに追記

Discussion