Встраивания

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

Создание систем дополненной генерации (RAG) для поиска данных — распространённый вариант использования встраиваний. Встраивания играют ключевую роль в значительном улучшении результатов моделирования, повышая фактическую точность, согласованность и контекстную насыщенность. Они эффективно извлекают релевантную информацию из баз знаний, представленных встраиваниями, которые затем передаются в качестве дополнительного контекста во входные запросы языковым моделям, помогая им генерировать более обоснованные и точные ответы.

Для приложений корпоративного уровня и больших объемов рабочих нагрузок мы предлагаем использовать встраиваемые модели на базе Vertex AI .

Генерация вложений

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

Питон

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 "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": {"parts":[{"text": "What is the meaning of life?"}]}
    }'

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

Питон

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 "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
        ]
    }'

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

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

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

Питон

from google import genai
from google.genai import types
import numpy as np
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 = [
    np.array(e.values) for e in client.models.embed_content(
        model="gemini-embedding-001",
        contents=texts, 
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")).embeddings
]

# Calculate cosine similarity. Higher scores = greater semantic similarity.

embeddings_matrix = np.array(result)
similarity_matrix = cosine_similarity(embeddings_matrix)

for i, text1 in enumerate(texts):
    for j in range(i + 1, len(texts)):
        text2 = texts[j]
        similarity = similarity_matrix[i, j]
        print(f"Similarity between '{text1}' and '{text2}': {similarity:.4f}")

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 -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
    ],
    "embedding_config": {
        "task_type": "SEMANTIC_SIMILARITY"
    }
}'

Ниже показан пример вывода этого фрагмента кода:

Similarity between 'What is the meaning of life?' and 'What is the purpose of existence?': 0.9481

Similarity between 'What is the meaning of life?' and 'How do I bake a cake?': 0.7471

Similarity between 'What is the purpose of existence?' and 'How do I bake a cake?': 0.7371

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

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

Управление размером встраивания

Модель встраивания Gemini, gemini-embedding-001 , обучается с использованием метода обучения представлениям Matryoshka (MRL), который позволяет модели изучать многомерные встраивания, содержащие начальные сегменты (или префиксы), которые также являются полезными, более простыми версиями тех же данных. Вы можете использовать полное 3072-мерное встраивание или сократить его до меньшего размера без потери качества для экономии места. Для достижения наилучшего качества мы рекомендуем использовать первые 768 и 1536.

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

Питон

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 "x-goog-api-key: YOUR_GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]}
    ],
    "embedding_config": {
        "output_dimensionality": 768
    }
}'

Пример вывода:

Length of embedding: 768

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

Питон

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

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

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

Хранение вложений

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

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

Встраиваемые модели

Общедоступная модель

Устаревшие модели

  • embedding-001 (Устаревание с 14 августа 2025 г.)
  • text-embedding-004 (Устарело 14 января 2026 г.)

Использование вложений

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

Начните строительство с встраиваниями

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