Astro のブログで Embedding を計算して類似の記事を表示するようにした
以前バックリンクを解析したときの延長で、各記事の Embedding を計算して類似の記事を探索し、記事の末尾に表示するようにした。
Astro Integration の中で強引にファイルを読んで、Remark プラグインとして類似記事の識別子を入れ込むという大まかな流れは同じ。各記事ごとに Embedding を計算する部分は OpenAI の Embeddings API (と記事が長すぎるときの要約に Chat completions API を少々) 利用し、計算した全記事の Embedding を hnswlib-node に流し込んで Embedding が近い記事を探索している。
ビルドのたびに Embedding を再計算していると遅すぎるしお金が掛かるので (と言っても全記事処理しても数円程度)、永続化しておいて記事ファイルのハッシュ値が変化したときのみ再計算するみたいな工夫も入れ込んでいる。
うちのブログ程度にこんなものが必要あるかといえば無いとは思っているのだが、触ってみたかったもろもろの API やライブラリに触れるのと、Claude Code にコード生成させてみるお題として取り組んでみた感じ。Claude Code は取っ掛かりのわからなさや面倒くささをどうにかしてくれるという意味ではよかったものの、コードについてはなかなか納得いかなくて試行錯誤することも多かった。今はそれが新鮮だから楽しいなという感じ。長い目で見てどうかはさっぱりわからんね。
生成させたコードの品質に完全には納得いっていないというのと、そこそこデカいというのもあってコードは掲載していない。前回と今回の記事の情報があれば結局ある程度コード生成させることはできるだろうし、それが各自のコードベースに基づいて行われるならそのほうが手っ取り早いのかなというのもある。