Встраивания

API Gemini предлагает модели встраивания для генерации эмбеддингов текста, изображений, видео и другого контента. Полученные эмбеддинги затем можно использовать для таких задач, как семантический поиск, классификация и кластеризация, обеспечивая более точные и контекстно-зависимые результаты, чем подходы, основанные на ключевых словах.

Новейшая модель, gemini-embedding-2-preview , — это первая мультимодальная модель встраивания в API Gemini. Она сопоставляет текст, изображения, видео, аудио и документы в единое пространство встраивания, обеспечивая кросс-модальный поиск, классификацию и кластеризацию более чем на 100 языках. Подробнее см. раздел «Мультимодальные встраивания» . Для сценариев использования только с текстом по-прежнему доступна модель gemini-embedding-001 .

Создание систем генерации дополненной информации для поиска (Retrieval Augmented Generation, RAG) — распространенный вариант использования продуктов на основе искусственного интеллекта. Эмбеддинги играют ключевую роль в значительном улучшении результатов работы моделей за счет повышения точности фактов, согласованности и контекстной насыщенности. Если вы предпочитаете использовать управляемое решение RAG, мы разработали инструмент поиска файлов (File Search ), который упрощает управление RAG и делает его более экономичным.

Генерация эмбеддингов

Для генерации текстовых вставок используйте метод embedContent :

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-001",
        contents="What is the meaning of life?"
)

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: 'What is the meaning of life?',
    });

    console.log(response.embeddings);
}

main();

Идти

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    embeddings, err := json.MarshalIndent(result.Embeddings, "", "  ")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(embeddings))
}

ОТДЫХ

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "model": "models/gemini-embedding-001",
        "content": {
        "parts": [{
            "text": "What is the meaning of life?"
        }]
        }
    }'

Также можно создавать векторные представления для нескольких фрагментов одновременно, передавая их в виде списка строк.

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-001",
        contents= [
            "What is the meaning of life?",
            "What is the purpose of existence?",
            "How do I bake a cake?"
        ]
)

for embedding in result.embeddings:
    print(embedding)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: [
            'What is the meaning of life?',
            'What is the purpose of existence?',
            'How do I bake a cake?'
        ],
    });

    console.log(response.embeddings);
}

main();

Идти

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?"),
        genai.NewContentFromText("How does photosynthesis work?"),
        genai.NewContentFromText("Tell me about the history of the internet."),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    embeddings, err := json.MarshalIndent(result.Embeddings, "", "  ")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(embeddings))
}

ОТДЫХ

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
    "content": {
        "parts": [
        {
            "text": "What is the meaning of life?"
        },
        {
            "text": "How much wood would a woodchuck chuck?"
        },
        {
            "text": "How does the brain work?"
        }
        ]
    },
    "taskType": "SEMANTIC_SIMILARITY"
    }'

Укажите тип задачи для повышения производительности.

Эмбеддинги можно использовать для решения широкого спектра задач, от классификации до поиска документов. Указание правильного типа задачи помогает оптимизировать эмбеддинги для предполагаемых взаимосвязей, обеспечивая максимальную точность и эффективность. Полный список поддерживаемых типов задач см. в таблице «Поддерживаемые типы задач» .

В следующем примере показано, как использовать SEMANTIC_SIMILARITY для проверки степени сходства смысловых значений текстовых строк.

Python

from google import genai
from google.genai import types
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

client = genai.Client()

texts = [
    "What is the meaning of life?",
    "What is the purpose of existence?",
    "How do I bake a cake?",
]

result = client.models.embed_content(
    model="gemini-embedding-001",
    contents=texts,
    config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)

# Create a 3x3 table to show the similarity matrix
df = pd.DataFrame(
    cosine_similarity([e.values for e in result.embeddings]),
    index=texts,
    columns=texts,
)

print(df)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as cosineSimilarity from "compute-cosine-similarity";

async function main() {
    const ai = new GoogleGenAI({});

    const texts = [
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    ];

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: texts,
        taskType: 'SEMANTIC_SIMILARITY'
    });

    const embeddings = response.embeddings.map(e => e.values);

    for (let i = 0; i < texts.length; i++) {
        for (let j = i + 1; j < texts.length; j++) {
            const text1 = texts[i];
            const text2 = texts[j];
            const similarity = cosineSimilarity(embeddings[i], embeddings[j]);
            console.log(`Similarity between '${text1}' and '${text2}': ${similarity.toFixed(4)}`);
        }
    }
}

main();

Идти

package main

import (
    "context"
    "fmt"
    "log"
    "math"

    "google.golang.org/genai"
)

// cosineSimilarity calculates the similarity between two vectors.
func cosineSimilarity(a, b []float32) (float64, error) {
    if len(a) != len(b) {
        return 0, fmt.Errorf("vectors must have the same length")
    }

    var dotProduct, aMagnitude, bMagnitude float64
    for i := 0; i < len(a); i++ {
        dotProduct += float64(a[i] * b[i])
        aMagnitude += float64(a[i] * a[i])
        bMagnitude += float64(b[i] * b[i])
    }

    if aMagnitude == 0 || bMagnitude == 0 {
        return 0, nil
    }

    return dotProduct / (math.Sqrt(aMagnitude) * math.Sqrt(bMagnitude)), nil
}

func main() {
    ctx := context.Background()
    client, _ := genai.NewClient(ctx, nil)
    defer client.Close()

    texts := []string{
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    }

    var contents []*genai.Content
    for _, text := range texts {
        contents = append(contents, genai.NewContentFromText(text, genai.RoleUser))
    }

    result, _ := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{TaskType: genai.TaskTypeSemanticSimilarity},
    )

    embeddings := result.Embeddings

    for i := 0; i < len(texts); i++ {
        for j := i + 1; j < len(texts); j++ {
            similarity, _ := cosineSimilarity(embeddings[i].Values, embeddings[j].Values)
            fmt.Printf("Similarity between '%s' and '%s': %.4f\n", texts[i], texts[j], similarity)
        }
    }
}

ОТДЫХ

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
    "taskType": "SEMANTIC_SIMILARITY",
    "content": {
        "parts": [
        {
            "text": "What is the meaning of life?"
        },
        {
            "text": "How much wood would a woodchuck chuck?"
        },
        {
            "text": "How does the brain work?"
        }
        ]
    }
    }'

Приведенные фрагменты кода покажут, насколько похожи друг на друга различные фрагменты текста при запуске.

Поддерживаемые типы задач

Тип задачи Описание Примеры
СЕМАНТИЧЕСКОЕ СХОДСТВО Оптимизированные векторные представления для оценки сходства текста. Рекомендательные системы, обнаружение дубликатов
КЛАССИФИКАЦИЯ Оптимизированные векторные представления для классификации текстов в соответствии с заданными метками. Анализ настроений, обнаружение спама
КЛАСТЕРИЗАЦИЯ Оптимизированные векторные представления позволяют кластеризовать тексты на основе их сходства. Организация документации, исследование рынка, выявление аномалий.
ПОЛУЧЕНИЕ ДОКУМЕНТА Встраивания, оптимизированные для поиска по документам. Индексирование статей, книг или веб-страниц для поиска.
RETRIEVAL_QUERY Встраивания оптимизированы для общих поисковых запросов. Используйте RETRIEVAL_QUERY для запросов; RETRIEVAL_DOCUMENT для извлекаемых документов. Пользовательский поиск
ЗАПРОС НА ПОЛУЧЕНИЕ КОДА Встраивания, оптимизированные для извлечения блоков кода на основе запросов на естественном языке. Используйте CODE_RETRIEVAL_QUERY для запросов; RETRIEVAL_DOCUMENT для извлечения блоков кода. Предложения по коду и поиск
ВОПРОСЫ И ОТВЕТЫ Встраивание вопросов в систему вопросов и ответов, оптимизированное для поиска документов, отвечающих на вопрос. Используйте QUESTION_ANSWERING для вопросов; RETRIEVAL_DOCUMENT для извлекаемых документов. Чат
ПРОВЕРКА ФАКТОВ Встраивания для утверждений, требующих проверки, оптимизированы для поиска документов, содержащих доказательства, подтверждающие или опровергающие утверждение. Используйте FACT_VERIFICATION для целевого текста; RETRIEVAL_DOCUMENT для поиска документов. Автоматизированные системы проверки фактов

Контроль размера встраивания

Модели gemini-embedding-001 и gemini-embedding-2-preview обучаются с использованием метода Matryoshka Representation Learning (MRL), который учит модель изучать многомерные эмбеддинги, имеющие начальные сегменты (или префиксы), которые также являются полезными, более простыми версиями тех же данных.

Используйте параметр output_dimensionality для управления размером выходного вектора эмбеддинга. Выбор меньшей размерности выходного вектора может сэкономить место для хранения и повысить вычислительную эффективность для последующих приложений, практически не жертвуя качеством. По умолчанию обе модели выдают 3072-мерный вектор эмбеддинга, но вы можете уменьшить его размер без потери качества, чтобы сэкономить место для хранения. Мы рекомендуем использовать 768, 1536 или 3072 размерности выходного вектора.

Python

from google import genai
from google.genai import types

client = genai.Client()

result = client.models.embed_content(
    model="gemini-embedding-001",
    contents="What is the meaning of life?",
    config=types.EmbedContentConfig(output_dimensionality=768)
)

[embedding_obj] = result.embeddings
embedding_length = len(embedding_obj.values)

print(f"Length of embedding: {embedding_length}")

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {
    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        content: 'What is the meaning of life?',
        outputDimensionality: 768,
    });

    const embeddingLength = response.embedding.values.length;
    console.log(`Length of embedding: ${embeddingLength}`);
}

main();

Идти

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    // The client uses Application Default Credentials.
    // Authenticate with 'gcloud auth application-default login'.
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }

    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{OutputDimensionality: 768},
    )
    if err != nil {
        log.Fatal(err)
    }

    embedding := result.Embeddings[0]
    embeddingLength := len(embedding.Values)
    fmt.Printf("Length of embedding: %d\n", embeddingLength)
}

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H 'Content-Type: application/json' \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
        "content": {"parts":[{ "text": "What is the meaning of life?"}]},
        "output_dimensionality": 768
    }'

Пример вывода из фрагмента кода:

Length of embedding: 768

Обеспечение качества для меньших размеров

Векторные представления для 3072 измерений нормализованы. Нормализованные векторные представления обеспечивают более точное семантическое сходство за счет сравнения направления вектора, а не его величины. Для других измерений, включая 768 и 1536, необходимо нормализовать векторные представления следующим образом:

Python

import numpy as np
from numpy.linalg import norm

embedding_values_np = np.array(embedding_obj.values)
normed_embedding = embedding_values_np / np.linalg.norm(embedding_values_np)

print(f"Normed embedding length: {len(normed_embedding)}")
print(f"Norm of normed embedding: {np.linalg.norm(normed_embedding):.6f}") # Should be very close to 1

Пример выходных данных из этого фрагмента кода:

Normed embedding length: 768
Norm of normed embedding: 1.000000

В следующей таблице показаны результаты MTEB — широко используемого бенчмарка для эмбеддингов — для различных размерностей. Примечательно, что результаты показывают, что производительность не строго зависит от размера размерности эмбеддинга: эмбеддинги с меньшей размерностью показывают результаты, сопоставимые с эмбеддингами с большей размерностью.

Размерность МRL Оценка MTEB
2048 68.16
1536 68.17
768 67.99
512 67.55
256 66.19
128 63.31

Мультимодальные вложения

Модель gemini-embedding-2-preview поддерживает многомодальный ввод, позволяя встраивать изображения, видео, аудио и документы вместе с текстом. Все модальности отображаются в одно и то же пространство встраивания, что обеспечивает поиск и сравнение между различными модальностями.

Поддерживаемые режимы и ограничения

Максимальное общее количество входных токенов составляет 8192 токена.

Модальность Технические характеристики и ограничения
Текст Поддерживает до 8192 токенов.
Изображение Максимум 6 изображений на один запрос. Поддерживаемые форматы: PNG, JPEG.
Аудио Максимальная продолжительность 80 секунд. Поддерживаемые форматы: MP3, WAV.
Видео Максимальная продолжительность 128 секунд. Поддерживаемые форматы: MP4, MOV. Поддерживаемые кодеки: H264, H265, AV1, VP9.
Документы (PDF) Максимум 6 страниц.

Встраивание изображений

В следующем примере показано, как встроить изображение с помощью gemini-embedding-2-preview .

Изображения могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через API файлов .

Python

from google import genai
from google.genai import types

with open('example.png', 'rb') as f:
    image_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
    ]
)

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const imgBase64 = fs.readFileSync("example.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: [{
            inlineData: {
                mimeType: 'image/png',
                data: imgBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

IMG_PATH="/path/to/your/image.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "image/png",
                    "data": "'"${IMG_BASE64}"'"
                }
            }]
        }
    }'

Встраивание агрегации

При работе с мультимодальным контентом структура входных данных влияет на результат встраивания:

  • Единая запись контента: отправка нескольких частей (например, текста и изображения) в рамках одной записи контента приводит к созданию одного агрегированного встраивания для всех модальностей в этой записи.
  • Несколько записей: Отправка нескольких записей в массиве contents возвращает отдельные эмбеддинги для каждой записи.
  • Представление на уровне поста: Для сложных объектов, таких как публикации в социальных сетях, содержащие множество медиафайлов, мы рекомендуем объединять отдельные эмбеддинги (например, путем усреднения), чтобы создать согласованное представление на уровне поста.

В следующем примере показано, как создать одно агрегированное векторное представление для ввода текста и изображения. Используйте поле parts для объединения нескольких входных данных:

Python

from google import genai
from google.genai import types

with open('dog.png', 'rb') as f:
    image_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        types.Content(
            parts=[
                types.Part(text="An image of a dog"),
                types.Part.from_bytes(
                    data=image_bytes,
                    mime_type='image/png',
                )
            ]
        )
    ]
)

# This produces one embedding
for embedding in result.embeddings:
    print(embedding.values)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const imgBase64 = fs.readFileSync("dog.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: {
            parts: [
                { text: 'An image of a dog' },
                { inlineData: { mimeType: 'image/png', data: imgBase64 } },
            ],
        },
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "content": {
            "parts": [
                {"text": "An image of a dog"},
                {
                    "inline_data": {
                        "mime_type": "image/png",
                        "data": "'"${IMG_BASE64}"'"
                    }
                }
            ]
        }
    }'

С другой стороны, в этом примере создается несколько встраиваний в одном вызове функции встраивания:

Python

from google import genai
from google.genai import types

with open('dog.png', 'rb') as f:
    image_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        "The dog is cute",
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
    ]
)

# This produces two embeddings
for embedding in result.embeddings:
    print(embedding.values)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const imgBase64 = fs.readFileSync("dog.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: [
            'The dog is cute',
            {
                inlineData: {
                    mimeType: 'image/png',
                    data: imgBase64,
                },
            },
        ],
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:batchEmbedContents" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "requests": [
            {
                "model": "models/gemini-embedding-2-preview",
                "content": {"parts": [{"text": "The dog is cute"}]}
            },
            {
                "model": "models/gemini-embedding-2-preview",
                "content": {"parts": [{"inline_data": {"mime_type": "image/png", "data": "'"${IMG_BASE64}"'"}}]}
            }
        ]
    }'

Встраивание аудио

В следующем примере показано, как встроить аудиофайл с помощью gemini-embedding-2-preview .

Аудиофайлы могут предоставляться как в виде встроенных данных, так и в виде загруженных файлов через API файлов .

Python

from google import genai
from google.genai import types

with open('example.mp3', 'rb') as f:
    audio_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        types.Part.from_bytes(
            data=audio_bytes,
            mime_type='audio/mpeg',
        ),
    ]
)

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const audioBase64 = fs.readFileSync("example.mp3", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: [{
            inlineData: {
                mimeType: 'audio/mpeg',
                data: audioBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

AUDIO_PATH="/path/to/your/example.mp3"
AUDIO_BASE64=$(base64 -w0 "${AUDIO_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "audio/mpeg",
                    "data": "'"${AUDIO_BASE64}"'"
                }
            }]
        }
    }'

Встраивание видео

В следующем примере показано, как встроить видео с помощью gemini-embedding-2-preview .

Видеофайлы могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через API файлов .

Python

from google import genai
from google.genai import types

client = genai.Client()

with open('example.mp4', 'rb') as f:
    video_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        types.Part.from_bytes(
            data=video_bytes,
            mime_type='video/mp4',
        ),
    ]
)

print(result.embeddings[0].values)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const videoBase64 = fs.readFileSync("example.mp4", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: [{
            inlineData: {
                mimeType: 'video/mp4',
                data: videoBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

VIDEO_PATH="/path/to/your/video.mp4"
VIDEO_BASE64=$(base64 -w0 "${VIDEO_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "video/mp4",
                    "data": "'"${VIDEO_BASE64}"'"
                }
            }]
        }
    }'

Если вам нужно встроить видео продолжительностью более 128 секунд, вы можете разбить видео на перекрывающиеся сегменты и встроить эти сегменты по отдельности.

Встраивание документов

Документы в формате PDF можно встраивать напрямую. Модель обрабатывает визуальное и текстовое содержимое каждой страницы.

PDF-файлы могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через API файлов .

Python

from google import genai
from google.genai import types

with open('example.pdf', 'rb') as f:
    pdf_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2-preview',
    contents=[
        types.Part.from_bytes(
            data=pdf_bytes,
            mime_type='application/pdf',
        ),
    ]
)

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {
    const ai = new GoogleGenAI({});

    const pdfBase64 = fs.readFileSync("example.pdf", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2-preview',
        contents: [{
            inlineData: {
                mimeType: 'application/pdf',
                data: pdfBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

ОТДЫХ

PDF_PATH="/path/to/your/example.pdf"
PDF_BASE64=$(base64 -w0 "${PDF_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "application/pdf",
                    "data": "'"${PDF_BASE64}"'"
                }
            }]
        }
    }'

Варианты использования

Встраивание текста имеет решающее значение для целого ряда распространенных сценариев использования ИИ, таких как:

Хранение эмбеддингов

При внедрении эмбеддингов в производство часто используются векторные базы данных для эффективного хранения, индексирования и извлечения многомерных эмбеддингов. Google Cloud предлагает управляемые сервисы данных, которые можно использовать для этой цели, включая BigQuery , AlloyDB и Cloud SQL .

В следующих руководствах показано, как использовать сторонние векторные базы данных с Gemini Embedding.

Версии моделей

Предварительная версия Gemini Embedding 2

Свойство Описание
Код модели

API Gemini

gemini-embedding-2-preview

Поддерживаемые типы данных

Вход

Текст, изображение, видео, аудио, PDF

Выход

Встраивание текста

Ограничения на количество токенов [*]

Ограничение на количество введенных токенов

8192

Размеры выходных данных

Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072

версии
Для получения более подробной информации ознакомьтесь с шаблонами версий модели .
  • Предварительный просмотр: gemini-embedding-2-preview
Последнее обновление Ноябрь 2025 г.

Встраивание Gemini

Свойство Описание
Код модели

API Gemini

gemini-embedding-001

Поддерживаемые типы данных

Вход

Текст

Выход

Встраивание текста

Ограничения на количество токенов [*]

Ограничение на количество введенных токенов

2048

Размеры выходных данных

Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072

версии
Для получения более подробной информации ознакомьтесь с шаблонами версий модели .
  • Стабильная версия: gemini-embedding-001
Последнее обновление Июнь 2025 г.

Для получения информации об устаревших моделях Embeddings посетите страницу «Устаревшие функции» .

Миграция из gemini-embedding-001

Пространства встраивания между gemini-embedding-001 и gemini-embedding-2-preview несовместимы . Это означает, что вы не можете напрямую сравнивать встраивания, сгенерированные одной моделью, с встраиваниями, сгенерированными другой. Если вы обновляете модель до gemini-embedding-2-preview , вам необходимо повторно встроить все существующие данные.

Пакетные встраивания

Если задержка не является проблемой, попробуйте использовать модели Gemini Embeddings с Batch API . Это позволит значительно повысить пропускную способность при 50% от стандартной цены Embeddings. Примеры начала работы можно найти в руководстве по Batch API .

Уведомление об ответственном использовании

В отличие от генеративных моделей ИИ, создающих новый контент, модель Gemini Embedding предназначена только для преобразования формата ваших входных данных в числовое представление. Хотя Google отвечает за предоставление модели встраивания, которая преобразует формат ваших входных данных в запрошенный числовой формат, пользователи сохраняют полную ответственность за вводимые ими данные и полученные в результате встраивания. Используя модель Gemini Embedding, вы подтверждаете, что обладаете необходимыми правами на любой загружаемый вами контент. Не создавайте контент, нарушающий права интеллектуальной собственности или права на неприкосновенность частной жизни других лиц. Использование вами этого сервиса регулируется нашей Политикой запрещенного использования и Условиями использования Google .

Начните создавать с помощью эмбеддингов.

Ознакомьтесь с кратким руководством по эмбеддингам , чтобы изучить возможности модели и узнать, как настраивать и визуализировать ваши эмбеддинги.