Googeln Sie Gemini

Google Gemini kann einen Agent-Framework-Agenten über die Gemini Developer API oder die Gemini Enterprise Agent Platform (früher Vertex AI) unterstützen. Der anbieterspezifische Client verarbeitet Authentifizierungs- und Gemini-Anforderungsoptionen, während Agent Framework die Agentdefinition und -orchestrierung besitzt.

Important

Google Gemini und Vertex AI sind Drittanbietersysteme. Überprüfen Sie die Dienstbedingungen, die Datenverarbeitung, regionale Grenzen, den Modellzugriff und die Nutzungskosten vor dem Senden von Anwendungsdaten.

Gemini installieren IChatClient

Das .NET Beispiel zeigt den offiziellen Google GenAI-Client und die Community-ImplementierungMscc.GenerativeAI.Microsoft.

dotnet add package Google.GenAI
dotnet add package Mscc.GenerativeAI.Microsoft
dotnet add package Microsoft.Agents.AI --prerelease

Konfiguration

GOOGLE_GENAI_API_KEY="<google-ai-studio-api-key>"
GOOGLE_GENAI_MODEL="gemini-2.5-flash"
const string JokerInstructions = "You are good at telling jokes.";
const string JokerName = "JokerAgent";

string apiKey = Environment.GetEnvironmentVariable("GOOGLE_GENAI_API_KEY") ?? throw new InvalidOperationException("Please set the GOOGLE_GENAI_API_KEY environment variable.");
string model = Environment.GetEnvironmentVariable("GOOGLE_GENAI_MODEL") ?? "gemini-2.5-flash";

// Using a Google GenAI IChatClient implementation

ChatClientAgent agentGenAI = new(
    new Client(vertexAI: false, apiKey: apiKey).AsIChatClient(model),
    name: JokerName,
    instructions: JokerInstructions);

AgentResponse response = await agentGenAI.RunAsync("Tell me a joke about a pirate.");
Console.WriteLine($"Google GenAI client based agent response:\n{response}");

// Using a community driven Mscc.GenerativeAI.Microsoft package

ChatClientAgent agentCommunity = new(
    new GeminiChatClient(apiKey: apiKey, model: model),
    name: JokerName,
    instructions: JokerInstructions);

response = await agentCommunity.RunAsync("Tell me a joke about a pirate.");
Console.WriteLine($"Community client based agent response:\n{response}");

Wählen Sie eine IChatClient Implementierung aus, und konfigurieren Sie die Gemini Developer API oder die Vertex AI-Authentifizierung.

Installiere das Paket

pip install agent-framework-gemini --pre

Konfiguration

Verwenden Sie entweder die Gemini-Entwickler-API:

GOOGLE_API_KEY="<api-key>"
GOOGLE_MODEL="gemini-2.5-flash"

Oder konfigurieren Sie die Gemini Enterprise Agent-Plattform:

GOOGLE_GENAI_USE_ENTERPRISE="true"
GOOGLE_CLOUD_PROJECT="<project-id>"
GOOGLE_CLOUD_LOCATION="global"
GOOGLE_MODEL="gemini-2.5-flash"

Die ältere GOOGLE_GENAI_USE_VERTEXAI=true Einstellung wird weiterhin unterstützt. Der Konnektor liest GEMINI_API_KEY, GEMINI_MODEL oder GEMINI_EMBEDDING_MODEL nicht mehr; verwenden Sie die entsprechenden Variablen GOOGLE_* oder übergeben Sie Werte explizit.

GeminiChatClient unterstützt Streaming, Funktionstools, strukturierte Ausgabe, erweitertes Denken und vom Anbieter gehostete Tools.

    """Runs the agent and waits for the complete response before printing it."""
    print("=== Non-streaming ===")

    # 1. Create the agent with the Gemini chat client and local weather tool.
    agent = Agent(
        client=GeminiChatClient(),
        name="WeatherAgent",
        instructions="You are a helpful weather agent.",
        tools=[get_weather],
    )

    # 2. Ask the agent for a single weather lookup and print the final response.
    query = "What's the weather like in Karlsruhe, Germany?"
    print(f"User: {query}")
    result = await agent.run(query)
    print(f"Result: {result}\n")


async def streaming_example() -> None:
    """Runs the agent and prints each chunk as it is received."""
    print("=== Streaming ===")

    # 1. Create the same agent configuration for a streaming tool-call example.
    agent = Agent(
        client=GeminiChatClient(),
        name="WeatherAgent",
        instructions="You are a helpful weather agent.",
        tools=[get_weather],
    )

    # 2. Ask a multi-location question and stream the model output as it arrives.
    query = "What's the weather like in Portland and in Paris?"
    print(f"User: {query}")
    print("Agent: ", end="", flush=True)
    async for chunk in agent.run(query, stream=True):
        if chunk.text:
            print(chunk.text, end="", flush=True)
    print("\n")

Anfragefehler behandeln

Für Streaming- und Nicht-Streamingausführungen werden Gemini SDK-Anforderungsfehler über Agent Framework-Ausnahmen verfügbar gemacht. HTTP-401- und -403-Fehler lösen ChatClientInvalidAuthException aus, andere HTTP-4xx-Fehler lösen ChatClientInvalidRequestException aus, und alle anderen Providerfehler lösen ChatClientException aus.

Verwenden Sie ChatClientException, wenn dieselbe Fehlerbehandlung für alle Chat-Anbieter gelten soll.

Gedankenzusammenfassungen einschließen

Das Beispiel für erweitertes Denken zeigt, wie ThinkingConfig konfiguriert wird. Um Zusammenfassungen der Gemini-Gedankengänge zu erhalten, setzen Sie include_thoughts=True in der Konfiguration des Denkprozesses fest:

options: GeminiChatOptions = {
    "thinking_config": ThinkingConfig(include_thoughts=True, thinking_budget=2048),
}

Wenn Gemini eine Gedankenzusammenfassung ausgibt, fügt GeminiChatClient sie der Antwort als Content mit type == "text_reasoning" hinzu. Lesen Sie die Zusammenfassung von content.text.

Für einen Durchlauf ohne Streaming filtern Sie das contents jedes Elements in result.messages. Filtern Sie bei einem Streaming-Durchlauf jedes chunk.contents. Text-Accessoren wie result.text und chunk.text enthalten nur Inhalte aus text. Prüfen Sie daher die Inhaltssammlungen, wenn Ihre App Zusammenfassungen der Begründung benötigt.

Einbettungen generieren

GeminiEmbeddingClient verwendet standardmäßig gemini-embedding-2. Überschreiben Sie ihn mit GOOGLE_EMBEDDING_MODEL oder dem model Konstruktorparameter. Texteingaben erfordern bei jedem Aufruf einen Aufgabentyp; verwenden Sie RETRIEVAL_QUERY beim Indizieren und RETRIEVAL_DOCUMENT beim Durchsuchen desselben Vektorraums.


import asyncio

from agent_framework.gemini import GeminiEmbeddingClient
from dotenv import load_dotenv

load_dotenv()


async def main() -> None:
    """Embed a document and a search query for the same vector index."""
    # 1. Choose task instructions for each call, not for the client.
    client = GeminiEmbeddingClient()
    try:
        # 2. Use matching dimensions for stored documents and search queries.
        document = await client.get_embeddings(
            ["Agent Framework helps build and orchestrate AI agents."],
            options={"task_type": "RETRIEVAL_DOCUMENT", "title": "Agent Framework", "dimensions": 768},
        )
        query = await client.get_embeddings(
            ["How can I orchestrate AI agents?"],
            options={"task_type": "RETRIEVAL_QUERY", "dimensions": 768},
        )
        print(f"Document embedding: {document[0].dimensions} dimensions")
        print(f"Query embedding: {query[0].dimensions} dimensions")

Verwenden Sie dasselbe Modell und dieselben Dimensionen für Dokument- und Abfrageeinbettungen. Der Client akzeptiert auch Google SDK-Medien Part und Content -Werte für Bild-, Audio-, Video-, PDF- oder kombinierte Text- und Medieneinbettungen. Medieneingaben verwenden kein Textaufgabenpräfix.

Wenn eine Vektorsammlung Einbettungen generiert, leiten Sie die Dokumentaufgabe über upsert(..., embeddings_options=...) und die Abfrageaufgabe über search(..., embeddings_options=...) oder create_vector_search_tool(..., embeddings_options=...). Verwenden Sie embeddings_options_by_fieldfür mehrere Vektorfelder . Agent Framework liefert die Dimensionen des ausgewählten Felds und lehnt widersprüchliche Werte ab.

Das Paket umfasst Factorys für das Grounding der Google-Suche, das Google Maps-Grounding, die Codeausführung, Dateisuche und MCP.

Grounding der Google-Suche


from agent_framework import Agent
from agent_framework.gemini import GeminiChatClient
from dotenv import load_dotenv

load_dotenv()


async def main() -> None:
    """Run the Google Search grounding example."""
    print("=== Google Search grounding ===")

    # 1. Create the agent with Gemini and the built-in Google Search grounding tool.
    agent = Agent(
        client=GeminiChatClient(),
        name="SearchAgent",
        instructions="You are a helpful assistant. Use Google Search to provide accurate, up-to-date answers.",
        tools=[GeminiChatClient.get_web_search_tool()],
    )

    # 2. Ask a current-events style question and stream the grounded answer.
    query = "What is the latest stable release of the .NET SDK?"
    print(f"User: {query}")
    print("Agent: ", end="", flush=True)
    async for chunk in agent.run(query, stream=True):
        if chunk.text:
            print(chunk.text, end="", flush=True)
    print("\n")


if __name__ == "__main__":
    asyncio.run(main())

Das Go SDK bietet geminiprovider für die Gemini-Inferenz. Erstellen Sie einen Standard *agent.Agent über den anbieterspezifischen Konstruktor.

Sehen Sie sich das Gemini-Anbieterpaket und Beispiele an.

Tools

Tool C# Python Go Hinweise
Funktionswerkzeuge ✅ ✅ ✅ Aufrufen der Standardmodellfunktion.
Toolgenehmigung ✅ ✅ ✅ Wird von der Framework-Toolschleife angewendet.
Codedolmetscher ❌ ✅ ❌ GeminiChatClient.get_code_interpreter_tool().
Dateisuche ❌ ✅ ❌ GeminiChatClient.get_file_search_tool().
Websuche ❌ ✅ ❌ Grounding der Google-Suche über get_web_search_tool().
Google Maps-Grounding ❌ ✅ ❌ GeminiChatClient.get_maps_grounding_tool().
Gehostete MCP-Tools ❌ ✅ ❌ GeminiChatClient.get_mcp_tool().
Lokale MCP-Tools ✅ ✅ ✅ Wird im Anwendungsprozess ausgeführt.

Nächste Schritte