Агент Gemini Deep Research самостоятельно планирует, выполняет и обобщает многоэтапные исследовательские задачи. Он использует Gemini, чтобы ориентироваться в сложных информационных ландшафтах и создавать подробные отчеты со ссылками. Новые возможности позволяют совместно планировать задачи с агентом, подключаться к внешним инструментам с помощью MCP-серверов, добавлять визуализации (например, диаграммы и графики) и предоставлять документы непосредственно в качестве входных данных.
Для выполнения исследовательских задач требуется многократный поиск и чтение, поэтому они могут занимать несколько минут. Чтобы запустить агента асинхронно и получать результаты или обновления, необходимо использовать фоновое выполнение (установите значение background=true). Подробнее о том, как работать с длительными задачами…
В примере ниже показано, как запустить задачу исследования в фоновом режиме и получить результаты.
Python
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
input="Research the history of Google TPUs.",
agent="deep-research-preview-04-2026",
background=True,
)
print(f"Research started: {interaction.id}")
while True:
interaction = client.interactions.get(interaction.id)
if interaction.status == "completed":
print(interaction.steps[-1].content[0].text)
break
elif interaction.status == "failed":
print(f"Research failed: {interaction.error}")
break
time.sleep(10)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
input: 'Research the history of Google TPUs.',
agent: 'deep-research-preview-04-2026',
background: true
});
console.log(`Research started: ${interaction.id}`);
while (true) {
const result = await client.interactions.get(interaction.id);
if (result.status === 'completed') {
console.log(result.steps.at(-1).content[0].text);
break;
} else if (result.status === 'failed') {
console.log(`Research failed: ${result.error}`);
break;
}
await new Promise(resolve => setTimeout(resolve, 10000));
}
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
import java.util.Collections;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Research the history of Google TPUs."))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println("Research started: " + interaction.id().orElse(""));
while (true) {
interaction =
client.interactions
.get(GetInteractionByIdRequest.builder().id(interaction.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(interaction.status().orElse(null))) {
System.out.println(interaction.outputText().orElse(""));
break;
} else if (InteractionStatus.FAILED.equals(interaction.status().orElse(null))) {
System.out.println("Research failed: " + interaction.errors().orElse(Collections.emptyList()));
break;
}
Thread.sleep(10000);
}
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Research the history of Google TPUs."),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
interaction := res.Interaction
if interaction.ID != nil {
fmt.Printf("Research started: %s\n", *interaction.ID)
}
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *interaction.ID,
})
if err != nil {
log.Fatal(err)
}
interaction = getRes.Interaction
if interaction.Status == interactions.InteractionStatusCompleted {
if interaction.OutputText != nil {
fmt.Println(*interaction.OutputText)
}
break
} else if interaction.Status == interactions.InteractionStatusFailed {
fmt.Printf("Research failed: %v\n", interaction.Errors)
break
}
time.Sleep(10 * time.Second)
}
}
REST
# 1. Start the research task
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Research the history of Google TPUs.",
"agent": "deep-research-preview-04-2026",
"background": true
}'
# 2. Poll for results (Replace INTERACTION_ID)
# curl -X GET "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID" \
# -H "x-goog-api-key: $GEMINI_API_KEY"
Поддерживаемые версии
Агент Deep Research доступен в двух версиях:
- Deep Research (
deep-research-preview-04-2026) – быстрая и эффективная модель, которая идеально подходит для потоковой передачи данных в интерфейс клиента. - Deep Research Max (
deep-research-max-preview-04-2026): максимальная полнота автоматического сбора и синтеза контекста.
Совместное планирование
Совместное планирование позволяет контролировать направление исследования до того, как агент начнет работу. Вы можете просматривать и уточнять план исследования до его выполнения. Если эта функция включена, агент возвращает предложенный план исследования, а не выполняет его немедленно. Затем вы можете проверить, изменить или одобрить план в ходе пошагового взаимодействия.
Шаг 1. Запросите план
Установите значение collaborative_planning=True при первом взаимодействии. Агент
возвращает план исследования вместо полного отчета.
Python
from google import genai
client = genai.Client()
# First interaction: request a research plan
plan_interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Do some research on Google TPUs.",
agent_config={
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": True,
},
background=True,
)
# Wait for and retrieve the plan
while (result := client.interactions.get(id=plan_interaction.id)).status != "completed":
time.sleep(5)
print(result.steps[-1].content[0].text)
JavaScript
const planInteraction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Do some research on Google TPUs.',
agent_config: {
type: 'deep-research',
thinking_summaries: 'auto',
collaborative_planning: true
},
background: true
});
let result;
while ((result = await client.interactions.get(planInteraction.id)).status !== 'completed') {
await new Promise(r => setTimeout(r, 5000));
}
console.log(result.steps.at(-1).content[0].text);
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
Client client = new Client();
// First interaction: request a research plan
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Do some research on Google TPUs."))
.agentConfig(
DeepResearchAgentConfig.builder()
.thinkingSummaries(ThinkingSummaries.AUTO)
.collaborativePlanning(true)
.build())
.background(true)
.build();
Interaction planInteraction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
// Wait for and retrieve the plan
Interaction result;
while (true) {
result =
client.interactions
.get(GetInteractionByIdRequest.builder().id(planInteraction.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(result.status().orElse(null))) {
break;
}
Thread.sleep(5000);
}
System.out.println(result.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
CollaborativePlanning: genai.Ptr(true),
})
// First interaction: request a research plan
planRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Do some research on Google TPUs."),
AgentConfig: &agentCfg,
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
// Wait for and retrieve the plan
var result *interactions.Interaction
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *planRes.Interaction.ID,
})
if err != nil {
log.Fatal(err)
}
result = getRes.Interaction
if result.Status == interactions.InteractionStatusCompleted {
break
}
time.Sleep(5 * time.Second)
}
if result.OutputText != nil {
fmt.Println(*result.OutputText)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Do some research on Google TPUs.",
"agent_config": {
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": true
},
"background": true
}'
Шаг 2. Уточните план (необязательно)
Используйте previous_interaction_id, чтобы продолжить разговор и доработать план. Чтобы остаться в режиме планирования, нажмите collaborative_planning=True.
Python
# Second interaction: refine the plan
refined_plan = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Focus more on the differences between Google TPUs and competitor hardware, and less on the history.",
agent_config={
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": True,
},
previous_interaction_id=plan_interaction.id,
background=True,
)
while (result := client.interactions.get(id=refined_plan.id)).status != "completed":
time.sleep(5)
print(result.steps[-1].content[0].text)
JavaScript
const refinedPlan = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Focus more on the differences between Google TPUs and competitor hardware, and less on the history.',
agent_config: {
type: 'deep-research',
thinking_summaries: 'auto',
collaborative_planning: true
},
previous_interaction_id: planInteraction.id,
background: true
});
let result;
while ((result = await client.interactions.get(refinedPlan.id)).status !== 'completed') {
await new Promise(r => setTimeout(r, 5000));
}
console.log(result.steps.at(-1).content[0].text);
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
Client client = new Client();
String planInteractionId = "PLAN_INTERACTION_ID";
// Second interaction: refine the plan
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(
InteractionsInput.of(
"Focus more on the differences between Google TPUs and competitor hardware, and less on the history."))
.agentConfig(
DeepResearchAgentConfig.builder()
.thinkingSummaries(ThinkingSummaries.AUTO)
.collaborativePlanning(true)
.build())
.previousInteractionId(planInteractionId)
.background(true)
.build();
Interaction refinedPlan =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Interaction result;
while (true) {
result =
client.interactions
.get(GetInteractionByIdRequest.builder().id(refinedPlan.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(result.status().orElse(null))) {
break;
}
Thread.sleep(5000);
}
System.out.println(result.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
planInteractionID := "PLAN_INTERACTION_ID"
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
CollaborativePlanning: genai.Ptr(true),
})
// Second interaction: refine the plan
refinedRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Focus more on the differences between Google TPUs and competitor hardware, and less on the history."),
AgentConfig: &agentCfg,
PreviousInteractionID: genai.Ptr(planInteractionID),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
var result *interactions.Interaction
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *refinedRes.Interaction.ID,
})
if err != nil {
log.Fatal(err)
}
result = getRes.Interaction
if result.Status == interactions.InteractionStatusCompleted {
break
}
time.Sleep(5 * time.Second)
}
if result.OutputText != nil {
fmt.Println(*result.OutputText)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Focus more on the differences between Google TPUs and competitor hardware, and less on the history.",
"agent_config": {
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": true
},
"previous_interaction_id": "PREVIOUS_INTERACTION_ID",
"background": true
}'
Шаг 3. Одобрение и выполнение
Установите значение collaborative_planning=False (или не указывайте его), чтобы одобрить план и начать исследование.
Python
# Third interaction: approve the plan and kick off research
final_report = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Plan looks good!",
agent_config={
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": False,
},
previous_interaction_id=refined_plan.id,
background=True,
)
while (result := client.interactions.get(id=final_report.id)).status != "completed":
time.sleep(5)
print(result.steps[-1].content[0].text)
JavaScript
const finalReport = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Plan looks good!',
agent_config: {
type: 'deep-research',
thinking_summaries: 'auto',
collaborative_planning: false
},
previous_interaction_id: refinedPlan.id,
background: true
});
let result;
while ((result = await client.interactions.get(finalReport.id)).status !== 'completed') {
await new Promise(r => setTimeout(r, 5000));
}
console.log(result.steps.at(-1).content[0].text);
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
Client client = new Client();
String refinedPlanId = "REFINED_PLAN_ID";
// Third interaction: approve the plan and kick off research
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Plan looks good!"))
.agentConfig(
DeepResearchAgentConfig.builder()
.thinkingSummaries(ThinkingSummaries.AUTO)
.collaborativePlanning(false)
.build())
.previousInteractionId(refinedPlanId)
.background(true)
.build();
Interaction finalReport =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Interaction result;
while (true) {
result =
client.interactions
.get(GetInteractionByIdRequest.builder().id(finalReport.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(result.status().orElse(null))) {
break;
}
Thread.sleep(5000);
}
System.out.println(result.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
refinedPlanID := "REFINED_PLAN_ID"
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
CollaborativePlanning: genai.Ptr(false),
})
// Third interaction: approve the plan and kick off research
finalRes, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Plan looks good!"),
AgentConfig: &agentCfg,
PreviousInteractionID: genai.Ptr(refinedPlanID),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
var result *interactions.Interaction
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *finalRes.Interaction.ID,
})
if err != nil {
log.Fatal(err)
}
result = getRes.Interaction
if result.Status == interactions.InteractionStatusCompleted {
break
}
time.Sleep(5 * time.Second)
}
if result.OutputText != nil {
fmt.Println(*result.OutputText)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Plan looks good!",
"agent_config": {
"type": "deep-research",
"thinking_summaries": "auto",
"collaborative_planning": false
},
"previous_interaction_id": "PREVIOUS_INTERACTION_ID",
"background": true
}'
Визуализация
Если для параметра visualization задано значение "auto", агент может создавать диаграммы, графики и другие визуальные элементы, чтобы подкрепить результаты исследования.
Сгенерированные изображения включаются в шаги ответа и передаются в виде дельт image. Чтобы получить наилучшие результаты, явно попросите добавить визуальные элементы в запрос, например: "Добавь диаграммы, показывающие тенденции за определенный период времени" или "Создай графики, сравнивающие долю рынка". Если для параметра visualization задано значение "auto", функция включена, но агент генерирует визуальные материалы, только когда это указано в запросе.
Python
import base64
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Analyze global semiconductor market trends. Include graphics showing market share changes.",
agent_config={
"type": "deep-research",
"visualization": "auto",
},
background=True,
)
print(f"Research started: {interaction.id}")
while (result := client.interactions.get(id=interaction.id)).status != "completed":
time.sleep(5)
for step in result.steps:
if step.type == "model_output":
for content_item in step.content:
if content_item.type == "text":
print(content_item.text)
elif content_item.type == "image" and content_item.data:
image_bytes = base64.b64decode(content_item.data)
print(f"Received image: {len(image_bytes)} bytes")
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Analyze global semiconductor market trends. Include graphics showing market share changes.',
agent_config: {
type: 'deep-research',
visualization: 'auto'
},
background: true
});
console.log(`Research started: ${interaction.id}`);
let result;
while ((result = await client.interactions.get(interaction.id)).status !== 'completed') {
await new Promise(r => setTimeout(r, 5000));
}
for (const step of result.steps) {
if (step.type === 'model_output') {
for (const contentItem of step.content) {
if (contentItem.type === 'text') {
console.log(contentItem.text);
} else if (contentItem.type === 'image' && contentItem.data) {
console.log(`[Image Output: ${contentItem.data.substring(0, 20)}...]`);
}
}
}
}
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.ImageContent;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.ModelOutputStep;
import com.google.genai.gaos.models.interactions.Step;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.Visualization;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
import java.util.Base64;
import java.util.Collections;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(
InteractionsInput.of(
"Analyze global semiconductor market trends. Include graphics showing market share changes."))
.agentConfig(DeepResearchAgentConfig.builder().visualization(Visualization.AUTO).build())
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println("Research started: " + interaction.id().orElse(""));
Interaction result;
while (true) {
result =
client.interactions
.get(GetInteractionByIdRequest.builder().id(interaction.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(result.status().orElse(null))) {
break;
}
Thread.sleep(5000);
}
for (Step step : result.steps().orElse(Collections.emptyList())) {
if (step instanceof ModelOutputStep) {
for (Content contentItem : ((ModelOutputStep) step).content().orElse(Collections.emptyList())) {
if (contentItem instanceof TextContent) {
System.out.println(((TextContent) contentItem).text().orElse(""));
} else if (contentItem instanceof ImageContent) {
ImageContent img = (ImageContent) contentItem;
if (img.data().isPresent()) {
byte[] imageBytes = Base64.getDecoder().decode(img.data().get());
System.out.println("Received image: " + imageBytes.length + " bytes");
}
}
}
}
}
Проложить маршрут
package main
import (
"context"
"encoding/base64"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
Visualization: interactions.VisualizationAuto.ToPointer(),
})
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Analyze global semiconductor market trends. Include graphics showing market share changes."),
AgentConfig: &agentCfg,
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.ID != nil {
fmt.Printf("Research started: %s\n", *res.Interaction.ID)
}
var result *interactions.Interaction
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *res.Interaction.ID,
})
if err != nil {
log.Fatal(err)
}
result = getRes.Interaction
if result.Status == interactions.InteractionStatusCompleted {
break
}
time.Sleep(5 * time.Second)
}
for _, step := range result.Steps {
if outStep := step.ModelOutputStep; outStep != nil {
for _, contentItem := range outStep.Content {
if textContent := contentItem.TextContent; textContent != nil {
fmt.Println(textContent.GetText())
} else if imgContent := contentItem.ImageContent; imgContent != nil && imgContent.Data != nil {
imageBytes, err := base64.StdEncoding.DecodeString(*imgContent.Data)
if err == nil {
fmt.Printf("Received image: %d bytes\n", len(imageBytes))
}
}
}
}
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Analyze global semiconductor market trends. Include graphics showing market share changes.",
"agent_config": {
"type": "deep-research",
"visualization": "auto"
},
"background": true
}'
Поддерживаемые инструменты
Deep Research поддерживает несколько встроенных и внешних инструментов. По умолчанию (если параметр tools не указан) у агента есть доступ к Google Поиску, URL-контексту и выполнению кода. Вы можете явно указать инструменты, чтобы ограничить или расширить возможности агента.
| Инструмент | Введите значение | Описание |
|---|---|---|
| Google Поиск | google_search |
Выполнять поиск в общедоступном интернете. Включено по умолчанию. |
| URL-контекст | url_context |
Чтение и краткий пересказ контента на веб-страницах. Включено по умолчанию. |
| Выполнение кода | code_execution |
Выполнять код для вычислений и анализа данных. Включено по умолчанию. |
| MCP-сервер | mcp_server |
подключаться к удаленным MCP-серверам для доступа к внешним инструментам; |
| Поиск файлов | file_search |
Поиск по загруженным документам. |
Google Поиск
Включите Google Поиск как единственный инструмент:
Python
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="What are the latest developments in quantum computing?",
tools=[{"type": "google_search"}],
background=True,
)
JavaScript
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'What are the latest developments in quantum computing?',
tools: [{ type: 'google_search' }],
background: true
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.GoogleSearch;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("What are the latest developments in quantum computing?"))
.tools(Arrays.asList(GoogleSearch.builder().build()))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("What are the latest developments in quantum computing?"),
Tools: []interactions.Tool{
interactions.NewTool(interactions.GoogleSearch{}),
},
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "What are the latest developments in quantum computing?",
"tools": [{"type": "google_search"}],
"background": true
}'
URL-контекст
Предоставьте агенту возможность читать и обобщать определенные веб-страницы:
Python
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Summarize the content of https://www.wikipedia.org/.",
tools=[{"type": "url_context"}],
background=True,
)
JavaScript
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Summarize the content of https://www.wikipedia.org/.',
tools: [{ type: 'url_context' }],
background: true
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.URLContext;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Summarize the content of https://www.wikipedia.org/."))
.tools(Arrays.asList(URLContext.builder().build()))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Summarize the content of https://www.wikipedia.org/."),
Tools: []interactions.Tool{
interactions.NewTool(interactions.URLContext{}),
},
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Summarize the content of https://www.wikipedia.org/.",
"tools": [{"type": "url_context"}],
"background": true
}'
Выполнение кода
Разрешите агенту выполнять код для вычислений и анализа данных:
Python
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Calculate the 50th Fibonacci number.",
tools=[{"type": "code_execution"}],
background=True,
)
JavaScript
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Calculate the 50th Fibonacci number.',
tools: [{ type: 'code_execution' }],
background: true
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CodeExecution;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Calculate the 50th Fibonacci number."))
.tools(Arrays.asList(CodeExecution.builder().build()))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Calculate the 50th Fibonacci number."),
Tools: []interactions.Tool{
interactions.NewTool(interactions.CodeExecution{}),
},
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Calculate the 50th Fibonacci number.",
"agent": "deep-research-preview-04-2026",
"tools": [{"type": "code_execution"}],
"background": true
}'
MCP-серверы
Подключаться к удаленным MCP-серверам, чтобы предоставить агенту доступ к внешним инструментам и сервисам.
Укажите сервер name и url в конфигурации инструментов. Вы также можете передавать учетные данные для аутентификации и ограничивать инструменты, которые может вызывать агент.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
type |
string |
Да | Необходимое значение: "mcp_server". |
name |
string |
Нет | Отображаемое название MCP-сервера. |
url |
string |
Нет | Полный URL конечной точки MCP-сервера. |
headers |
object |
Нет | Пары "ключ-значение", отправляемые в виде HTTP-заголовков с каждым запросом к серверу (например, токены аутентификации). |
allowed_tools |
array |
Нет | Ограничьте доступ агента к инструментам сервера. |
Как пользоваться отчетом
Python
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Check the status of my last server deployment.",
tools=[
{
"type": "mcp_server",
"name": "Deployment Tracker",
"url": "https://mcp.example.com/mcp",
"headers": {"Authorization": "Bearer my-token"},
}
],
background=True,
)
JavaScript
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Check the status of my last server deployment.',
tools: [
{
type: 'mcp_server',
name: 'Deployment Tracker',
url: 'https://mcp.example.com/mcp',
headers: { Authorization: 'Bearer my-token' }
}
],
background: true
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.MCPServer;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.Collections;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Check the status of my last server deployment."))
.tools(
Arrays.asList(
MCPServer.builder()
.name("Deployment Tracker")
.url("https://mcp.example.com/mcp")
.headers(Collections.singletonMap("Authorization", "Bearer my-token"))
.build()))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Check the status of my last server deployment."),
Tools: []interactions.Tool{
interactions.NewTool(interactions.MCPServer{
Name: genai.Ptr("Deployment Tracker"),
URL: genai.Ptr("https://mcp.example.com/mcp"),
Headers: map[string]string{
"Authorization": "Bearer my-token",
},
}),
},
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": "Check the status of my last server deployment.",
"tools": [
{
"type": "mcp_server",
"name": "Deployment Tracker",
"url": "https://mcp.example.com/mcp",
"headers": {"Authorization": "Bearer my-token"}
}
],
"background": true
}'
Поиск файлов
Предоставьте агенту доступ к своим данным с помощью инструмента Поиск файлов.
Python
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
input="Compare our 2025 fiscal year report against current public web news.",
agent="deep-research-preview-04-2026",
background=True,
tools=[
{
"type": "file_search",
"file_search_store_names": ['fileSearchStores/my-store-name']
}
]
)
JavaScript
const interaction = await client.interactions.create({
input: 'Compare our 2025 fiscal year report against current public web news.',
agent: 'deep-research-preview-04-2026',
background: true,
tools: [
{ type: 'file_search', file_search_store_names: ['fileSearchStores/my-store-name'] },
]
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.FileSearch;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(
InteractionsInput.of(
"Compare our 2025 fiscal year report against current public web news."))
.tools(
Arrays.asList(
FileSearch.builder()
.fileSearchStoreNames(Arrays.asList("fileSearchStores/my-store-name"))
.build()))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Compare our 2025 fiscal year report against current public web news."),
Tools: []interactions.Tool{
interactions.NewTool(interactions.FileSearch{
FileSearchStoreNames: []string{"fileSearchStores/my-store-name"},
}),
},
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Compare our 2025 fiscal year report against current public web news.",
"agent": "deep-research-preview-04-2026",
"background": true,
"tools": [
{"type": "file_search", "file_search_store_names": ["fileSearchStores/my-store-name"]},
]
}'
Управляемость и форматирование
Вы можете управлять выводом агента, предоставляя конкретные инструкции по форматированию в запросе. Это позволяет структурировать отчеты по разделам и подразделам, включать таблицы с данными или менять тон для разных аудиторий (например, "технический", "для руководителей", "неформальный").
Явно укажите желаемый формат вывода в исходном тексте.
Python
prompt = """
Research the competitive landscape of EV batteries.
Format the output as a technical report with the following structure:
1. Executive Summary
2. Key Players (Must include a data table comparing capacity and chemistry)
3. Supply Chain Risks
"""
interaction = client.interactions.create(
input=prompt,
agent="deep-research-preview-04-2026",
background=True
)
JavaScript
const prompt = `
Research the competitive landscape of EV batteries.
Format the output as a technical report with the following structure:
1. Executive Summary
2. Key Players (Must include a data table comparing capacity and chemistry)
3. Supply Chain Risks
`;
const interaction = await client.interactions.create({
input: prompt,
agent: 'deep-research-preview-04-2026',
background: true,
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
String prompt =
"Research the competitive landscape of EV batteries.\n\n"
+ "Format the output as a technical report with the following structure:\n"
+ "1. Executive Summary\n"
+ "2. Key Players (Must include a data table comparing capacity and chemistry)\n"
+ "3. Supply Chain Risks";
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of(prompt))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
prompt := "Research the competitive landscape of EV batteries.\n\n" +
"Format the output as a technical report with the following structure:\n" +
"1. Executive Summary\n" +
"2. Key Players (Must include a data table comparing capacity and chemistry)\n" +
"3. Supply Chain Risks"
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput(prompt),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Research the competitive landscape of EV batteries.\n\nFormat the output as a technical report with the following structure: \n1. Executive Summary\n2. Key Players (Must include a data table comparing capacity and chemistry)\n3. Supply Chain Risks",
"agent": "deep-research-preview-04-2026",
"background": true
}'
Мультимодальные входные данные
Deep Research поддерживает мультимодальные входные данные, включая изображения и документы (PDF), что позволяет агенту анализировать визуальный контент и проводить веб-исследования с учетом контекста, предоставленного входными данными.
Python
import time
from google import genai
client = genai.Client()
prompt = """Analyze the interspecies dynamics and behavioral risks present
in the provided image of the African watering hole. Specifically, investigate
the symbiotic relationship between the avian species and the pachyderms
shown, and conduct a risk assessment for the reticulated giraffes based on
their drinking posture relative to the specific predator visible in the
foreground."""
interaction = client.interactions.create(
input=[
{"type": "text", "text": prompt},
{
"type": "image",
"mime_type": "image/jpeg",
"uri": "https://storage.googleapis.com/generativeai-downloads/images/generated_elephants_giraffes_zebras_sunset.jpg"
}
],
agent="deep-research-preview-04-2026",
background=True
)
print(f"Research started: {interaction.id}")
while True:
interaction = client.interactions.get(interaction.id)
if interaction.status == "completed":
print(interaction.steps[-1].content[0].text)
break
elif interaction.status == "failed":
print(f"Research failed: {interaction.error}")
break
time.sleep(10)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const prompt = `Analyze the interspecies dynamics and behavioral risks present
in the provided image of the African watering hole. Specifically, investigate
the symbiotic relationship between the avian species and the pachyderms
shown, and conduct a risk assessment for the reticulated giraffes based on
their drinking posture relative to the specific predator visible in the
foreground.`;
const interaction = await client.interactions.create({
input: [
{ type: 'text', text: prompt },
{
type: 'image',
mime_type: "image/jpeg",
uri: 'https://storage.googleapis.com/generativeai-downloads/images/generated_elephants_giraffes_zebras_sunset.jpg'
}
],
agent: 'deep-research-preview-04-2026',
background: true
});
console.log(`Research started: ${interaction.id}`);
while (true) {
const result = await client.interactions.get(interaction.id);
if (result.status === 'completed') {
console.log(result.steps.at(-1).content[0].text);
break;
} else if (result.status === 'failed') {
console.log(`Research failed: ${result.error}`);
break;
}
await new Promise(resolve => setTimeout(resolve, 10000));
}
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.ImageContent;
import com.google.genai.gaos.models.interactions.ImageContentMimeType;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
import java.util.Arrays;
import java.util.Collections;
Client client = new Client();
String prompt =
"Analyze the interspecies dynamics and behavioral risks present "
+ "in the provided image of the African watering hole. Specifically, investigate "
+ "the symbiotic relationship between the avian species and the pachyderms "
+ "shown, and conduct a risk assessment for the reticulated giraffes based on "
+ "their drinking posture relative to the specific predator visible in the "
+ "foreground.";
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(
InteractionsInput.ofContent(
Arrays.asList(
TextContent.builder().text(prompt).build(),
ImageContent.builder()
.mimeType(ImageContentMimeType.IMAGE_JPEG)
.uri(
"https://storage.googleapis.com/generativeai-downloads/images/generated_elephants_giraffes_zebras_sunset.jpg")
.build())))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println("Research started: " + interaction.id().orElse(""));
while (true) {
interaction =
client.interactions
.get(GetInteractionByIdRequest.builder().id(interaction.id().get()).build())
.interaction()
.get();
if (InteractionStatus.COMPLETED.equals(interaction.status().orElse(null))) {
System.out.println(interaction.outputText().orElse(""));
break;
} else if (InteractionStatus.FAILED.equals(interaction.status().orElse(null))) {
System.out.println("Research failed: " + interaction.errors().orElse(Collections.emptyList()));
break;
}
Thread.sleep(10000);
}
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
prompt := "Analyze the interspecies dynamics and behavioral risks present " +
"in the provided image of the African watering hole. Specifically, investigate " +
"the symbiotic relationship between the avian species and the pachyderms " +
"shown, and conduct a risk assessment for the reticulated giraffes based on " +
"their drinking posture relative to the specific predator visible in the " +
"foreground."
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.TextContent{Text: prompt}),
interactions.NewContent(interactions.ImageContent{
MimeType: interactions.ImageContentMimeType("image/jpeg").ToPointer(),
URI: genai.Ptr("https://storage.googleapis.com/generativeai-downloads/images/generated_elephants_giraffes_zebras_sunset.jpg"),
}),
}),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
interaction := res.Interaction
if interaction.ID != nil {
fmt.Printf("Research started: %s\n", *interaction.ID)
}
for {
getRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: *interaction.ID,
})
if err != nil {
log.Fatal(err)
}
interaction = getRes.Interaction
if interaction.Status == interactions.InteractionStatusCompleted {
if interaction.OutputText != nil {
fmt.Println(*interaction.OutputText)
}
break
} else if interaction.Status == interactions.InteractionStatusFailed {
fmt.Printf("Research failed: %v\n", interaction.Errors)
break
}
time.Sleep(10 * time.Second)
}
}
REST
# 1. Start the research task with image input
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": [
{"type": "text", "text": "Analyze the interspecies dynamics and behavioral risks present in the provided image of the African watering hole. Specifically, investigate the symbiotic relationship between the avian species and the pachyderms shown, and conduct a risk assessment for the reticulated giraffes based on their drinking posture relative to the specific predator visible in the foreground."},
{"type": "image", "mime_type": "image/jpeg", "uri": "https://storage.googleapis.com/generativeai-downloads/images/generated_elephants_giraffes_zebras_sunset.jpg"}
],
"agent": "deep-research-preview-04-2026",
"background": true
}'
# 2. Poll for results (Replace INTERACTION_ID)
# curl -X GET "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID" \
# -H "x-goog-api-key: $GEMINI_API_KEY"
Распознавание документов
Понимание документов позволяет передавать документы напрямую в качестве мультимодальных входных данных. Агент анализирует предоставленные документы и проводит исследование на основе их содержимого.
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input=[
{"type": "text", "text": "What is this document about?"},
{
"type": "document",
"uri": "https://arxiv.org/pdf/1706.03762",
"mime_type": "application/pdf",
},
],
background=True,
)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: [
{ type: 'text', text: 'What is this document about?' },
{
type: 'document',
uri: 'https://arxiv.org/pdf/1706.03762',
mime_type: 'application/pdf'
}
],
background: true
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DocumentContent;
import com.google.genai.gaos.models.interactions.DocumentContentMimeType;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
Client client = new Client();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(
InteractionsInput.ofContent(
Arrays.asList(
TextContent.builder().text("What is this document about?").build(),
DocumentContent.builder()
.uri("https://arxiv.org/pdf/1706.03762")
.mimeType(DocumentContentMimeType.APPLICATION_PDF)
.build())))
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.TextContent{Text: "What is this document about?"}),
interactions.NewContent(interactions.DocumentContent{
URI: genai.Ptr("https://arxiv.org/pdf/1706.03762"),
MimeType: interactions.DocumentContentMimeType("application/pdf").ToPointer(),
}),
}),
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
# 1. Start the research task with document input
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "deep-research-preview-04-2026",
"input": [
{"type": "text", "text": "What is this document about?"},
{"type": "document", "uri": "https://arxiv.org/pdf/1706.03762", "mime_type": "application/pdf"}
],
"background": true
}'
Обработка длительных задач
Deep Research – это многоэтапный процесс, включающий планирование, поиск, чтение и написание. Этот цикл обычно превышает стандартные ограничения времени ожидания для синхронных вызовов API.
Для использования background=True требуются агенты. API сразу возвращает частичный объект Interaction. Чтобы получить взаимодействие для опроса, используйте свойство id. Статус взаимодействия изменится с in_progress на completed или failed. Подробное руководство по управлению фоновыми задачами можно найти в статье Фоновое выполнение.
Потоковая передача
Deep Research поддерживает потоковую передачу, чтобы вы могли в реальном времени следить за ходом исследования, включая краткие пересказы, текстовые выходные данные и сгенерированные изображения.
Необходимо задать значения stream=True и background=True.
Чтобы получать промежуточные этапы рассуждения (мысли) и обновления о ходе выполнения, необходимо включить краткие пересказы рассуждений, задав для thinking_summaries значение "auto" в agent_config. Без этого параметра поток может предоставлять только окончательные результаты.
Типы событий потока
| Тип события | Тип дельты | Описание |
|---|---|---|
step.delta |
thought |
Промежуточный шаг рассуждения агента. |
step.delta |
text |
Часть итогового текста. |
step.delta |
image |
Сгенерированное изображение (в кодировке Base64). |
В следующем примере запускается задача исследования и обрабатывается поток с автоматическим повторным подключением. Он отслеживает interaction_id и last_event_id, чтобы в случае разрыва соединения (например, по истечении 600-секундного тайм-аута) возобновить работу с того места, где она была прервана.
Python
from google import genai
client = genai.Client()
interaction_id = None
last_event_id = None
is_complete = False
def process_stream(stream):
global interaction_id, last_event_id, is_complete
for event in stream:
if event.event_type == "interaction.created":
interaction_id = event.interaction.id
if event.event_id:
last_event_id = event.event_id
if event.event_type == "step.delta":
if event.delta.type == "text":
print(event.delta.text, end="", flush=True)
elif event.delta.type == "thought":
print(f"Thought: {event.delta.text}", flush=True)
elif event.event_type in ("interaction.completed", "interaction.error"):
is_complete = True
stream = client.interactions.create(
input="Research the history of Google TPUs.",
agent="deep-research-preview-04-2026",
background=True,
stream=True,
agent_config={"type": "deep-research", "thinking_summaries": "auto"},
)
process_stream(stream)
# Reconnect if the connection drops
while not is_complete and interaction_id:
status = client.interactions.get(interaction_id)
if status.status != "in_progress":
break
stream = client.interactions.get(
id=interaction_id, stream=True, last_event_id=last_event_id,
)
process_stream(stream)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
let interactionId;
let lastEventId;
let isComplete = false;
async function processStream(stream) {
for await (const event of stream) {
if (event.type === 'interaction.created') {
interactionId = event.interaction.id;
}
if (event.event_id) lastEventId = event.event_id;
if (event.type === 'step.delta') {
if (event.delta.type === 'text') {
process.stdout.write(event.delta.text);
} else if (event.delta.type === 'thought') {
console.log(`Thought: ${event.delta.text}`);
}
} else if (['interaction.completed', 'interaction.error'].includes(event.type)) {
isComplete = true;
}
}
}
const stream = await client.interactions.create({
input: 'Research the history of Google TPUs.',
agent: 'deep-research-preview-04-2026',
background: true,
stream: true,
agent_config: { type: 'deep-research', thinking_summaries: 'auto' },
});
await processStream(stream);
// Reconnect if the connection drops
while (!isComplete && interactionId) {
const status = await client.interactions.get(interactionId);
if (status.status !== 'in_progress') break;
const resumeStream = await client.interactions.get(interactionId, {
stream: true, last_event_id: lastEventId,
});
await processStream(resumeStream);
}
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.ErrorEvent;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionCompletedEvent;
import com.google.genai.gaos.models.interactions.InteractionCreatedEvent;
import com.google.genai.gaos.models.interactions.InteractionSSEEvent;
import com.google.genai.gaos.models.interactions.InteractionSSEStreamEvent;
import com.google.genai.gaos.models.interactions.InteractionStatus;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.StepDelta;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.TextDelta;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.interactions.ThoughtSummaryDelta;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.gaos.models.operations.GetInteractionByIdRequest;
import com.google.genai.gaos.utils.EventStream;
class StreamProcessor {
String interactionId = null;
String lastEventId = null;
boolean isComplete = false;
void processStream(EventStream<InteractionSSEStreamEvent> stream) {
for (InteractionSSEStreamEvent streamEvent : stream) {
InteractionSSEEvent event = streamEvent.data().orElse(null);
if (event instanceof InteractionCreatedEvent) {
InteractionCreatedEvent created = (InteractionCreatedEvent) event;
interactionId = created.interaction().flatMap(i -> i.id()).orElse(null);
if (created.eventId().isPresent()) {
lastEventId = created.eventId().get();
}
} else if (event instanceof StepDelta) {
StepDelta stepDelta = (StepDelta) event;
if (stepDelta.eventId().isPresent()) {
lastEventId = stepDelta.eventId().get();
}
if (stepDelta.delta().isPresent()) {
if (stepDelta.delta().get() instanceof TextDelta) {
System.out.print(((TextDelta) stepDelta.delta().get()).text().orElse(""));
System.out.flush();
} else if (stepDelta.delta().get() instanceof ThoughtSummaryDelta) {
ThoughtSummaryDelta thought = (ThoughtSummaryDelta) stepDelta.delta().get();
Content content = thought.content().orElse(null);
if (content instanceof TextContent) {
System.out.println("Thought: " + ((TextContent) content).text().orElse(""));
}
}
}
} else if (event instanceof InteractionCompletedEvent || event instanceof ErrorEvent) {
isComplete = true;
}
}
}
}
Client client = new Client();
StreamProcessor processor = new StreamProcessor();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Research the history of Google TPUs."))
.background(true)
.stream(true)
.agentConfig(
DeepResearchAgentConfig.builder().thinkingSummaries(ThinkingSummaries.AUTO).build())
.build();
try (EventStream<InteractionSSEStreamEvent> stream =
client.interactions.create(CreateInteractionRequestBody.of(params)).events()) {
processor.processStream(stream);
}
// Reconnect if the connection drops
while (!processor.isComplete && processor.interactionId != null) {
Interaction status =
client.interactions
.get(GetInteractionByIdRequest.builder().id(processor.interactionId).build())
.interaction()
.get();
if (!InteractionStatus.IN_PROGRESS.equals(status.status().orElse(null))) {
break;
}
try (EventStream<InteractionSSEStreamEvent> stream =
client.interactions
.get(
GetInteractionByIdRequest.builder()
.id(processor.interactionId)
.stream(true)
.lastEventId(processor.lastEventId)
.build())
.events()) {
processor.processStream(stream);
}
}
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
"google.golang.org/genai/interactions/types/stream"
)
type StreamProcessor struct {
interactionID string
lastEventID *string
isComplete bool
}
func (p *StreamProcessor) processStream(s *stream.EventStream[interactions.InteractionSSEStreamEvent]) {
defer s.Close()
for s.Next() {
event := s.Value()
if created := event.GetDataInteractionCreated(); created != nil {
p.interactionID = created.Interaction.ID
if created.EventID != nil {
p.lastEventID = created.EventID
}
} else if stepDelta := event.GetDataStepDelta(); stepDelta != nil {
if stepDelta.EventID != nil {
p.lastEventID = stepDelta.EventID
}
if textDelta := stepDelta.GetDeltaText(); textDelta != nil {
fmt.Print(textDelta.GetText())
} else if thoughtDelta := stepDelta.GetDeltaThoughtSummary(); thoughtDelta != nil {
if textContent := thoughtDelta.GetContentText(); textContent != nil {
fmt.Printf("Thought: %s\n", textContent.GetText())
}
}
} else if event.GetDataInteractionCompleted() != nil || event.GetDataError() != nil {
p.isComplete = true
}
}
}
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
processor := &StreamProcessor{}
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
})
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Research the history of Google TPUs."),
Background: genai.Ptr(true),
Stream: genai.Ptr(true),
AgentConfig: &agentCfg,
}),
})
if err != nil {
log.Fatal(err)
}
processor.processStream(res.InteractionSSEStreamEvent)
// Reconnect if the connection drops
for !processor.isComplete && processor.interactionID != "" {
statusRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: processor.interactionID,
})
if err != nil || statusRes.Interaction.Status != interactions.InteractionStatusInProgress {
break
}
streamRes, err := client.Interactions.Get(ctx, operations.GetInteractionByIDRequest{
ID: processor.interactionID,
Stream: genai.Ptr(true),
LastEventID: processor.lastEventID,
})
if err != nil {
break
}
processor.processStream(streamRes.InteractionSSEStreamEvent)
}
}
REST
# 1. Start the stream (save the INTERACTION_ID from the interaction.start event
# and the last "event_id" you receive)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Research the history of Google TPUs.",
"agent": "deep-research-preview-04-2026",
"background": true,
"stream": true,
"agent_config": {
"type": "deep-research",
"thinking_summaries": "auto"
}
}'
# 2. If the connection drops, reconnect with your saved IDs
curl -X GET "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID?stream=true&last_event_id=LAST_EVENT_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Уточняющие вопросы и взаимодействие
Вы можете продолжить разговор после того, как агент вернет окончательный отчет, используя previous_interaction_id. Это позволяет попросить уточнить, обобщить или дополнить определенные разделы исследования, не начиная задачу заново.
Python
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
input="Can you elaborate on the second point in the report?",
model="gemini-4-argon",
previous_interaction_id="COMPLETED_INTERACTION_ID"
)
print(interaction.steps[-1].content[0].text)
JavaScript
const interaction = await client.interactions.create({
input: 'Can you elaborate on the second point in the report?',
model: 'gemini-4-argon',
previous_interaction_id: 'COMPLETED_INTERACTION_ID'
});
console.log(interaction.steps.at(-1).content[0].text);
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model("gemini-4-argon")
.input(InteractionsInput.of("Can you elaborate on the second point in the report?"))
.previousInteractionId("COMPLETED_INTERACTION_ID")
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(interaction.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-4-argon"),
Input: interactions.NewInteractionsInput("Can you elaborate on the second point in the report?"),
PreviousInteractionID: genai.Ptr("COMPLETED_INTERACTION_ID"),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Can you elaborate on the second point in the report?",
"model": "gemini-4-argon",
"previous_interaction_id": "COMPLETED_INTERACTION_ID"
}'
Когда использовать агента Gemini Deep Research
Deep Research – это не просто модель, а агент. Он лучше всего подходит для рабочих нагрузок, требующих подхода "аналитик в коробке", а не чата с низкой задержкой.
| Функция | Стандартные модели Gemini | Агент Gemini Deep Research |
|---|---|---|
| Задержка | секунд | Минуты (асинхронно/в фоновом режиме) |
| Процесс | Сгенерировать -> Выходные данные | План -> Поиск -> Чтение -> Итерация -> Результат |
| Выходные данные | Текст в разговорном стиле, код, краткие пересказы | Подробные отчеты, углубленный анализ, сравнительные таблицы |
| Для чего подходит | Чат-боты, извлечение данных, творческое письмо | Анализ рынка, комплексная юридическая экспертиза, обзоры литературы, анализ конкурентной среды |
Конфигурация агента
Для управления поведением Deep Research используется параметр agent_config.
Передайте его в виде словаря со следующими полями:
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
type |
string |
Обязательно | Необходимое значение: "deep-research". |
thinking_summaries |
string |
"none" |
Установите значение "auto", чтобы получать промежуточные этапы рассуждений во время потоковой передачи. Чтобы отключить, задайте значение "none". |
visualization |
string |
"auto" |
Установите значение "auto", чтобы разрешить агенту генерировать диаграммы и изображения. Чтобы отключить, задайте значение "off". |
collaborative_planning |
boolean |
false |
Установите значение true, чтобы включить многоэтапную проверку плана перед началом исследования. |
Python
agent_config = {
"type": "deep-research",
"thinking_summaries": "auto",
"visualization": "auto",
"collaborative_planning": False,
}
interaction = client.interactions.create(
agent="deep-research-preview-04-2026",
input="Research the competitive landscape of cloud GPUs.",
agent_config=agent_config,
background=True,
)
JavaScript
const interaction = await client.interactions.create({
agent: 'deep-research-preview-04-2026',
input: 'Research the competitive landscape of cloud GPUs.',
agent_config: {
type: 'deep-research',
thinking_summaries: 'auto',
visualization: 'auto',
collaborative_planning: false,
},
background: true,
});
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.CreateAgentInteraction;
import com.google.genai.gaos.models.interactions.DeepResearchAgentConfig;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.ThinkingSummaries;
import com.google.genai.gaos.models.interactions.Visualization;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
Client client = new Client();
DeepResearchAgentConfig agentConfig =
DeepResearchAgentConfig.builder()
.thinkingSummaries(ThinkingSummaries.AUTO)
.visualization(Visualization.AUTO)
.collaborativePlanning(false)
.build();
CreateAgentInteraction params =
CreateAgentInteraction.builder()
.agent("deep-research-preview-04-2026")
.input(InteractionsInput.of("Research the competitive landscape of cloud GPUs."))
.agentConfig(agentConfig)
.background(true)
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
Проложить маршрут
package main
import (
"context"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
agentCfg := interactions.NewCreateAgentInteractionAgentConfig(interactions.DeepResearchAgentConfig{
ThinkingSummaries: interactions.ThinkingSummariesAuto.ToPointer(),
Visualization: interactions.VisualizationAuto.ToPointer(),
CollaborativePlanning: genai.Ptr(false),
})
_, err = client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateAgentInteraction{
Agent: interactions.AgentOption("deep-research-preview-04-2026"),
Input: interactions.NewInteractionsInput("Research the competitive landscape of cloud GPUs."),
AgentConfig: &agentCfg,
Background: genai.Ptr(true),
}),
})
if err != nil {
log.Fatal(err)
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"input": "Research the competitive landscape of cloud GPUs.",
"agent": "deep-research-preview-04-2026",
"agent_config": {
"type": "deep-research",
"thinking_summaries": "auto",
"visualization": "auto",
"collaborative_planning": false
},
"background": true
}'
Доступность и цены
Агент Gemini Deep Research доступен через Interactions API в Google AI Studio и Gemini API.
Стоимость рассчитывается по модели оплаты по мере использования на основе базовых моделей Gemini и конкретных инструментов, которые использует агент. В отличие от стандартных запросов в чате, где запрос приводит к одному результату, задача Deep Research представляет собой рабочий процесс агента. Один запрос запускает автономный цикл планирования, поиска, чтения и рассуждений.
Примерная стоимость
Стоимость зависит от глубины исследования. Агент самостоятельно определяет, сколько информации ему нужно прочитать и найти, чтобы ответить на ваш запрос.
- Deep Research (
deep-research-preview-04-2026). Для типичного запроса, требующего умеренного анализа, агент может использовать около 80 поисковых запросов, 250 000 входных токенов (50–70% кешированных) и 60 000 выходных токенов.- Общая расчетная стоимость: 1–3 доллара США за задачу.
- Deep Research Max (
deep-research-max-preview-04-2026). Для глубокого анализа конкурентной среды или комплексной юридической экспертизы агент может использовать до 160 поисковых запросов, 900 000 входных токенов (50–70% кешированных) и 80 000 выходных токенов.- Общая расчетная стоимость: 3–7 долларов США за задачу.
Безопасность
Предоставляя агенту доступ к интернету и вашим личным файлам, необходимо тщательно взвесить риски для безопасности.
- Внедрение запроса с помощью файлов. Агент читает содержимое файлов, которые вы предоставляете. Убедитесь, что загруженные документы (PDF-файлы, текстовые файлы) получены из надежных источников. Вредоносный файл может содержать скрытый текст, предназначенный для манипулирования выходными данными агента.
- Риски, связанные с веб-контентом. Агент выполняет поиск в общедоступном интернете. Мы используем надежные фильтры безопасности, но существует риск того, что агент может столкнуться с вредоносными веб-страницами и обработать их. Рекомендуем проверять источники, указанные в
citations. - Кража данных. Будьте осторожны, когда просите агента обобщить конфиденциальные внутренние данные, если вы также разрешаете ему просматривать веб-страницы.
Рекомендации
- Запрос неизвестных данных. Инструкции для агента о том, как обрабатывать отсутствующие данные. Например, добавьте в запрос "Если точные данные за 2025 год недоступны, прямо укажи, что это прогнозы или данные отсутствуют, а не давай оценку".
- Предоставьте контекст. Укажите в запросе справочную информацию или ограничения, чтобы агент мог использовать их в качестве основы для исследования.
- Используйте совместное планирование. Для сложных запросов включите совместное планирование, чтобы проверять и уточнять план исследования перед его выполнением.
- Мультимодальные запросы. Агент Deep Research поддерживает мультимодальные запросы. Используйте с осторожностью, так как это увеличивает расходы и повышает риск переполнения окна контекста.
Ограничения
- Пользовательские инструменты. Сейчас нельзя предоставлять пользовательские инструменты вызова функций, но можно использовать удаленные MCP-серверы (Model Context Protocol) с агентом Deep Research.
- Структурированные выходные данные. Агент Deep Research пока не поддерживает структурированные выходные данные.
- Максимальное время исследования. У агента Deep Research есть ограничение на время исследования – 60 минут. Большинство задач выполняется в течение 20 минут.
- Требование к хранилищу. Для выполнения агента с помощью
background=Trueтребуетсяstore=True. - Google Поиск. Google Поиск включен по умолчанию, и к результатам обоснования применяются определенные ограничения.
Дальнейшие действия
- Подробнее о Interactions API…
- Узнайте, как использовать собственные данные с помощью инструмента Поиск файлов.