😊

ChatWP: WordPressをAI化しておしゃべりする

2023/03/12に公開

今は日記をScrapboxに移行(scrapbox.io/kentaro/)したのですが、その前の20年分ぐらいのブログはWordPressに入っています(kentarokuribayashi.com)。長い間書き続けてきたブログには、僕の人格のかなりの部分が注ぎ込まれているでしょう。そうであれば、ブログそのものをAI化することで、自分自身の代理=エージェントを作れるはずです。

そこで、WordPressをAI化して、自分の代理人格としておしゃべりできるようにしてみました。

https://github.com/kentaro/chatwp

できたもの

こんな会話ができるようになりました。自分で読んでみても、そこそこ自分っぽい感じがします。

python ./chatwp.py
Question: お名前はなんですか?
Answer: 私の名前はケンタロウ・クリバヤシです。

Question: 職業は何をしていますか?
Answer: 私はソフトウェアエンジニアをしています。

Question: 趣味はなんですか?
Answer: 私の趣味は、音楽を聴くことと本を読むことです。

Question: どんな音楽が好きですか?
Answer: 私は、ジャズやポップスなど、様々なジャンルの音楽を好んで聴いています。

Question: 最近読んだおすすめの本を教えてください。
Answer:

最近読んだおすすめの本は、竜胆寺雄『放浪時代』、高山宏『ブック・カーニバル』、ツルゲーネフ『はつ恋』、そして、失念の著者による『きらめきのサフィール』です。

Question: 趣味が渋いですね。
Answer: ありがとうございます。

Question: 社会人大学院生としても活動中とのことですが、楽しんでますか?
Answer: はい、楽しんでやっていきたいと思います。

Question: 仕事ではCTOを務めていますが、マネジメントにおいて重要なことはなんですか?
Answer: CTOとしてのマネジメントにおいて重要なことは、事業・技術・DXの3つの要素をうまくバランスし、組織の成長を最大化するために均衡を図ることです。また、ある意味で「蛮勇」ともいえる行為が「均衡」を破ることも重要です。それは、戦略に基づくマネジメントによる、上述の至らなさを超えて組織を「成長」に導く方法であり、また、それを行える環境を作ることこそが、メタ・マネジメントだと考えています。

Question: 好きなプログラミング言語はなんですか?
Answer: 私の好きなプログラミング言語はGoです。

Question: Goのどんなところが好きなんですか?
Answer: Goのルールがシンプルで、深い戦略を持つことができることが好きです。また、Goは非常に古いゲームであり、その歴史的な背景も非常に魅力的です。

Question: Elixirについてはどうお考えですか?
Answer: Elixirについては、非常に楽しいものだと思っています。研究でも使っているので、自分でもいろいろなことを学びながら、Elixirを使っているのが楽しいです。また、今回のElixirの特集記事企画も、自分が読みたい記事を作りたくてやっているので、とても楽しいです。Elixirを使っていると、いろいろなことができるので、今後もElixirを使っていきたいと思っています。

Question: 他に好きな言語はありますか?
Answer: はい、他にも好きな言語があります。特にスペイン語とフランス語が好きです。

Question: フランス語を話せますか?
Answer: いまはまだ話せません。しかし、『NHKラジオまいにちフランス語』を音声を聴きながら読んで勉強しています。

Question: 外国語を学習するのは好きですか?
Answer: はい、好きです。

インデックスの作成

といっても、そんな大したことはしていません。Llama Hubというサイトには、外部知識を参照するためのデータローダーがたくさん上がっています。その中に、Wordpress Loaderというものがあるので、そのまま使いました。

https://github.com/kentaro/chatwp/blob/main/chatwp.py#L31-L38

以下の通り、chatwp.py--make-indexという引数付きで実行すると、WordPressにアクセスしてデータを抜き出し、インデックスを作ります。

python ./chatwp.py --make-index

僕のサイトは5,000件以上記事があるのですが、25分ほどで処理が終わりました。インデックス作成に関するOpenAIのAPI代は、$2ほどでした(ほんとにちゃんとできてるのかな?と不安になるぐらい、速くて安い気がします)。

AIとの会話

インデックスが作成できたら、chatwp.pyをそのまま実行すればOKです(例は冒頭に示した通り)。

python ./chatwp.py
Question:

発展的な話題

西尾さんがScrapbox ChatGPT Connectorというものを作っています。これはScrapboxにクエリするものなのですが、embedding検索によって事前知識を得るあたりを詳細に実装しています(本記事のChatWPでは、Embedding supportにある通りGPTSimpleVectorIndexを使ってサッと実装しちゃってます)。

この記事で行った実装よりも、もっといい感じになるかもしれません。ご参考ください。

おわりに

これまで書き溜めてきたブログが、こんな形で役に立つ可能性が出てくるなんて、わくわくしますね。なんでもログをとっておきたくなりますね。WordPressを使っている人はぜひご自身のブログで試してみてください。

https://github.com/kentaro/chatwp

Discussion