Milvus
Zilliz
  • Home
  • Blog
  • Gemini 3 Pro + Milvus:高度な推論とマルチモーダルパワーでより堅牢なRAGを構築する

Gemini 3 Pro + Milvus:高度な推論とマルチモーダルパワーでより堅牢なRAGを構築する

  • Tutorial
November 20, 2025
Lumina Wang

GoogleのGemini 3 Proは、単なる誇大広告ではなく、自然言語インターフェイスにできることを実質的に拡張する機能という、開発者の期待を純粋にシフトさせる稀有なリリースで上陸した。動的なツールルーティング、マルチステッププランニング、APIオーケストレーション、インタラクティブなUX生成のすべてをシームレスにつなぎ合わせる。動的なツールルーティング、マルチステップのプランニング、APIオーケストレーション、そしてインタラクティブなUX生成。

そして、数字がその物語を裏付けている。Gemini 3 Proは、ほぼすべての主要なベンチマークで傑出した結果を出しています:

  • 人類最後の試験:ツールなしで37.5%、ツールありで45.8% - 最も近い競合製品は26.5%。

  • MathArena Apex:23.4%、ほとんどのモデルは2%を切ることができなかった。

  • ScreenSpot-Pro:72.7%の精度で、次点の36.2%のほぼ2倍。

  • Vending-Bench 2:平均純額5,478.16ドル、2位を約1.4倍上回る。

その他のベンチマーク結果は以下の表をご覧ください。

深い推論、強力なツールの使用、そしてマルチモーダルな流暢さのこの組み合わせは、Gemini 3 Proを検索支援型ジェネレーション(RAG)に自然に適合させている。億規模のセマンティック検索用に構築された高性能なオープンソースベクターデータベースであるMilvusと組み合わせることで、レスポンスの根拠となる検索レイヤーを得ることができる。

この投稿では、Gemini 3 Proの新機能、RAGワークフローを向上させる理由、Milvusを検索バックボーンとして使用したクリーンで効率的なRAGパイプラインの構築方法について説明する。

Gemini 3 Proの主なアップグレード

Gemini 3 Proは、モデルの理由付け、作成、タスクの実行、およびユーザーとのインタラクションの方法を再構築する一連の実質的なアップグレードを導入しています。これらの改善は、4つの主要な機能分野に分類される:

マルチモーダル理解と推論

Gemini 3 Proは、視覚的推論のARC-AGI-2、クロスモーダル理解のMMMU-Pro、ビデオ理解と知識習得のVideo-MMMUなど、重要なマルチモーダルベンチマークで新記録を樹立しています。また、構造化されたマルチステップの論理処理を可能にする拡張推論モード「Deep Think」も導入されている。これにより、従来の思考連鎖モデルが失敗しがちな複雑な問題でも、精度が大幅に向上する。

コード生成

このモデルは、ジェネレーティブコーディングを新しいレベルに引き上げます。Gemini 3 Proは、インタラクティブなSVG、完全なWebアプリケーション、3Dシーン、さらには、Minecraftのような環境やブラウザベースのビリヤードを含む機能的なゲームを、すべて1つの自然言語のプロンプトから生成することができます。フロントエンド開発には特に利点があります。このモデルでは、既存のUIデザインを忠実に再現したり、スクリーンショットをそのまま制作可能なコードに変換したりできるため、UIの反復作業が劇的に速くなります。

AIエージェントとツールの使用

ユーザーの許可があれば、Gemini 3 Proは、ユーザーのGoogleデバイスからデータにアクセスし、旅行の計画やレンタカーの予約など、長期的で複数ステップのタスクを実行することができる。このエージェント機能は、Vending-Bench 2(ロングホライズンツール使用のストレステスト用に特別に設計されたベンチマーク)での強力なパフォーマンスに反映されている。このモデルはまた、端末コマンドの実行や、明確に定義されたAPIを通じた外部ツールとのやり取りを含む、プロフェッショナルグレードのエージェントワークフローをサポートしています。

ジェネレーティブUI

Gemini 3 Proは、従来の一問一答モデルを超えて、ジェネレーティブUIを導入しています。ジェネレーティブUIでは、インタラクティブな体験全体を動的に構築することができます。静的なテキストを返す代わりに、完全にカスタマイズされたインターフェース(例えば、リッチで調整可能なトラベルプランナー)を、ユーザーの指示に直接反応して生成することができる。これにより、LLMは受動的な応答者から能動的なインターフェース生成者へとシフトする。

Gemini 3 Proをテストする

ベンチマークの結果だけでなく、Gemini 3 Proが実際のワークフローでどのように動作するかを理解するために、一連の実地テストを実施した。その結果、Gemini 3 Proのマルチモーダルな推論、ジェネレーティブな機能、および長期的なプランニングが、開発者にとってどのように実用的な価値につながるかが明らかになった。

マルチモーダルな理解

Gemini 3 Proは、テキスト、画像、ビデオ、コードに渡って、印象的な多機能性を示す。テストでは、YouTubeからZillizのビデオを直接アップロードした。このモデルは、ナレーション、トランジション、画面上のテキストを含むクリップ全体を約40秒で処理し、長尺のマルチモーダルコンテンツとしては異例の速さで処理した。

Googleの内部評価でも同様の結果が得られている:Gemini 3 Proは、複数の言語にまたがる手書きのレシピを扱い、それぞれを書き起こして翻訳し、共有可能な家族のレシピブックにまとめた。

ゼロショットタスク

Gemini 3 Proは、事前のサンプルや足場がなくても、完全にインタラクティブなWeb UIを生成することができます。洗練されたレトロフューチャーな3D宇宙船のWebゲームを作成するように指示されたとき、このモデルは、ネオンパープルのグリッド、サイバーパンクスタイルの船、光るパーティクル効果、スムーズなカメラコントロールなど、完全なインタラクティブシーンを作成しました。

複雑なタスクプランニング

このモデルはまた、他の多くのモデルよりも強力な長期的タスクプランニングを示す。私たちの受信箱整理テストでは、Gemini 3 ProはAIの事務アシスタントのように振る舞った:乱雑なメールをプロジェクトのバケツに分類し、実行可能な提案(返信、フォローアップ、アーカイブ)を起草し、きれいで構造化された要約を提示する。このモデルの計画では、受信箱全体を1回の確認クリックで片付けることができる。

Gemini 3 ProとmilvusでRAGシステムを構築する方法

Gemini 3 Proのアップグレードされた推論、マルチモーダル理解、および強力なツール使用機能は、高性能RAGシステムの優れた基盤となっている。

大規模なセマンティック検索用に構築された高性能なオープンソースベクターデータベースであるMilvusと組み合わせることで、責任の明確な分担が可能になる:Gemini 3 Proが解釈、推論、生成を行い、Milvusが高速でスケーラブルな検索レイヤーを提供することで、企業データに基づいた応答が維持される。この組み合わせは、社内のナレッジベース、ドキュメントアシスタント、カスタマーサポートのコパイロット、ドメイン固有のエキスパートシステムなどのプロダクショングレードのアプリケーションに適しています。

前提条件

RAGパイプラインを構築する前に、これらのコアPythonライブラリがインストールされているか、最新バージョンにアップグレードされていることを確認してください:

  • pymilvus- milvus公式Python SDK

  • google-generativeai- Gemini 3 Proクライアントライブラリ

  • requests- 必要に応じてHTTPコールを処理する

  • tqdm- データセットの取り込み中にプログレスバーを表示する。

! pip install --upgrade pymilvus google-generativeai requests tqdm

次に、Google AI Studioにログインし、APIキーを取得します。

import os
os.environ["GEMINI_API_KEY"] = "**********"

データセットの準備

このチュートリアルでは、Milvus 2.4.xドキュメントのFAQセクションをRAGシステムのプライベートナレッジベースとして使用します。

ドキュメントのアーカイブをダウンロードし、milvus_docs という名前のフォルダに解凍してください。

! wget https://github.com/milvus-io/milvus-docs/releases/download/v2.4.6-preview/milvus_docs_2.4.x_en.zip
! unzip -q milvus_docs_2.4.x_en.zip -d milvus_docs

パスmilvus_docs/en/faq からすべてのMarkdownファイルをロードします。各ドキュメントについて、# の見出しに基づく単純な分割を適用し、各Markdownファイル内の主要セクションを大まかに分ける。

from glob import glob
text_lines = []
for file_path in glob("milvus_docs/en/faq/*.md", recursive=True):
    with open(file_path, "r") as file:
        file_text = file.read()
    text_lines += file_text.split("# ")

LLMと埋め込みモデルのセットアップ

このチュートリアルでは、gemini-3-pro-preview をLLMとして、text-embedding-004 を埋め込みモデルとして使用します。

import google.generativeai as genai
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
gemini_model = genai.GenerativeModel("gemini-3-pro-preview")
response = gemini_model.generate_content("who are you")
print(response.text)

モデルの応答私はGoogleによって構築された大規模な言語モデルであるGeminiです。

テスト埋め込みを生成し、その次元数を最初のいくつかの値とともに出力することで、簡単なチェックを行うことができます:

test_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=["This is a test1", "This is a test2"]
)["embedding"]
embedding_dim = len(test_embeddings[0])
print(embedding_dim)
print(test_embeddings[0][:10])

テストベクトル出力:

768

[0.013588584, -0.004361838, -0.08481652, -0.039724775, 0.04723794, -0.0051557426, 0.026071774, 0.045514572, -0.016867816, 0.039378334]

Milvusへのデータのロード

コレクションの作成

from pymilvus import MilvusClient
milvus_client = MilvusClient(uri="./milvus_demo.db")
collection_name = "my_rag_collection"

MilvusClient を作成する際、規模や環境に応じて3つの設定オプションから選択することができます:

  • ローカルモード(Milvus Lite):ローカルモード(Milvus Lite): URIをローカルファイルパスに設定する(例:./milvus.db)。Milvus Liteは自動的にすべてのデータをそのファイルに保存します。

  • セルフホストMilvus(DockerまたはKubernetes):より大きなデータセットやプロダクションワークロードの場合は、DockerまたはKubernetes上でMilvusを実行します。MilvusサーバーのエンドポイントにURIを設定します(http://localhost:19530 など)。

  • Zilliz Cloud (フルマネージドMilvusサービス):マネージドソリューションをご希望の場合は、Zilliz Cloudをご利用ください。URIをパブリックエンドポイントに設定し、認証トークンとしてAPIキーを指定します。

新しいコレクションを作成する前に、まずそのコレクションが既に存在するかどうかを確認します。存在する場合は、それを削除し、クリーンなセットアップを確実にするために再作成します。

if milvus_client.has_collection(collection_name):
    milvus_client.drop_collection(collection_name)

指定したパラメータで新しいコレクションを作成します。

スキーマが指定されていない場合、Milvusは自動的にプライマリキーとしてデフォルトのIDフィールドを生成し、エンベッディングを格納するためのベクターフィールドを生成します。また、スキーマで定義されていない追加フィールドをキャプチャする予約JSONダイナミックフィールドも提供します。

milvus_client.create_collection(
    collection_name=collection_name,
    dimension=embedding_dim,
    metric_type="COSINE",
    consistency_level="Strong",  # Strong consistency level
)

データの挿入

各テキストエントリーを繰り返し、埋め込みベクトルを生成し、Milvusにデータを挿入します。この例では、text というフィールドを追加しています。これはスキーマで定義されていないため、Milvusは自動的にダイナミックJSONフィールドを使用して格納します。

from tqdm import tqdm
data = []
doc_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=text_lines
)["embedding"]
for i, line in enumerate(tqdm(text_lines, desc="Creating embeddings")):
    data.append({"id": i, "vector": doc_embeddings[i], "text": line})
milvus_client.insert(collection_name=collection_name, data=data)

サンプル出力

Creating embeddings: 100%|█████████████████████████| 72/72 [00:00<00:00, 431414.13it/s]
{'insert_count': 72, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71], 'cost': 0}

RAGワークフローの構築

関連データの取得

検索をテストするために、Milvusに関する一般的な質問をします。

question = "How is data stored in milvus?"

クエリに対してコレクションを検索し、最も関連性の高い上位3つの結果を返します。

question_embedding = genai.embed_content(
    model="models/text-embedding-004", content=question
)["embedding"]
search_res = milvus_client.search(
    collection_name=collection_name,
    data=[question_embedding],
    limit=3,  # Return top 3 results
    search_params={"metric_type": "COSINE", "params": {}},  # Inner product distance
    output_fields=["text"],  # Return the text field
)
import json
retrieved_lines_with_distances = [
    (res["entity"]["text"], res["distance"]) for res in search_res[0]
]
print(json.dumps(retrieved_lines_with_distances, indent=4))

結果は似ているものから似ていないものの順に返される。

[
    [
        " Where does Milvus store data?\n\nMilvus deals with two types of data, inserted data and metadata. \n\nInserted data, including vector data, scalar data, and collection-specific schema, are stored in persistent storage as incremental log. Milvus supports multiple object storage backends, including [MinIO](
https://min.io/
), [AWS S3](
https://aws.amazon.com/s3/?nc1=h_ls
), [Google Cloud Storage](
https://cloud.google.com/storage?hl=en#object-storage-for-companies-of-all-sizes
) (GCS), [Azure Blob Storage](
https://azure.microsoft.com/en-us/products/storage/blobs
), [Alibaba Cloud OSS](
https://www.alibabacloud.com/product/object-storage-service
), and [Tencent Cloud Object Storage](
https://www.tencentcloud.com/products/cos
) (COS).\n\nMetadata are generated within Milvus. Each Milvus module has its own metadata that are stored in etcd.\n\n###",
        0.8048489093780518
    ],
    [
        "Does the query perform in memory? What are incremental data and historical data?\n\nYes. When a query request comes, Milvus searches both incremental data and historical data by loading them into memory. Incremental data are in the growing segments, which are buffered in memory before they reach the threshold to be persisted in storage engine, while historical data are from the sealed segments that are stored in the object storage. Incremental data and historical data together constitute the whole dataset to search.\n\n###",
        0.757495105266571
    ],
    [
        "What is the maximum dataset size Milvus can handle?\n\n  \nTheoretically, the maximum dataset size Milvus can handle is determined by the hardware it is run on, specifically system memory and storage:\n\n- Milvus loads all specified collections and partitions into memory before running queries. Therefore, memory size determines the maximum amount of data Milvus can query.\n- When new entities and and collection-related schema (currently only MinIO is supported for data persistence) are added to Milvus, system storage determines the maximum allowable size of inserted data.\n\n###",
        0.7453694343566895
    ]
]

LLMでRAGレスポンスを生成する

文書を取得した後、文字列形式に変換する。

context = "\n".join(
    [line_with_distance[0] for line_with_distance in retrieved_lines_with_distances]
)

LLMにシステムプロンプトとユーザープロンプトを提供し、どちらもMilvusから取得した文書から作成する。

SYSTEM_PROMPT = """
Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided.
"""
USER_PROMPT = f"""
Use the following pieces of information enclosed in <context> tags to provide an answer to the question enclosed in <question> tags.
<context>
{context}
</context>
<question>
{question}
</question>
"""

これらのプロンプトとともにgemini-3-pro-preview モデルを使用し、最終的な応答を生成する。

gemini_model = genai.GenerativeModel(
    "gemini-3-pro-preview", system_instruction=SYSTEM_PROMPT
)
response = gemini_model.generate_content(USER_PROMPT)
print(response.text)

出力から、Gemini 3 Proが検索された情報に基づいて、明確で構造化された回答を生成していることがわかります。

Based on the provided documents, Milvus stores data in the following ways:
*   **Inserted Data:** Vector data, scalar data, and collection-specific schema are stored in persistent storage as an incremental log. Milvus supports multiple object storage backends for this purpose, including:
    *   MinIO
    *   AWS S3
    *   Google Cloud Storage (GCS)
    *   Azure Blob Storage
    *   Alibaba Cloud OSS
    *   Tencent Cloud Object Storage (COS)
*   **Metadata:** Metadata generated within Milvus modules is stored in **etcd**.
*   **Memory Buffering:** Incremental data (growing segments) are buffered in memory before being persisted, while historical data (sealed segments) resides in object storage but is loaded into memory for querying.

:Gemini 3 Proは、現在、フリーティアユーザーはご利用いただけません。詳細はこちらをクリックしてください。

代わりにOpenRouterからアクセスすることができます:

from openai import OpenAI
client = OpenAI(
  base_url="https://openrouter.ai/api/v1",
  api_key="<OPENROUTER_API_KEY>",
)
response2 = client.chat.completions.create(
  model="google/gemini-3-pro-preview",
  messages=[
        {
            "role": "system",
            "content": SYSTEM_PROMPT
        },
        {
            "role": "user", 
            "content": USER_PROMPT
        }
    ],
  extra_body={"reasoning": {"enabled": True}}
)
response_message = response2.choices[0].message
print(response_message.content)

One More Thing: Google Antigravityを使ったバイブコーディング

Gemini 3 Proと同時に、Googleはエディタ、ターミナル、ブラウザと自律的に対話するバイブコーディングプラットフォーム、Google Antigravityを発表した。単発の命令を扱う以前のAI支援ツールとは異なり、Antigravityはタスク指向のレベルで動作する。開発者が何を作りたいかを指定すると、システムがその方法を管理し、完全なワークフローをエンドツーエンドで編成する。

従来のAIコーディング・ワークフローでは、開発者が手作業でレビュー、統合、デバッグ、実行しなければならない孤立したスニペットが生成されるのが一般的だった。Antigravityは、そのような動きを変えます。例えば、「シンプルなペットとのインタラクションゲームを作成する」といったタスクを記述するだけで、システムはリクエストを分解し、コードを生成し、ターミナルコマンドを実行し、結果をテストするためにブラウザを開き、動作するまで繰り返し実行する。これはAIを受動的なオートコンプリート・エンジンから能動的なエンジニアリング・パートナーへと昇華させる。

将来的には、エージェントが直接データベースと連携するというアイデアは、そう遠い話ではない。MCP経由でツールを呼び出すことで、AIは最終的にMilvusデータベースから読み出し、ナレッジベースを構築し、さらには自律的に独自の検索パイプラインを維持することができるだろう。AIが製品レベルの記述を受け取り、それを実行可能なタスクのシーケンスに変換できるようになれば、人間の労力は、目的、制約、そして「正しさ」とはどのようなものかを定義することに自然とシフトする。

構築の準備はできていますか?

ステップバイステップのチュートリアルに従って、Gemini 3 Pro + MilvusでRAGシステムを構築してください。

ご質問がある場合、またはどの機能についても深く知りたい場合は、Discordチャンネルにご参加ください。私たちの Discordチャンネルに参加するか、 GitHubに課題を提出してください。また、 Milvusオフィスアワーを通して、20分間の1対1のセッションを予約し、洞察、ガイダンス、質問への回答を得ることもできます。

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    続けて読む