Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Google Gemini kan een Agent Framework-agent terugzetten via de Gemini Developer API of Gemini Enterprise Agent Platform (voorheen Vertex AI). De providerspecifieke client verwerkt verificatie- en Gemini-aanvraagopties terwijl Agent Framework eigenaar is van de agentdefinitie en indeling.
Belangrijk
Google Gemini en Vertex AI zijn systemen van derden. Bekijk servicevoorwaarden, gegevensverwerking, regionale grenzen, modeltoegang en gebruikskosten voordat u toepassingsgegevens verzendt.
Een Gemini installeren IChatClient
Het .NET voorbeeld laat de officiële Google GenAI-client en de communityimplementatie Mscc.GenerativeAI.Microsoft zien.
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}");
Kies één IChatClient implementatie en configureer de Gemini Developer API of Vertex AI-verificatie.
Installeer het pakket
pip install agent-framework-gemini --pre
Configuration
Gebruik de Gemini Developer-API:
GOOGLE_API_KEY="<api-key>"
GOOGLE_MODEL="gemini-2.5-flash"
Of configureer het Gemini Enterprise Agent Platform:
GOOGLE_GENAI_USE_ENTERPRISE="true"
GOOGLE_CLOUD_PROJECT="<project-id>"
GOOGLE_CLOUD_LOCATION="global"
GOOGLE_MODEL="gemini-2.5-flash"
De oudere GOOGLE_GENAI_USE_VERTEXAI=true instelling blijft ondersteund. De connector leest GEMINI_API_KEY, GEMINI_MODEL of GEMINI_EMBEDDING_MODEL niet meer; gebruik de overeenkomstige GOOGLE_*-variabelen of geef waarden expliciet door.
GeminiChatClient ondersteunt streaming, functiehulpprogramma's, gestructureerde uitvoer, uitgebreid denken en door providers gehoste hulpprogramma's.
"""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")
Aanvraagfouten verwerken
Voor streaming- en niet-streaminguitvoeringen worden Gemini SDK-aanvraagfouten weergegeven via Agent Framework-uitzonderingen. HTTP 401- en 403-fouten leiden tot ChatClientInvalidAuthException, andere HTTP 4xx-fouten leiden tot ChatClientInvalidRequestException, en alle andere fouten van de provider leiden tot ChatClientException.
Gebruik ChatClientException wanneer dezelfde foutafhandeling moet gelden voor meerdere chatproviders.
Denksamenvattingen opnemen
Het uitgebreide denkvoorbeeld laat zien hoe u deze kunt configureren ThinkingConfig. Als u gedachtensamenvattingen van Gemini wilt ontvangen, stelt u include_thoughts=True deze in de denkconfiguratie in:
options: GeminiChatOptions = {
"thinking_config": ThinkingConfig(include_thoughts=True, thinking_budget=2048),
}
Wanneer Gemini een gedachtesamenvatting retourneert, GeminiChatClient voegt u deze toe aan het antwoord zoals Content bij type == "text_reasoning". Lees de samenvatting van content.text.
Voor een uitvoering zonder streaming filtert u het contents van elk item in result.messages. Voor een streaming-run filtert u elke chunk.contents. Tekstaccessors zoals result.text en chunk.text bevatten alleen inhoud van text, dus inspecteer de inhoudscollecties wanneer uw app redeneersamenvattingen nodig heeft.
Embeddings genereren
GeminiEmbeddingClient maakt standaard gebruik gemini-embedding-2 van. Overschrijf het met GOOGLE_EMBEDDING_MODEL of de constructorparameter model. Voor tekstinvoer is een taaktype vereist voor elke aanroep; gebruiken RETRIEVAL_DOCUMENT bij het indexeren en RETRIEVAL_QUERY zoeken in dezelfde vectorruimte.
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")
Gebruik hetzelfde model en dezelfde dimensies voor document- en query-insluitingen. De client accepteert ook Google SDK-media Part en Content -waarden voor afbeeldingen, audio, video, PDF of gecombineerde tekst- en media-insluitingen. Media-invoer gebruikt geen teksttaakvoorvoegsel.
Wanneer een vectorverzameling embeddings genereert, geeft u de documenttaak via upsert(..., embeddings_options=...) door en de querytaak via search(..., embeddings_options=...) of create_vector_search_tool(..., embeddings_options=...). Gebruik embeddings_options_by_fieldvoor meerdere vectorvelden . Agent Framework levert de dimensies van het geselecteerde veld en weigert conflicterende waarden.
Het pakket bevat factories voor Google Search-grounding, Google Maps-grounding, code-uitvoering, bestandszoekfunctie en MCP.
Google Search-gronding
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())
De SDK voor Go biedt geminiprovider voor Gemini-inferentie. Maak een standaard *agent.Agent via de providerspecifieke constructor.
Zie het Gemini-providerpakket en voorbeelden.
Tools
| Tool | C# | Python | Go | Opmerkingen |
|---|---|---|---|---|
| Functiehulpmiddelen | ✅ | ✅ | ✅ | Standaardfunctieaanroepen voor modellen. |
| Goedkeuring van hulpprogramma | ✅ | ✅ | ✅ | Toegepast door de frameworktoollus. |
| Code-interpreter | ❌ | ✅ | ❌ |
GeminiChatClient.get_code_interpreter_tool(). |
| Zoeken naar bestanden | ❌ | ✅ | ❌ |
GeminiChatClient.get_file_search_tool(). |
| Zoeken op internet | ❌ | ✅ | ❌ | Google Search-grounding via get_web_search_tool(). |
| Google Maps-gronding | ❌ | ✅ | ❌ |
GeminiChatClient.get_maps_grounding_tool(). |
| Gehoste MCP-tools | ❌ | ✅ | ❌ |
GeminiChatClient.get_mcp_tool(). |
| Lokale MCP-hulpprogramma's | ✅ | ✅ | ✅ | Wordt uitgevoerd in het toepassingsproces. |