В этом руководстве рассказывается о том, как добавлять медиафайлы, например изображения, аудио, видео и документы, в запросы к Gemini API. Новые методы поддерживаются во всех конечных точках Gemini API, включая Batch, Interactions и Live API. Выбор способа зависит от размера файла, места хранения данных и того, как часто вы планируете использовать файл.
Самый простой способ использовать файл в качестве входных данных – прочитать локальный файл и включить его в запрос. В следующем примере показано, как прочитать локальный PDF-файл. Для этого метода размер PDF-файлов ограничен 50 МБ. Полный список типов входных файлов и ограничений приведен в таблице сравнения методов ввода.
Python
from google import genai
import pathlib
import base64
client = genai.Client()
filepath = pathlib.Path('my_local_file.pdf')
prompt = "Summarize this document"
interaction = client.interactions.create(
model="gemini-3.8-flash",
input=[
{"type": "text", "text": prompt},
{"type": "document", "data": base64.b64encode(filepath.read_bytes()).decode('utf-8'), "mime_type": "application/pdf"}
]
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from 'node:fs';
const client = new GoogleGenAI({});
const prompt = "Summarize this document";
async function main() {
const filePath = 'my_local_file.pdf';
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: [
{ type: "text", text: prompt },
{
type: "document",
data: fs.readFileSync(filePath).toString("base64"),
mime_type: "application/pdf"
}
]
});
console.log(interaction.output_text);
}
main();
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
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.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
Client client = new Client();
byte[] pdfBytes = Files.readAllBytes(Paths.get("my_local_file.pdf"));
String base64Pdf = Base64.getEncoder().encodeToString(pdfBytes);
String prompt = "Summarize this document";
Content textContent = TextContent.builder().text(prompt).build();
Content docContent =
DocumentContent.builder()
.data(base64Pdf)
.mimeType(DocumentContentMimeType.APPLICATION_PDF)
.build();
List<Content> contents = Arrays.asList(textContent, docContent);
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.ofContent(contents))
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(interaction.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"encoding/base64"
"fmt"
"log"
"os"
"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)
}
pdfBytes, err := os.ReadFile("my_local_file.pdf")
if err != nil {
log.Fatal(err)
}
base64Pdf := base64.StdEncoding.EncodeToString(pdfBytes)
prompt := "Summarize this document"
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.TextContent{
Text: prompt,
}),
interactions.NewContent(interactions.DocumentContent{
Data: genai.Ptr(base64Pdf),
MimeType: interactions.DocumentContentMimeTypeApplicationPdf.ToPointer(),
}),
}),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
REST
# Encode the local file to base64
B64_CONTENT=$(base64 -w 0 my_local_file.pdf)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": [
{"type": "text", "text": "Summarize this document"},
{
"type": "document",
"data": "'${B64_CONTENT}'",
"mime_type": "application/pdf"
}
]
}'
Сравнение способов ввода
В таблице ниже сравниваются способы загрузки с учетом ограничений на размер файлов и оптимальных вариантов использования. Обратите внимание, что ограничение на размер файла может зависеть от типа файла и модели или токенизатора, используемых для обработки файла.
| Метод | Поддерживаемые устройства | Максимальный размер файла | Сохранение |
|---|---|---|---|
| Встроенные данные | Быстрое тестирование, небольшие файлы, приложения, работающие в реальном времени. | 100 МБ на запрос или полезную нагрузку (50 МБ для PDF-файлов) |
Нет (отправляется с каждым запросом) |
| Загрузка через File API | Большие файлы, файлы, используемые несколько раз. | 2 ГБ на файл, до 20 ГБ на проект |
48 часов |
| Регистрация URI GCS в File API | Большие файлы, уже хранящиеся в Google Cloud Storage, файлы, которые используются несколько раз. | 2 ГБ на файл, без ограничений на общий объем хранилища | Нет (получается по запросу). Однократная регистрация может дать доступ на срок до 30 дней. |
| Внешние URL | Общедоступные данные или данные в облачных сегментах (AWS, Azure, GCS) без повторной загрузки. | 15 МБ на файл | Нет (получено по запросу) |
Встроенные данные
Если размер файла не превышает 100 МБ (или 50 МБ для PDF-файлов), вы можете передать данные непосредственно в полезной нагрузке запроса. Это самый простой способ для быстрого тестирования или приложений, обрабатывающих временные данные в реальном времени. Вы можете предоставить данные в виде строк, закодированных в формате base64, или напрямую из локальных файлов.
Пример чтения из локального файла приведен в начале этой страницы.
Получение данных с URL
Вы также можете получить файл по URL, преобразовать его в байты и включить в запрос.
Python
from google import genai
import httpx
client = genai.Client()
doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"
doc_data = httpx.get(doc_url).content
prompt = "Summarize this document"
interaction = client.interactions.create(
model="gemini-3.8-flash",
input=[
{"type": "document", "data": base64.b64encode(doc_data).decode('utf-8'), "mime_type": "application/pdf"},
{"type": "text", "text": prompt}
]
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const docUrl = 'https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf';
const prompt = "Summarize this document";
async function main() {
const pdfResp = await fetch(docUrl)
.then((response) => response.arrayBuffer());
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: [
{ type: "text", text: prompt },
{
type: "document",
data: Buffer.from(pdfResp).toString("base64"),
mime_type: "application/pdf"
}
]
});
console.log(interaction.output_text);
}
main();
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
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.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
Client client = new Client();
String docUrl = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf";
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(docUrl)).build();
byte[] docData = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray()).body();
String base64Pdf = Base64.getEncoder().encodeToString(docData);
String prompt = "Summarize this document";
Content docContent =
DocumentContent.builder()
.data(base64Pdf)
.mimeType(DocumentContentMimeType.APPLICATION_PDF)
.build();
Content textContent = TextContent.builder().text(prompt).build();
List<Content> contents = Arrays.asList(docContent, textContent);
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.ofContent(contents))
.build();
Interaction interaction =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(interaction.outputText().orElse(""));
Проложить маршрут
package main
import (
"context"
"encoding/base64"
"fmt"
"io"
"log"
"net/http"
"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)
}
docURL := "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"
resp, err := http.Get(docURL)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
docData, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
base64Pdf := base64.StdEncoding.EncodeToString(docData)
prompt := "Summarize this document"
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.DocumentContent{
Data: genai.Ptr(base64Pdf),
MimeType: interactions.DocumentContentMimeTypeApplicationPdf.ToPointer(),
}),
interactions.NewContent(interactions.TextContent{
Text: prompt,
}),
}),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
REST
DOC_URL="https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"
PROMPT="Summarize this document"
DISPLAY_NAME="base64_pdf"
# Download the PDF
wget -O "${DISPLAY_NAME}.pdf" "${DOC_URL}"
# Check for FreeBSD base64 and set flags accordingly
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
# Base64 encode the PDF
ENCODED_PDF=$(base64 $B64FLAGS "${DISPLAY_NAME}.pdf")
# Create JSON payload file
cat <<EOF > payload.json
{
"model": "gemini-3.8-flash",
"input": [
{"type": "document", "data": "${ENCODED_PDF}", "mime_type": "application/pdf"},
{"type": "text", "text": "${PROMPT}"}
]
}
EOF
# Generate content using interactions
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d @payload.json 2> /dev/null > response.json
cat response.json
echo
jq ".outputs[] | select(.type == \"text\") | .text" response.json
Gemini File API
API файлов предназначен для работы с большими файлами (до 2 ГБ) или файлами, которые вы планируете использовать в нескольких запросах.
Стандартная загрузка файлов
Загрузите локальный файл в Gemini API. Загруженные таким образом файлы хранятся временно (48 часов) и обрабатываются для эффективного поиска по модели.
Python
from google import genai
client = genai.Client()
doc_file = client.files.upload(file="path/to/your/sample.pdf")
prompt = "Summarize this document"
interaction = client.interactions.create(
model="gemini-3.8-flash",
input=[
{"type": "text", "text": prompt},
{"type": "document", "uri": doc_file.uri, "mime_type": doc_file.mime_type}
]
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const prompt = "Summarize this document";
async function main() {
const filePath = "path/to/your/sample.pdf";
const myfile = await client.files.upload({
file: filePath,
config: { mime_type: "application/pdf" },
});
const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: [
{ type: "text", text: prompt },
{ type: "document", uri: myfile.uri, mime_type: myfile.mimeType }
]
});
console.log(interaction.output_text);
}
await main();
Java
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
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.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;
import java.util.Arrays;
import java.util.List;
Client client = new Client();
File docFile =
client.files.upload(
new java.io.File("path/to/your/sample.pdf"),
UploadFileConfig.builder().mimeType("application/pdf").build());
String prompt = "Summarize this document";
Content textContent = TextContent.builder().text(prompt).build();
Content docContent =
DocumentContent.builder()
.uri(docFile.uri().orElse(""))
.mimeType(DocumentContentMimeType.of(docFile.mimeType().orElse("application/pdf")))
.build();
List<Content> contents = Arrays.asList(textContent, docContent);
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.ofContent(contents))
.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)
}
docFile, err := client.Files.UploadFromPath(ctx, "path/to/your/sample.pdf", &genai.UploadFileConfig{
MIMEType: "application/pdf",
})
if err != nil {
log.Fatal(err)
}
prompt := "Summarize this document"
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.TextContent{
Text: prompt,
}),
interactions.NewContent(interactions.DocumentContent{
URI: genai.Ptr(docFile.URI),
MimeType: interactions.DocumentContentMimeType(docFile.MIMEType).ToPointer(),
}),
}),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
REST
FILE_PATH="path/to/sample.pdf"
MIME_TYPE=$(file -b --mime-type "${FILE_PATH}")
NUM_BYTES=$(wc -c < "${FILE_PATH}")
DISPLAY_NAME=DOCUMENT
tmp_header_file=upload-header.tmp
# Initial resumable request defining metadata.
curl "https://generativelanguage.googleapis.com/upload/v1beta/files" \
-D "${tmp_header_file}" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null
upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"
# Upload the actual bytes.
curl "${upload_url}" \
-H "Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@${FILE_PATH}" 2> /dev/null > file_info.json
file_uri=$(jq ".file.uri" file_info.json)
# Now use in an interaction
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": [
{"type": "text", "text": "Summarize this document"},
{"type": "document", "uri": '$file_uri', "mime_type": "'${MIME_TYPE}'"}
]
}'
Как зарегистрировать файлы Google Cloud Storage
Если ваши данные уже хранятся в Google Cloud Storage, вам не нужно скачивать и повторно загружать их. Вы можете зарегистрировать его напрямую с помощью File API.
Предоставьте агенту сервиса доступ к каждому сегменту.
Включите Gemini API в облачном проекте Google Cloud.
Создайте сервисного агента:
gcloud beta services identity create --service=generativelanguage.googleapis.com --project=<your_project>Предоставьте агенту сервиса Gemini API разрешения на чтение сегментов хранилища.
Пользователю необходимо назначить
Storage Object Viewerроль IAM этому агенту сервиса в определенных сегментах хранилища, которые он планирует использовать.
По умолчанию срок действия доступа не ограничен, но его можно изменить в любое время. Вы также можете использовать команды Google Cloud Storage IAM SDK, чтобы предоставлять разрешения.
Как пройти аутентификацию в сервисе
Требования
- Включить API
- Создайте сервисный аккаунт или агента с необходимыми разрешениями.
Сначала вам нужно пройти аутентификацию как сервис с разрешениями на просмотр объектов хранилища. Способ уплаты этого налога зависит от среды, в которой будет выполняться код управления файлами.
Вне Google Cloud
Если код выполняется не в Google Cloud, например на вашем компьютере, скачайте учетные данные аккаунта из консоли Google Cloud, выполнив следующие действия:
- Перейдите в консоль сервисных аккаунтов.
- Выберите нужный сервисный аккаунт.
- Перейдите на вкладку Ключи и выберите Добавить ключ > Создать ключ.
- Выберите тип ключа JSON и запомните, куда был скачан файл.
Подробную информацию можно найти в официальной документации Google Cloud о управлении ключами сервисных аккаунтов.
Затем используйте следующие команды для аутентификации. В этих командах предполагается, что файл сервисного аккаунта находится в текущем каталоге и называется
service-account.json.Python
from google.oauth2.service_account import Credentials GCS_READ_SCOPES = [ 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/cloud-platform' ] SERVICE_ACCOUNT_FILE = 'service-account.json' credentials = Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=GCS_READ_SCOPES )JavaScript
const { GoogleAuth } = require('google-auth-library'); const GCS_READ_SCOPES = [ 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/cloud-platform' ]; const SERVICE_ACCOUNT_FILE = 'service-account.json'; const auth = new GoogleAuth({ keyFile: SERVICE_ACCOUNT_FILE, scopes: GCS_READ_SCOPES });ИКС
gcloud auth application-default login \ --client-id-file=service-account.json \ --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/devstorage.read_only'В Google Cloud
Если вы работаете непосредственно в Google Cloud, например с помощью функций Cloud Run или экземпляра Compute Engine, у вас будут неявные учетные данные, но вам потребуется повторно пройти аутентификацию, чтобы предоставить соответствующие области действия.
Python
Этот код предполагает, что сервис работает в среде, где Application Default Credentials можно получить автоматически, например в Cloud Run или Compute Engine.
import google.auth GCS_READ_SCOPES = [ 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/cloud-platform' ] credentials, project = google.auth.default(scopes=GCS_READ_SCOPES)JavaScript
Этот код предполагает, что сервис работает в среде, где Application Default Credentials можно получить автоматически, например в Cloud Run или Compute Engine.
const { GoogleAuth } = require('google-auth-library'); const auth = new GoogleAuth({ scopes: [ 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/cloud-platform' ] });
Java
import com.google.auth.oauth2.GoogleCredentials;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;
List<String> gcsReadScopes =
Arrays.asList(
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/cloud-platform");
String serviceAccountFile = "service-account.json";
GoogleCredentials credentials =
GoogleCredentials.fromStream(new FileInputStream(serviceAccountFile))
.createScoped(gcsReadScopes);
Проложить маршрут
package main
import (
"log"
"google.golang.org/genai"
)
func main() {
cc := &genai.ClientConfig{}
if err := cc.UseDefaultCredentials(); err != nil {
log.Fatal(err)
}
_ = cc.Credentials
}
ИКС
Это интерактивная команда. Для таких сервисов, как Compute Engine, области действия можно прикрепить к работающему сервису на уровне конфигурации. Пример можно найти в документации по сервису, управляемому пользователем.
gcloud auth application-default login \
--scopes="https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/devstorage.read_only"
- Регистрация файлов (Files API)
Используйте Files API, чтобы зарегистрировать файлы и создать путь Files API, который можно напрямую использовать в Gemini API.
Python
from google import genai client = genai.Client(credentials=credentials) registered_gcs_files = client.files.register_files( uris=["gs://my_bucket/some_object.pdf", "gs://bucket2/object2.txt"] ) prompt = "Summarize this file." for f in registered_gcs_files.files: print(f.name) interaction = client.interactions.create( model="gemini-3.8-flash", input=[ {"type": "text", "text": prompt}, {"type": "document", "uri": f.uri, "mime_type": f.mime_type} ], ) print(interaction.output_text)JavaScript
import { GoogleGenAI } from "@google/genai"; const ai = new GoogleGenAI({ auth: auth }); async function main() { const registeredGcsFiles = await ai.files.registerFiles({ uris: ["gs://my_bucket/some_object.pdf", "gs://bucket2/object2.txt"] }); const prompt = "Summarize this file."; for (const file of registeredGcsFiles.files) { console.log(file.name); const interaction = await ai.interactions.create({ model: "gemini-3.8-flash", input: [ { type: "text", text: prompt }, { type: "document", uri: file.uri, mime_type: file.mimeType } ] }); console.log(interaction.output_text); } } main();
Java
import com.google.auth.oauth2.GoogleCredentials;
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
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.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.RegisterFilesResponse;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
GoogleCredentials credentials =
GoogleCredentials.fromStream(new FileInputStream("service-account.json"))
.createScoped(
Arrays.asList(
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/cloud-platform"));
Client client = Client.builder().credentials(credentials).build();
RegisterFilesResponse registeredGcsFiles =
client.files.registerFiles(
credentials,
Arrays.asList("gs://my_bucket/some_object.pdf", "gs://bucket2/object2.txt"),
null);
String prompt = "Summarize this file.";
for (File f : registeredGcsFiles.files().orElse(Collections.emptyList())) {
System.out.println(f.name().orElse(""));
Content textContent = TextContent.builder().text(prompt).build();
Content docContent =
DocumentContent.builder()
.uri(f.uri().orElse(""))
.mimeType(DocumentContentMimeType.of(f.mimeType().orElse("application/pdf")))
.build();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-3.8-flash"))
.input(InteractionsInput.ofContent(Arrays.asList(textContent, docContent)))
.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()
cc := &genai.ClientConfig{}
if err := cc.UseDefaultCredentials(); err != nil {
log.Fatal(err)
}
client, err := genai.NewClient(ctx, cc)
if err != nil {
log.Fatal(err)
}
registeredGcsFiles, err := client.Files.RegisterFiles(
ctx,
[]string{"gs://my_bucket/some_object.pdf", "gs://bucket2/object2.txt"},
cc.Credentials,
nil,
)
if err != nil {
log.Fatal(err)
}
prompt := "Summarize this file."
for _, f := range registeredGcsFiles.Files {
fmt.Println(f.Name)
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.8-flash"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.TextContent{
Text: prompt,
}),
interactions.NewContent(interactions.DocumentContent{
URI: genai.Ptr(f.URI),
MimeType: interactions.DocumentContentMimeType(f.MIMEType).ToPointer(),
}),
}),
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
}
ИКС
access_token=$(gcloud auth application-default print-access-token)
project_id=$(gcloud config get-value project)
curl -X POST https://generativelanguage.googleapis.com/v1beta/files:register \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" \
-d '{"uris": ["gs://bucket/object1", "gs://bucket/object2"]}'
Внешние URL HTTP / подписанные URL
Вы можете передавать общедоступные URL с протоколом HTTPS или предварительно подписанные URL непосредственно в запросе. Gemini API безопасно получит контент во время обработки. Это удобно, если вы не хотите загружать файлы повторно. Размер каждого файла не должен превышать 15 МБ. Для больших файлов используйте File API.
Python
from google import genai
uri = "https://ontheline.trincoll.edu/images/bookdown/sample-local-pdf.pdf"
prompt = "Summarize this file"
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.8-flash",
input=[
{"type": "document", "uri": uri, "mime_type": "application/pdf"},
{"type": "text", "text": prompt}
]
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const uri = "https://ontheline.trincoll.edu/images/bookdown/sample-local-pdf.pdf";
async function main() {
const interaction = await client.interactions.create({
model: 'gemini-3.8-flash',
input: [
{ type: "document", uri: uri, mime_type: "application/pdf" },
{ type: "text", text: "summarize this file" }
]
});
console.log(interaction.output_text);
}
main();
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H 'x-goog-api-key: $GEMINI_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.8-flash",
"input": [
{"type": "text", "text": "Summarize this pdf"},
{
"type": "document",
"uri": "https://ontheline.trincoll.edu/images/bookdown/sample-local-pdf.pdf",
"mime_type": "application/pdf"
}
]
}'
Специальные возможности
Убедитесь, что URL, которые вы предоставляете, не ведут на страницы, требующие авторизации или платного доступа. Для частных баз данных создайте подписанный URL с правильными разрешениями на доступ и сроком действия.
Проверки безопасности
Система проверяет URL на соответствие стандартам безопасности и правилам. Если URL не пройдет проверку, вы получите сообщение об ошибке url_retrieval_status из URL_RETRIEVAL_STATUS_UNSAFE.
Поддерживаемые типы контента
Этот список поддерживаемых типов файлов и ограничений предназначен для первоначального ознакомления и не является исчерпывающим. Набор поддерживаемых типов может меняться и зависит от используемой модели и версии токенизатора. Если вы выберете неподдерживаемый тип, возникнет ошибка. Кроме того, извлечение контента из файлов этих типов поддерживается только для общедоступных URL.
Типы текстовых файлов
text/htmltext/csstext/plaintext/xmltext/csvtext/rtftext/javascript
Типы файлов приложений
application/jsonapplication/pdf
Графические файлы
image/bmpimage/jpegimage/pngimage/webp
Видеофайлы
video/mp4video/mpegvideo/quicktimevideo/avivideo/x-flvvideo/mpgvideo/webmvideo/wmvvideo/3gpp
Рекомендации
- Выберите подходящий метод. Для небольших временных файлов используйте встроенные данные. Для больших или часто используемых файлов применяйте File API. Используйте внешние URL для данных, которые уже размещены в интернете.
- Укажите MIME-типы. Всегда указывайте правильный MIME-тип для данных файла, чтобы обеспечить корректную обработку.
- Обрабатывайте ошибки. Реализуйте в коде обработку ошибок, чтобы устранять потенциальные проблемы, например с сетью, доступом к файлам или API.
Ограничения
- Максимальный размер файла зависит от способа загрузки (см. сравнительную таблицу) и типа файла.
- Встроенные данные увеличивают размер полезной нагрузки запроса.
- Загруженные через File API файлы хранятся временно и удаляются через 48 часов.
- Извлечение данных из внешних URL ограничено 15 МБ на файл и поддерживает определенные типы контента.
Дальнейшие действия
- Попробуйте написать собственные мультимодальные запросы в Google AI Studio.
- Информацию о том, как добавлять файлы в запросы, можно найти в руководствах по Vision, распознаванию аудио и обработке документов.