Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Google Gemini a Gemini Developer API-n vagy a Gemini Enterprise Agent Platformon (korábbi nevén Vertex AI) keresztül is vissza tud állítani egy Ügynök-keretrendszer-ügynököt. A szolgáltatóspecifikus ügyfél kezeli a hitelesítési és Gemini-kérési beállításokat, míg az Agent Framework az ügynökdefiníció és a vezénylés tulajdonosa.
Important
A Google Gemini és a Vertex AI külső rendszerek. Az alkalmazásadatok elküldése előtt tekintse át a szolgáltatási feltételeket, az adatkezelést, a regionális határokat, a modellhozzáférést és a használati költségeket.
Gemini telepítése IChatClient
A .NET minta bemutatja a Hivatalos Google GenAI-ügyfelet és a közösségi Mscc.GenerativeAI.Microsoft megvalósítást.
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álasszon ki egy implementációt IChatClient , és konfigurálja a Gemini Developer API-t vagy a Vertex AI-hitelesítést.
A csomag telepítése
pip install agent-framework-gemini --pre
Configuration
Használja a Gemini Developer API-t:
GOOGLE_API_KEY="<api-key>"
GOOGLE_MODEL="gemini-2.5-flash"
Vagy konfigurálja a Gemini Enterprise Agent Platformot:
GOOGLE_GENAI_USE_ENTERPRISE="true"
GOOGLE_CLOUD_PROJECT="<project-id>"
GOOGLE_CLOUD_LOCATION="global"
GOOGLE_MODEL="gemini-2.5-flash"
A régebbi GOOGLE_GENAI_USE_VERTEXAI=true beállítás továbbra is támogatott. Az összekötő többé nem olvassa a(z) GEMINI_MODEL, GOOGLE_* vagy GEMINI_API_KEY elemet; használja a megfelelő GEMINI_EMBEDDING_MODEL változókat, vagy adja meg az értékeket explicit módon.
GeminiChatClient támogatja a streamelést, a függvényeszközöket, a strukturált kimenetet, a kiterjesztett gondolkodást és a szolgáltató által üzemeltetett eszközöket.
"""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")
Kéréshibák kezelése
Streaming és nem streaming futtatások esetén a Gemini SDK-kérések hibái az Agent Framework kivételei formájában jelennek meg. HTTP 401 és 403 hibák keletkeznek ChatClientInvalidAuthException, más HTTP 4xx hibák merülnek fel ChatClientInvalidRequestException, és minden más szolgáltatói hiba jelentkezik ChatClientException.
Használja a(z) ChatClientException elemet, ha ugyanazt a hibakezelést kell alkalmazni a különböző csevegési szolgáltatók esetében.
Gondolatösszegzők belefoglalása
A kiterjesztett gondolkodási minta bemutatja, hogyan konfigurálható ThinkingConfig. A Gemini-gondolatösszegzők fogadásához állítsa be include_thoughts=True a gondolkodási konfigurációt:
options: GeminiChatOptions = {
"thinking_config": ThinkingConfig(include_thoughts=True, thinking_budget=2048),
}
Amikor a Gemini visszaküld egy gondolat-összefoglalót, GeminiChatClient hozzáadja azt a válaszhoz type == "text_reasoning"ként, Content-vel. Olvassa el a(z) content.text összefoglalóját.
Streamelés nélküli futtatás esetén szűrje az egyes elemeket a contents fájlban result.messages. Streaming futás esetén szűrje az egyes chunk.contents elemeket. A result.text és chunk.text szöveg-hozzáférők csak text tartalmat tartalmaznak, ezért vizsgálja meg a tartalomgyűjteményeket, amikor az alkalmazásnak következtetési összefoglalókra van szüksége.
Beágyazások létrehozása
GeminiEmbeddingClient alapértelmezés szerint használja gemini-embedding-2 . Felülírhatja a model elemmel vagy a GOOGLE_EMBEDDING_MODEL konstruktorparaméterrel. A szöveges bemenetek esetén minden hívásnál meg kell adni egy feladattípust; indexeléskor használja a RETRIEVAL_QUERY értéket, és ugyanabban a vektortérben történő kereséskor a RETRIEVAL_DOCUMENT értéket.
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")
Használja ugyanazt a modellt és dimenziót a dokumentum- és lekérdezésbeágyazásokhoz. Az ügyfél emellett elfogadja a Google SDK médiatartalmait Part és Content értékeit kép-, hang-, video-, PDF- vagy kombinált szöveg- és médiabeágyazásokhoz. A médiabemenetek nem használnak szöveges feladatelőtagot.
Amikor egy vektorgyűjtemény beágyazásokat hoz létre, a dokumentumfeladatot a upsert(..., embeddings_options=...) használatával, a lekérdezési feladatot pedig a search(..., embeddings_options=...) vagy create_vector_search_tool(..., embeddings_options=...) használatával adja át. Több vektormező esetén használja a következőt embeddings_options_by_field: . Az Agent Framework biztosítja a kijelölt mező dimenzióit, és elutasítja az ütköző értékeket.
A csomag tartalmazza a Google Search földeléséhez, a Google Maps földeléséhez, a kódvégrehajtáshoz, a fájlkereséshez és az MCP-hez szükséges gyárakat.
A Google Search alapozása
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())
A Go SDK gemini következtetést biztosít geminiprovider . Hozzon létre egy szabványt *agent.Agent a szolgáltatóspecifikus konstruktoron keresztül.
Tekintse meg a Gemini szolgáltatói csomagot és példákat.
Tools
| Eszköz | C# | Python | Go | Notes |
|---|---|---|---|---|
| Funktionális eszközök | ✅ | ✅ | ✅ | Standard modellfüggvény hívása. |
| Eszköz jóváhagyása | ✅ | ✅ | ✅ | A keretrendszer eszközhurkja alkalmazza. |
| Kódértelmező | ❌ | ✅ | ❌ |
GeminiChatClient.get_code_interpreter_tool(). |
| Fájlkeresés | ❌ | ✅ | ❌ |
GeminiChatClient.get_file_search_tool(). |
| Webes keresés | ❌ | ✅ | ❌ | Google Search alapozó keresztül get_web_search_tool(). |
| Google Térkép alapú lehorgonyzás | ❌ | ✅ | ❌ |
GeminiChatClient.get_maps_grounding_tool(). |
| Üzemeltetett MCP-eszközök | ❌ | ✅ | ❌ |
GeminiChatClient.get_mcp_tool(). |
| Helyi MCP-eszközök | ✅ | ✅ | ✅ | Az alkalmazás folyamatában fut. |