ChatWP: WordPressをAI化しておしゃべりする
今は日記をScrapboxに移行(scrapbox.io/kentaro/)したのですが、その前の20年分ぐらいのブログはWordPressに入っています(kentarokuribayashi.com)。長い間書き続けてきたブログには、僕の人格のかなりの部分が注ぎ込まれているでしょう。そうであれば、ブログそのものをAI化することで、自分自身の代理=エージェントを作れるはずです。
そこで、WordPressをAI化して、自分の代理人格としておしゃべりできるようにしてみました。
できたもの
こんな会話ができるようになりました。自分で読んでみても、そこそこ自分っぽい感じがします。
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というものがあるので、そのまま使いました。
以下の通り、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を使っている人はぜひご自身のブログで試してみてください。
Discussion