記事の概要
個人で運営するサイト「Go Proposal Weekly Digest」(Go言語のProposalをClaude Codeが週次でまとめるサイト)に、Cloudflare Vectorize・Workers AI・Jev を組み合わせた「ほぼ0円で動く高品質なページ内検索」を実装した解説記事。検索1回あたりのコストは約 $0.0002で、多めに見積もっても月額 $0.016程度という驚異的なコスト効率を実現しています。
数ドルあれば数年は運用できる計算。さらにTypeSafe AIの期限付き無料クレジット $5 がある現状では、実質ゼロ円で運用できているとのこと。
Jev とは
- TypeSafe AI が提供する新しいタイプのモデルで、テキストを生成せず「型付きの値」を確率・confidence付きで返すのが特徴
- 使い方はシンプルで、コンテキスト(state)と質問を送るだけ
- 質問形式は3種類:
- Choice:選択肢から選ぶ
- Score:ルーブリックで採点
- Noul:文が真かを 0〜1 で返す
- 速度とコストが最大の魅力:70〜500ミリ秒で回答、入力100万トークンあたり $0.042、出力は無料
検索方式の設計
Jevは「判定問題」を高速・低コストで処理できる反面、できることは限られるため、検索問題を判定問題に落とし込む必要がありました。
- 事前にベクトル検索(Cloudflare Vectorize)で候補を20個に絞り込む
- ベクトル化には Workers AI でホストされた
bge-m3 を使用
- Jevでリランク:タイトル・要約を踏まえて「検索内容と関連しているか」を Noul 形式で質問し、関連度を判定
- 関連度が 0.2以上のものだけを降順ソートして返す
先行事例として、Qiitaの「JevでRAG検索の爆速化&コスト削減検証」では、リランク以上に「答えられない質問の事前排除」で効果を発揮するという結論や、リランク活用でコストが1/8に下がった報告、jev-reranker のような関連度フィルタライブラリの公開などが紹介されています。
インフラ構成(Cloudflareフルスタック)
- 既存サイトは Cloudflare Workers Assets で構築済みのため、Cloudflareスタックで統一
- コンテンツは静的。コンテンツ更新時に GitHub Actions が記事を Workers AI の bge-m3 でベクトル化 → Vectorize に格納
- 検索時はベクトル検索で候補を絞り、AI Gateway 経由で Jev によるリランクを実行
使ってみた所感
検索品質:Googleサイト内検索より使い勝手が良い
- 当初は「Google検索の方が精度良いのでは?」と懐疑的だったが、実際はドメイン知識・周辺知識を踏まえた検索のチューニングが効くため、Jev方式の方が使い勝手が良い印象
- 具体例:「generics」で検索した際、ジェネリックメソッド追加によって可能になった機能(本文中に単語は出てこないが文脈で関連するプロポーザル)が、Jevの検索結果には含まれるがGoogleのサイト内検索には出てこない
- Go言語の仕様という背景知識があるからこそ実現できる、文脈を考慮した検索品質
レイテンシ:課題もあり
- Jevには現状日本国内にサーバーがなく、ネットワークレイテンシが大きい
- 連続リクエストなら数百msで応答するが、間隔が空くと1秒以上かかる(Cloudflare AI Gateway の接続切断も一因)
- 今回は開発の楽さを優先して AI Gateway 経由にしたが、レイテンシがUXに直結する場面では要注意
まとめ・筆者の所感
- 数年前は低コスト検索というと「DBのLIKE検索でごまかす」か「elasticsearchで全文検索」しかなかった
- AI全盛時代になり、ベクトル検索が無料枠で使えるようになり、さらにJevの登場で機械学習ベースの検索まで低コストで実現可能になった
- 興味本位で実装したら思った以上に実用的な形に仕上がり、小規模開発での検索品質向上に役立つ知見が詰まった記事
AIGoCloudflareCloudflare WorkersJev