開発日記 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アシスタントを実装していく。ここからは「檢索機能」ではなく、「一緒に管理してくれる相棒」を目指す段階だ。
