開発日記 Version65.1「AI檢索精度評価・改善」

今日は整理整頓SaaSのAI檢索を、感覚じゃなく数字で評価できるようにした。

まずはAccuracy(命中率)の測定環境を作成。50件の家財データと40件の檢索クエリを用意し、AI檢索の精度を自動で評価できるようにした。

最初はSupabaseで permission denied for table tenants が発生。service_role周りの権限を調査した結果、無事に評価環境を復旧できた。

評価してみると、現状でもTop1命中率は95%。かなり良かったけど、あと一歩伸ばしたかった。

原因を調べると、「状態」と「数量」の情報がEmbeddingに含まれていないケースがあり、檢索意図を十分に表現できていなかった。

そこでEmbedding生成を改善。



例えば、

HDMIケーブル 保管中 4本 クローゼット

のように、状態や数量も自然文へ組み込むよう変更した。

その結果、

  • Top1:95.0% → 97.5%
  • Top3:100%
  • Top5:100%

まで改善。

数字で改善効果を証明できたのはかなり大きい成果だった。

その後はRLS(Row Level Security)の再侵入試験も実施。

他世帯のUUIDを指定してAI檢索RPCを直接呼び出す攻撃を試したところ、途中で

column reference "id" is ambiguous

というSQLのバグを発見。

セキュリティの問題ではなく、PL/pgSQL内で返却列の id とテーブルの id が競合していたことが原因だった。

#variable_conflict use_column を追加して修正し、再試験を実施。

結果はすべてPASS。

他世帯の台帳やAI檢索へのアクセスは完全に遮断され、認可がデータベースレベルで機能していることを実証できた。

今回からは運用も見直した。

これまではSupabaseのSQL Editorへ直接貼り付けていたSQLも、今後はすべてマイグレーションで管理する方針に変更。修正履歴をGitで追跡できるようになり、開発体制も一段階成熟したと思う。

Version65.1が終わったことで、AI檢索は「動く」だけではなく、「高精度」「安全」「再現性のある評価」が揃った。

次はいよいよVersion66。

この檢索基盤を土台に、AIと自然に会話しながら家財を探したり整理を提案してくれる、本当の意味でのAIアシスタントを実装していく。ここからは「檢索機能」ではなく、「一緒に管理してくれる相棒」を目指す段階だ。