Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Google Gemini может обеспечивать работу агента, созданного с помощью Agent Framework, через Gemini Developer API или Gemini Enterprise Agent Platform (ранее Vertex AI). Клиент для конкретного поставщика обрабатывает аутентификацию и параметры запросов Gemini, в то время как Agent Framework отвечает за определение агента и оркестрацию.
Это важно
Google Gemini и Vertex AI являются сторонними системами. Просмотрите условия обслуживания, обработку данных, региональные границы, доступ к модели и затраты на использование перед отправкой данных приложения.
Установите Gemini IChatClient
Пример .NET демонстрирует официальный клиент Google GenAI и реализацию сообществаMscc.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}");
Выберите одну реализацию IChatClient и настройте Gemini Developer API или аутентификацию в Vertex AI.
Установите пакет
pip install agent-framework-gemini --pre
Configuration
Используйте либо API разработчика Gemini:
GOOGLE_API_KEY="<api-key>"
GOOGLE_MODEL="gemini-2.5-flash"
Или настройте платформу агента Gemini Enterprise:
GOOGLE_GENAI_USE_ENTERPRISE="true"
GOOGLE_CLOUD_PROJECT="<project-id>"
GOOGLE_CLOUD_LOCATION="global"
GOOGLE_MODEL="gemini-2.5-flash"
Старый GOOGLE_GENAI_USE_VERTEXAI=true параметр остается поддерживаемым. Коннектор больше не считывает GEMINI_API_KEY, GEMINI_MODEL или GEMINI_EMBEDDING_MODEL; используйте соответствующие переменные GOOGLE_* или передавайте значения явно.
GeminiChatClient поддерживает потоковую передачу, средства функций, структурированные выходные данные, расширенные средства мышления и средства, размещенные у поставщика.
"""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")
Обработка сбоев запросов
При потоковых и непотоковых запусках ошибки запросов Gemini SDK передаются через исключения Agent Framework. Сбои HTTP 401 и 403 вызывают ChatClientInvalidAuthException, другие сбои HTTP 4xx вызывают ChatClientInvalidRequestException, а все остальные сбои поставщика вызывают ChatClientException.
Используйте ChatClientException, когда одна и та же обработка ошибок должна применяться для разных поставщиков чатов.
Включить сводки мыслей
В примере расширенного мышления показано, как настроить ThinkingConfig. Чтобы получать сводки рассуждений Gemini, задайте include_thoughts=True в конфигурации рассуждений:
options: GeminiChatOptions = {
"thinking_config": ThinkingConfig(include_thoughts=True, thinking_budget=2048),
}
Когда Gemini возвращает сводку рассуждений, GeminiChatClient включает её в ответ в виде Content с type == "text_reasoning". Прочитайте сводку от content.text.
Для запуска без потоковой передачи отфильтруйте contents каждого элемента в result.messages. Для выполнения потоковой передачи фильтруйте каждый chunk.contentsиз них. Такие средства доступа к тексту, как result.text и chunk.text, включают только содержимое text, поэтому, если вашему приложению нужны сводки рассуждений, проверяйте коллекции содержимого.
Генерация эмбеддингов
GeminiEmbeddingClient используется gemini-embedding-2 по умолчанию. Переопределите это с помощью GOOGLE_EMBEDDING_MODEL или параметра конструктора model. Для ввода текста требуется тип задачи для каждого вызова; используется RETRIEVAL_DOCUMENT при индексировании и RETRIEVAL_QUERY при поиске одного векторного пространства.
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")
Используйте одну и ту же модель и размерность для эмбеддингов документов и запросов. Клиент также принимает значения Part и Content из Google SDK для мультимедиа для изображений, аудио, видео, PDF-файлов или комбинированных эмбеддингов текста и мультимедиа. Мультимедийные входные данные не используют префикс для текстовой задачи.
Когда коллекция векторов генерирует эмбеддинги, передавайте задачу для документа через upsert(..., embeddings_options=...), а задачу для запроса — через search(..., embeddings_options=...) или create_vector_search_tool(..., embeddings_options=...). Для нескольких векторных полей используйте embeddings_options_by_field. Agent Framework предоставляет измерения выбранного поля и отклоняет конфликтующие значения.
Пакет включает фабрики для подключения к Google Search, подключения к Google Maps, выполнения кода, поиска файлов и MCP.
Обоснование с помощью Поиска Google
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 предоставляет geminiprovider для инференса Gemini. Создайте стандарт *agent.Agent с помощью конструктора для конкретного поставщика.
Ознакомьтесь с пакетом и примерамипоставщика Gemini.
Tools
| инструмент | C# | Python | Go | Notes |
|---|---|---|---|---|
| Средства функций | ✅ | ✅ | ✅ | Вызов функций стандартной модели. |
| Утверждение инструмента | ✅ | ✅ | ✅ | Применяется циклом инструментов фреймворка. |
| Интерпретатор кода | ❌ | ✅ | ❌ |
GeminiChatClient.get_code_interpreter_tool(). |
| Поиск файлов | ❌ | ✅ | ❌ |
GeminiChatClient.get_file_search_tool(). |
| Поиск в Интернете | ❌ | ✅ | ❌ | Обоснование через get_web_search_tool() Google Search. |
| Привязка к Google Maps | ❌ | ✅ | ❌ |
GeminiChatClient.get_maps_grounding_tool(). |
| Размещенные средства MCP | ❌ | ✅ | ❌ |
GeminiChatClient.get_mcp_tool(). |
| Локальные средства MCP | ✅ | ✅ | ✅ | Выполняется в процессе приложения. |