GEMINI LABEN
PRO35 — 報道が目標日としていた7月17日を過ぎましたが、Gemini 3.5 Proの公式発表もモデルカードも本日時点で確認できていません。予備日として7月24日が挙げられていますNB2LITE — Nano Banana 2 Lite(Gemini 3.1 Flash-Lite Image)が登場しました。約4秒で画像を生成し、1,000枚あたり0.034ドルという水準ですOMNI — Gemini Omni Flashが公開プレビューに入りました。最長10秒の動画を生成でき、価格は出力1秒あたり0.10ドルですEDIT — Omni Flashは会話による編集を軸に設計されています。登場人物の差し替え、ライティングの変更、アングルの調整を自然文で指示でき、元の音声と映像のトラックは保持されますSYNTHID — 新しい2モデルにはSynthIDの電子透かしが組み込まれており、生成物の来歴をGeminiアプリ側から確認できますSHUTDOWN — 旧来の画像生成モデルは非推奨となり、8月17日に停止されます。移行の期限をご確認いただければと思いますPRO35 — 報道が目標日としていた7月17日を過ぎましたが、Gemini 3.5 Proの公式発表もモデルカードも本日時点で確認できていません。予備日として7月24日が挙げられていますNB2LITE — Nano Banana 2 Lite(Gemini 3.1 Flash-Lite Image)が登場しました。約4秒で画像を生成し、1,000枚あたり0.034ドルという水準ですOMNI — Gemini Omni Flashが公開プレビューに入りました。最長10秒の動画を生成でき、価格は出力1秒あたり0.10ドルですEDIT — Omni Flashは会話による編集を軸に設計されています。登場人物の差し替え、ライティングの変更、アングルの調整を自然文で指示でき、元の音声と映像のトラックは保持されますSYNTHID — 新しい2モデルにはSynthIDの電子透かしが組み込まれており、生成物の来歴をGeminiアプリ側から確認できますSHUTDOWN — 旧来の画像生成モデルは非推奨となり、8月17日に停止されます。移行の期限をご確認いただければと思います
記事一覧/API / SDK
API / SDK/2026-06-28上級

Gemini × Qdrant のハイブリッド検索が再現率を静かに落としていたとき — RRF の重みと疎ベクトルのズレを計測する運用メモ

Gemini の埋め込みと Qdrant のハイブリッド検索を本番で回すと、ダッシュボードは緑のまま再現率だけが静かに落ちます。RRF の重み・疎ベクトルのズレ・ペイロードインデックスの欠落を計測で捕まえ、品質バジェットで守る運用メモです。

Gemini API189Qdrantハイブリッド検索RAG15RRF再現率本番運用47計測2

プレミアム記事

検索は速いのに、答えが薄くなっていく

ある朝、サポート用に積んだ RAG の回答が、半年前より明らかに浅くなっていることに気づきました。レイテンシのグラフは綺麗な横ばい、Qdrant のヘルスチェックも緑、エラー率もゼロです。落ちていたのは応答時間ではなく、取得しているドキュメントの質でした。正解候補が上位に来なくなっていたのです。

この種の劣化はアラートに引っかかりません。500 も 429 も出ず、ただ「関連の薄い文脈」を Gemini に渡し続けます。生成は淀みなく流れるので、人間が読んで初めて「なんか弱いな」と感じる。ベクター検索の本当に怖いところは、壊れても動いてしまう点にあると考えています。私自身、個人開発でサポート用の小さな RAG をいくつも回してきましたが、この静かな劣化ほど後から効いてくるものはありませんでした。

ここでは Gemini の埋め込みと Qdrant のハイブリッド検索を本番で運用する中で、再現率(recall)の静かな低下をどう計測で捕まえ、RRF の重みと疎ベクトルの設計をどう数値で詰めたかを、実装と一緒に整理します。汎用的な入門ではなく、「測らないと気づけなかった」部分に絞ります。


まず計測を置く — 再現率を見える化する最小セット

精度の議論を始める前に、私は必ず小さな評価セットを先に作ります。完璧なデータセットは要りません。実運用のクエリログから 50〜100 件を抜き、各クエリに「これが取れていれば正解」というドキュメント ID を 1〜数件ひも付けるだけです。これがあるだけで、設定変更が改善なのか改悪なのかを推測でなく数字で言えるようになります。

# eval_set.py — 評価セットは JSONL で持つ(1行1クエリ)
# {"query": "...", "relevant_ids": ["doc_12", "doc_88"]}
import json
 
def load_eval_set(path: str) -> list[dict]:
    with open(path, encoding="utf-8") as f:
        return [json.loads(line) for line in f if line.strip()]
 
def recall_at_k(retrieved_ids: list[str], relevant_ids: list[str], k: int) -> float:
    """上位 k 件に正解がどれだけ含まれていたか(0.0〜1.0)"""
    if not relevant_ids:
        return 0.0
    top = set(retrieved_ids[:k])
    hit = sum(1 for r in relevant_ids if r in top)
    return hit / len(relevant_ids)
 
def mrr(retrieved_ids: list[str], relevant_ids: list[str]) -> float:
    """最初の正解が何位に来たか(順位の逆数)。上位性能を見るのに効く"""
    for rank, doc_id in enumerate(retrieved_ids, start=1):
        if doc_id in relevant_ids:
            return 1.0 / rank
    return 0.0

私はこの recall@10MRR の 2 つを、設定を触るたびに必ず回します。**再現率は「取りこぼしの量」、MRR は「正解を上に置けているか」**を見ているので、片方だけだと判断を誤ります。実際、RRF の重みを変えると recall は上がるのに MRR が下がる、という綱引きがよく起きました。


ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
ダッシュボードが緑でも recall@10 が落ちる典型パターンと、それを数値で捕まえる計測コード
RRF の k と密/疎の重み(融合前 limit 20→40 で recall@10 が 0.71→0.83)を測って決める評価セットの回し方
疎ベクトルのズレ・ペイロードインデックス欠落・埋め込みモデル切り替えの落とし穴と回避策
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API / SDK2026-07-06
Context Caching を入れたのに Gemini の請求が減らなかったとき — 命中率を計測して立て直す運用メモ
Context Caching を有効化したのに Gemini API の請求がほとんど減らないとき、命中率と書き込みコストの回収点を usage_metadata から計測し、TTL チャーンと断片化を切り分けて段階的に立て直す運用メモです。
API / SDK2026-06-26
Gemini API の月額上限に当てた瞬間、有料ユーザーまで止まる — Project Spend Caps の影響範囲をプロジェクト分割で閉じ込める
Project Spend Caps はプロジェクト全体を一度に止めます。無料ユーザーの暴走が有料ユーザーを巻き込まないよう、上限の影響範囲をティア別プロジェクトで分離し、約10分の遅延を埋めるソフト予算ゲートを実装する設計メモです。
API / SDK2026-06-18
countTokens でバッチ投入前にコスト超過を止める — 既定モデルが変わっても崩れない予算ゲートの設計
夜間バッチが想定外に高くつく原因は、投入後にしかコストが分からないことです。countTokens を起点に、思考トークンまで織り込んだ予算ゲートを設計し、既定モデルが入れ替わっても見積もりが崩れない運用に立て直します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →