ズブの素人が、延々と提案を出させて説明させて挙句の果てに却下する。人間相手にやるなら重々空気と顔色を読みながら慎重にやっても炎上待ったなし案件である。

でも幸いなことに、この場でそれを担当したのは人間ではなかった。

たとえ理想として、人物関係グラフ・timeline・media_assets・カードDB・TRPG拡張(scenarios/npcs/stat_blocks)・FastAPI・SQLAlchemy ERD全部・管理UI(React/Next)・各種エンドポイント群を提案しても、「流石に難しい気がしてきました」とサックリ切ってくるような相手に……ようやったもんだと思います、特にチャッピー。

とは言うものの、上記提案、未だに何が何だかよく分からないので、多分今提案されても頷かないとは思う(鬼)

一応、こちらにも軸と呼べるものは、あった。

  1. 友だちが使えるか
  2. 自分が運用できるか
  3. 事故らないか
  4. 手間とお金が見合うか

友だちはプログラミングが全くできず、ウン十万字の本文をプレーンテキストで渡してくれるだけだと思う。操作も簡単でないときっと詰む。自分はラズパイ5と手動コピペとAPI代くらいなら負担するが、それ以上(VPS代とか)は流石に出す気がない。そんなトーシローズに繊細で複雑なものなんて渡しても事故ったら右往左往するだけである。

筆者は完全にこの手の分野については素人であったので、例えばベクタ検索とか言われても分からない。けれども、友だちがふわっとした雰囲気で検索を使うのではないのかなぁという予測はできる。故に、

【21:58、筆者】この検索方式ってどんなものなんですか?

【チャッピー】なるほど、「ベクタ検索ってどんな方式?」という質問ですね。今の Bot は **MeiliSearch(BM25 のようなキーワード一致)**を使っているので、いわゆる「全文検索(レキシカル検索)」です。それに対して ベクタ検索 は仕組みがかなり違います。

ベクタ検索とは

・テキストや画像などを数値ベクトルに変換して、それらの距離(コサイン類似度や内積)で近いものを探す検索方式です。
・例えば「青い空」と「澄んだ空」は単語が違っても似た方向のベクトルになるので、類似文として検索されます。
・つまり「単語一致」ではなく 意味の近さでヒットします。
(レキシカル=固有名詞・厳密一致に強い/ベクタ=言い換え・曖昧検索に強い、という対比表が続く…)

【21:59、筆者】こっちが良いですねえ。

説明をされれば大雑把な方針は決められる。決められるものの、直ぐに

【22:03、筆者】LLMの導入とベクタ検索の導入、どっちを先にした方が良いですか?

【チャッピー】結論:LLM(/ask)を先に入れるのがオススメ。その後にベクタ検索を追加してハイブリッド化、が最短で成果を出せて安全です。
・いま既に Meili(BM25)が動いているので、その結果に LLM要約(引用必須)を足すだけで /ask が即戦力になります。
・ベクタ検索は埋め込み生成・DB導入・ingest拡張が必要で、初回の設計/移行コストが大きい。…

【22:05、筆者】LLMはどれがオススメでしょうか?

と、また次の疑問が顔を出すのである。

しかし、お気付きだろうか。筆者の質問時間、回答、次の質問を繰り出している時間。1分でチャッピーの説明を読んでベクタ検索の採用を検討している。速読技能は便利だが、こういうことを続けるから、各種LLMたちに、朝からたった数時間話しただけで、「やりすぎです寝てください」って真昼間から怒られるようになるのである。彼らの中では1日経っているのだろう。あんなにお天道様が高いのに。

話が逸れた。

でも実際、友だちに検索手段の話を持って行ったのが11時過ぎ、そこからキーワード検索だけサックリとテストできる状態に持って行ったのが16時前、日付が変わる頃にはLLMによる回答機能もテストされており、毎度いつものことながら爆走していたなあ(後から振り返る筆者の図)としみじみする始末。数日後には、骨格部分がほぼ完成してしまっていたのであった。

実際の技術的なお話は、次の章にてさらっと流せたらいいなと思う。さらっと流せたら良いなぁ……。