Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Google Gemini kan stödja en Agent Framework-agent via Gemini Developer API eller Gemini Enterprise Agent Platform (tidigare Vertex AI). Den providerspecifika klienten hanterar autentiserings- och Gemini-begärandealternativ medan Agent Framework äger agentdefinitionen och orkestreringen.
Important
Google Gemini och Vertex AI är tredjepartssystem. Granska tjänstvillkor, datahantering, regionala gränser, modellåtkomst och användningskostnader innan du skickar programdata.
Installera Gemini IChatClient
Det .NET exemplet visar den officiella Google GenAI-klienten och communityimplementeringenMscc.GenerativeAI.Microsoft.
dotnet add package Google.GenAI
dotnet add package Mscc.GenerativeAI.Microsoft
dotnet add package Microsoft.Agents.AI --prerelease
Configuration
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}");
Välj en IChatClient implementering och konfigurera dess GEMINI Developer API eller Vertex AI-autentisering.
Installera paketet
pip install agent-framework-gemini --pre
Configuration
Använd antingen API:et Gemini Developer:
GOOGLE_API_KEY="<api-key>"
GOOGLE_MODEL="gemini-2.5-flash"
Eller konfigurera Gemini Enterprise Agent Platform:
GOOGLE_GENAI_USE_ENTERPRISE="true"
GOOGLE_CLOUD_PROJECT="<project-id>"
GOOGLE_CLOUD_LOCATION="global"
GOOGLE_MODEL="gemini-2.5-flash"
Den äldre GOOGLE_GENAI_USE_VERTEXAI=true inställningen stöds fortfarande. Anslutningsprogrammet läser inte längre GEMINI_API_KEY, GEMINI_MODEL eller GEMINI_EMBEDDING_MODEL; använd motsvarande GOOGLE_*-variabler eller skicka värden uttryckligen.
GeminiChatClient har stöd för strömning, funktionsverktyg, strukturerade utdata, utökat tänkande och verktyg som hanteras av leverantören.
"""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")
Hantera begärandefel
För strömnings- och icke-direktuppspelningskörningar exponeras Gemini SDK-begärandefel via Agent Framework-undantag. HTTP 401- och 403-fel genererar ChatClientInvalidAuthException, andra HTTP 4xx-fel genererar ChatClientInvalidRequestExceptionoch alla andra providerfel genererar ChatClientException.
Fånga ChatClientException när samma felhantering ska gälla hos olika chattleverantörer.
Inkludera tankesammanfattningar
Exemplet för utökat tänkande visar hur du konfigurerar ThinkingConfig. För att få tankesammanfattningar för Gemini anger du include_thoughts=True i tankekonfigurationen:
options: GeminiChatOptions = {
"thinking_config": ThinkingConfig(include_thoughts=True, thinking_budget=2048),
}
När Gemini ger en tankesammanfattning lägger GeminiChatClient till den i svaret som Content med type == "text_reasoning". Läs sammanfattningen från content.text.
För en körning utan strömning filtrerar du contents för varje objekt i result.messages. Filtrera varje chunk.contentsför en direktuppspelningskörning. Textåtkomster som result.text och chunk.text inkluderar endast text innehåll, så inspektera innehållssamlingarna när din app behöver motiveringssammanfattningar.
Generera inbäddningar
GeminiEmbeddingClient använder gemini-embedding-2 som standard. Åsidosätt den med GOOGLE_EMBEDDING_MODEL eller model konstruktorparametern. Textindata kräver en aktivitetstyp för varje anrop. används RETRIEVAL_DOCUMENT vid indexering och RETRIEVAL_QUERY vid sökning i samma vektorutrymme.
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")
Använd samma modell och dimensioner för inbäddningar av dokument och frågor. Klienten accepterar även Google SDK-media Part och Content värden för bild, ljud, video, PDF eller kombinerade text- och medieinbäddningar. Medieindata använder inte något prefix för textuppgifter.
När en vektorsamling genererar inbäddningar skickar du dokumentuppgiften genom upsert(..., embeddings_options=...) och frågeaktiviteten genom search(..., embeddings_options=...) eller create_vector_search_tool(..., embeddings_options=...). För flera vektorfält använder du embeddings_options_by_field. Agent Framework tillhandahåller det valda fältets dimensioner och avvisar motstridiga värden.
Paketet innehåller fabriker för Grundkörning i Google Search, Grundkörning av Google Maps, kodkörning, filsökning och MCP.
Förankring i Google Sök
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())
Go SDK:t tillhandahåller geminiprovider för Gemini-inferens. Skapa en standard *agent.Agent via den providerspecifika konstruktorn.
Se geminiproviderpaketet och exemplen.
Tools
| Tool | C# | Python | Go | Noteringar |
|---|---|---|---|---|
| Funktionsverktyg | ✅ | ✅ | ✅ | Funktionsanrop för standardmodell. |
| Godkännande av verktyg | ✅ | ✅ | ✅ | Används av ramverksverktygets loop. |
| Kodtolkare | ❌ | ✅ | ❌ |
GeminiChatClient.get_code_interpreter_tool(). |
| Filsökning | ❌ | ✅ | ❌ |
GeminiChatClient.get_file_search_tool(). |
| Webbsökning | ❌ | ✅ | ❌ | Google Search-förankring via get_web_search_tool(). |
| Grundläggning av Google Maps | ❌ | ✅ | ❌ |
GeminiChatClient.get_maps_grounding_tool(). |
| Värdhanterade MCP-verktyg | ❌ | ✅ | ❌ |
GeminiChatClient.get_mcp_tool(). |
| Lokala MCP-verktyg | ✅ | ✅ | ✅ | Körs i programprocessen. |