The Gemini API offers embedding models to generate embeddings for text, images, video, and other content. These resulting embeddings can then be used for tasks such as semantic search, classification, and clustering, providing more accurate, context-aware results than keyword-based approaches.
The latest model, gemini-embedding-2 , is the first multimodal embedding model in the Gemini API. It maps text, images, video, audio, and documents into a unified embedding space, enabling cross-modal search, classification, and clustering across over 100 languages. See the multimodal embeddings section to learn more. For text-only use cases, gemini-embedding-001 remains available.
Building Retrieval Augmented Generation (RAG) systems is a common use case for AI products. Embeddings play a key role in significantly enhancing model outputs with improved factual accuracy, coherence, and contextual richness. If you prefer to use a managed RAG solution, we built the File Search tool which makes doing RAG easier to manage and more cost effective.
Генерация эмбеддингов
Для генерации текстовых вставок используйте метод embedContent :
Python
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-2",
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-2',
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-2",
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-2:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"model": "models/gemini-embedding-2",
"content": {
"parts": [{
"text": "What is the meaning of life?"
}]
}
}'
Укажите тип задачи для повышения производительности.
You can use embeddings for a wide range of tasks from classification to document search. Specifying the right task type helps optimize the embeddings for the intended relationships, maximizing accuracy and efficiency.
Типы задач с использованием эмбеддингов 2
For text-only tasks with gemini-embedding-2 , we strongly recommend you add the task instruction in your prompt. This can be done by formatting the query and the document with the correct task prefix.
When generating a single embedding based on multimodal input , we generally don't recommend prefixing the text portion of the input with a task instruction. In some cases it improves performance, but in others it reduces performance.
В следующих таблицах приведены примеры форматирования запросов и документов для симметричных и асимметричных сценариев использования с помощью модели gemini-embedding-2 .
Варианты использования для поиска информации (асимметричный формат)
В асимметричных сценариях использования добавьте префикс задачи к запросу и примените структуру документа для контента, который вы хотите встроить и получить.
| Вариант использования | Структура запроса | Структура документа |
|---|---|---|
| Поисковый запрос | task: search result | query: {content} | title: {title} | text: {content}Если заголовок отсутствует, используйте title: none . |
| Ответы на вопросы | task: question answering | query: {content} | title: {title} | text: {content} |
| Проверка фактов | task: fact checking | query: {content} | title: {title} | text: {content} |
| Получение кода | task: code retrieval | query: {content} | title: {title} | text: {content} |
Пример использования
Python
# Generate embedding for a task's query. Use your correct task here:
def prepare_query(query):
# return f"task: question answering | query: {query}"
# return f"task: fact checking | query: {query}"
# return f"task: code retrieval | query: {query}"
return f"task: search result | query: {query}"
# Generate embedding for document of an asymmetric retrieval task:
def prepare_document(content, title=None):
if title is None:
title = "none"
return f"title: {title} | text: {content}"
Варианты использования с одним входным параметром (симметричный формат)
В симметричных сценариях использования для одной и той же задачи применяйте одинаковое форматирование как для запроса, так и для документа.
| Вариант использования | Входная структура |
|---|---|
| Классификация | task: classification | query: {content} |
| Кластеризация | task: clustering | query: {content} |
| Семантическое сходство | task: sentence similarity | query: {content}Не используйте это для поиска или извлечения информации. Это предназначено для определения семантического сходства текста. |
Пример использования
Python
# Generate embedding for query & document of your task.
def prepare_query_and_document(content):
# return f'task: clustering | query: {content}'
# return f'task: sentence similarity | query: {content}'
return f'task: classification | query: {content}'
It is important that the task is used consistently. Eg, if documents are embedded with f'task: classification | query: {content}' , the query should also be embedded following this task format.
Типы задач с использованием эмбеддингов 1
Для gemini-embedding-001 task_type можно указать в методе embedContent . Полный список поддерживаемых типов задач см. в таблице «Поддерживаемые типы задач» .
В следующем примере показано, как использовать 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";
// npm i compute-cosine-similarity
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,
config: { 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?"
}
]
}
}'
Приведенные фрагменты кода покажут, насколько похожи друг на друга различные фрагменты текста при запуске.
Поддерживаемые типы задач
Поддерживаемые типы задач для gemini-embedding-001 :
| Тип задачи | Описание | Примеры |
|---|---|---|
| СЕМАНТИЧЕСКОЕ СХОДСТВО | Оптимизированные векторные представления для оценки сходства текста. | Рекомендательные системы, обнаружение дубликатов |
| КЛАССИФИКАЦИЯ | Оптимизированные векторные представления для классификации текстов в соответствии с заданными метками. | Анализ настроений, обнаружение спама |
| КЛАСТЕРИЗАЦИЯ | Оптимизированные векторные представления позволяют кластеризовать тексты на основе их сходства. | Организация документации, исследование рынка, выявление аномалий. |
| ПОЛУЧЕНИЕ ДОКУМЕНТА | Встраивания, оптимизированные для поиска по документам. | Индексирование статей, книг или веб-страниц для поиска. |
| RETRIEVAL_QUERY | Встраивания оптимизированы для общих поисковых запросов. Используйте RETRIEVAL_QUERY для запросов; RETRIEVAL_DOCUMENT для извлекаемых документов. | Пользовательский поиск |
| ЗАПРОС НА ПОЛУЧЕНИЕ КОДА | Встраивания, оптимизированные для извлечения блоков кода на основе запросов на естественном языке. Используйте CODE_RETRIEVAL_QUERY для запросов; RETRIEVAL_DOCUMENT для извлечения блоков кода. | Предложения по коду и поиск |
| ВОПРОСЫ И ОТВЕТЫ | Embeddings for questions in a question-answering system, optimized for finding documents that answer the question. Use QUESTION_ANSWERING for questions; RETRIEVAL_DOCUMENT for documents to be retrieved. | Чат |
| ПРОВЕРКА ФАКТОВ | Embeddings for statements that need to be verified, optimized for retrieving documents that contain evidence supporting or refuting the statement. Use FACT_VERIFICATION for the target text; RETRIEVAL_DOCUMENT for documents to be retrieved | Автоматизированные системы проверки фактов |
Контроль размера встраивания
Both gemini-embedding-001 and gemini-embedding-2 are trained using the Matryoshka Representation Learning (MRL) technique which teaches a model to learn high-dimensional embeddings that have initial segments (or prefixes) which are also useful, simpler versions of the same data.
Используйте параметр 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-2",
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-2',
contents: 'What is the meaning of life?',
config: { outputDimensionality: 768 },
});
const embeddingLength = response.embeddings[0].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-2",
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-2: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
Обеспечение качества для меньших размеров
While the default 3072-dimension embeddings are always normalized, Gemini Embedding 2 also auto-normalizes truncated dimensions (eg, 768, 1536). This ensures semantic similarity is calculated via vector direction rather than magnitude, providing more accurate results out of the box.
Более старые модели : Если вы используете gemini-embedding-001 , вам необходимо вручную нормализовать измерения, отличные от 3072, следующим образом:
Python
import numpy as np
from numpy.linalg import norm
# Only for embeddings from `gemini-embedding-001`
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
The following table shows the MTEB scores, a commonly used benchmark for embeddings, for different dimensions. Notably, the result shows that performance is not strictly tied to the size of the embedding dimension, with lower dimensions achieving scores comparable to their higher dimension counterparts.
| Размерность МRL | Оценка MTEB (Gemini Embedding 001) |
|---|---|
| 2048 | 68.16 |
| 1536 | 68.17 |
| 768 | 67.99 |
| 512 | 67.55 |
| 256 | 66.19 |
| 128 | 63.31 |
Мультимодальные вложения
The gemini-embedding-2 model supports multimodal input, allowing you to embed images, video, audio, and documents content alongside text. All modalities are mapped into the same embedding space, enabling cross-modal search and comparison.
Поддерживаемые режимы и ограничения
Максимальное общее количество входных токенов составляет 8192 токена.
| Модальность | Технические характеристики и ограничения |
|---|---|
| Текст | Поддерживает до 8192 токенов. |
| Изображение | Максимум 6 изображений на один запрос. Поддерживаемые форматы: PNG, JPEG. |
| Аудио | Максимальная продолжительность 180 секунд. Поддерживаемые форматы: MP3, WAV. |
| Видео | Максимальная продолжительность 120 секунд. Поддерживаемые форматы: MP4, MOV. Поддерживаемые кодеки: H264, H265, AV1, VP9. The system processes a maximum of 32 frames per video: short videos (≤32s) are sampled at 1 fps, while longer videos are uniformly sampled to 32 frames. Audio tracks are not processed in video files. |
| Документы (PDF) | Максимум 1 файл на запрос, объемом до 6 страниц. |
Встраивание изображений
В следующем примере показано, как встроить изображение с помощью gemini-embedding-2 .
Изображения могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через 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',
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',
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: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приводит к созданию одного агрегированного векторного представления для всех входных данных. - Несколько объектов
Content(отдельно): Оборачивание каждого поля ввода в объектContentи передача их в параметреcontentsвозвращает отдельные векторные представления для каждой записи. - Post-level representation: For complex objects like social media posts with multiple media items, we recommend aggregating separate embeddings (for example, by averaging) to create a coherent post-level representation.
В следующем примере показано, как создать одно агрегированное представление для ввода текста и изображения. Просто добавьте несколько полей ввода в параметр contents :
Python
from google import genai
from google.genai import types
client = genai.Client()
with open('dog.png', 'rb') as f:
image_bytes = f.read()
result = client.models.embed_content(
model='gemini-embedding-2',
contents=[
"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',
contents: [
'An image of a dog',
{
inlineData: {
mimeType: 'image/png',
data: imgBase64,
},
},
],
});
// This produces one embedding
for (const embedding of response.embeddings) {
console.log(embedding.values);
}
}
main();
ОТДЫХ
IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2: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}"'"
}
}
]
}
}'
С другой стороны, если вы используете объекты Content внутри параметра contents , он возвращает отдельные встраивания. В этом примере создается несколько встраиваний в одном вызове функции встраивания:
Python
from google import genai
from google.genai import types
client = genai.Client()
with open('dog.png', 'rb') as f:
image_bytes = f.read()
result = client.models.embed_content(
model="gemini-embedding-2",
contents=[
types.Content(parts=[types.Part.from_text(text="task: classification | query: An image of a dog")]),
types.Content(
parts=[
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',
contents: [
{ parts: [{ text: 'task: classification | query: An image of a dog' }] },
{
parts: [{
inlineData: {
mimeType: 'image/png',
data: imgBase64,
},
}],
},
],
});
// This produces two embeddings
for (const embedding of response.embeddings) {
console.log(embedding.values);
}
}
main();
ОТДЫХ
IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2:batchEmbedContents" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"requests": [
{
"model": "models/gemini-embedding-2",
"content": {"parts": [{"text": "task: classification | query: An image of a dog"}]}
},
{
"model": "models/gemini-embedding-2",
"content": {"parts": [{"inline_data": {"mime_type": "image/png", "data": "'"${IMG_BASE64}"'"}}]}
}
]
}'
Встраивание аудио
В следующем примере показано, как встроить аудиофайл с помощью gemini-embedding-2 .
Аудиофайлы могут предоставляться как в виде встроенных данных, так и в виде загруженных файлов через 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',
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',
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: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 .
Видеофайлы могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через 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',
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',
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: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}"'"
}
}]
}
}'
Если вам нужно встроить видео продолжительностью более 120 секунд, вы можете разбить видео на перекрывающиеся сегменты и встроить эти сегменты по отдельности.
Встраивание документов
Документы в формате PDF можно встраивать напрямую. Модель обрабатывает визуальное и текстовое содержимое каждой страницы.
PDF-файлы могут предоставляться как в виде встроенных данных, так и в виде загружаемых файлов через API файлов .
Как модель обрабатывает PDF-файлы
При встраивании PDF-файла модель обрабатывает документ, используя как визуальные, так и текстовые характеристики:
- Визуальное представление: Модель отображает каждую страницу как изображение, что требует 258 токенов на страницу.
- Text extraction: The model extracts text from the document. For native PDFs (which contain digital text), the model extracts the text directly. For scanned PDFs (which contain images of text), the model automatically runs optical character recognition (OCR) to extract the text.
To calculate the total token count for a PDF, add the visual tokens (258 per page) to the text tokens. Your inputs must fit within the model's 8,192 token limit (shared across all modalities). The system silently truncates inputs that exceed this limit.
ограничения PDF
- Количество файлов в одном запросе: вы можете отправить максимум 1 PDF-файл.
- Ограничение по количеству страниц: вы можете загрузить максимум 6 страниц в одном файле. Для наилучшего качества мы настоятельно рекомендуем использовать 1 страницу на PDF-файл.
В следующем примере показано, как встроить PDF-файл с помощью gemini-embedding-2 :
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',
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',
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: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}"'"
}
}]
}
}'
Варианты использования
Встраивание текста имеет решающее значение для целого ряда распространенных сценариев использования ИИ, таких как:
- Генерация с расширенным поиском (Retrieval-Augmented Generation, RAG): Эмбеддинги повышают качество генерируемого текста за счет извлечения и включения релевантной информации в контекст модели.
Поиск информации: поиск наиболее семантически схожих текстов или документов по заданному текстовому фрагменту.
Переранжирование результатов поиска : определение приоритета наиболее релевантных элементов путем семантической оценки первоначальных результатов в соответствии с поисковым запросом.
Выявление аномалий: сравнение групп эмбеддингов может помочь выявить скрытые тенденции или выбросы.
Классификация: Автоматическая классификация текста на основе его содержания, например, для анализа настроения или обнаружения спама.
Кластеризация: Эффективно выявляйте сложные взаимосвязи, создавая кластеры и визуализации ваших эмбеддингов.
Хранение эмбеддингов
As you take embeddings to production, it is common to use vector databases to efficiently store, index, and retrieve high-dimensional embeddings. Google Cloud offers managed data services that can be used for this purpose including Gemini Enterprise Agent Platform Vector Search 2.0 , BigQuery , AlloyDB , and Cloud SQL .
В следующих руководствах показано, как использовать сторонние векторные базы данных с Gemini Embedding.
- Учебные пособия по ChromaDB
- Учебные пособия QDrant
- Учебные пособия Weaviate,
- Уроки по изготовлению из сосновых шишек
Версии моделей
Gemini Embedding 2
| Свойство | Описание |
|---|---|
| Model code | API Gemini |
| Поддерживаемые типы данных | Вход Текст, изображение, видео, аудио, PDF Выход Встраивание текста |
| Token limits [*] | Ограничение на количество введенных токенов 8192 Output dimension size Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072 |
| версии |
|
| Latest update | Апрель 2026 г. |
Встраивание Gemini
| Свойство | Описание |
|---|---|
| Model code | API Gemini |
| Поддерживаемые типы данных | Вход Текст Выход Встраивание текста |
| Token limits [*] | Ограничение на количество введенных токенов 2048 Output dimension size Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072 |
| Versions |
|
| Latest update | Июнь 2025 г. |
Для получения информации об устаревших моделях Embeddings посетите страницу «Устаревшие функции» .
Migration from gemini-embedding-001
The embedding spaces between gemini-embedding-001 and gemini-embedding-2 are incompatible . This means you cannot directly compare embeddings generated by one model with embeddings generated by the other. If you are upgrading to gemini-embedding-2 , you must re-embed all of your existing data.
Помимо несовместимости, между двумя моделями есть еще несколько существенных различий:
Указание типа задачи: В
gemini-embedding-001тип задачи указывается с помощью параметраtask_type(например,SEMANTIC_SIMILARITY,RETRIEVAL_DOCUMENT). Вgemini-embedding-2параметрtask_typeне поддерживается. Вместо этого, для задач, содержащих только текст, следует включать инструкции к задаче непосредственно в подсказку. Подробную информацию о форматировании подсказок для различных сценариев использования см. в разделе «Типы задач с Embeddings 2» .Агрегация встраивания:
gemini-embedding-001генерирует отдельные встраивания для каждой строки в списке входных данных. В отличие от этого,gemini-embedding-2создает единое агрегированное встраивание, когда несколько входных данных (например, текст и изображения) предоставляются непосредственно в одном запросе. Чтобы сгенерировать отдельные встраивания для отдельных входных данных, оберните каждый входной параметр в объектContentили используйте API пакетной обработки . Дополнительную информацию см. в разделе «Агрегация встраивания» .Normalization: If you use
output_dimensionalityto request embeddings with fewer than 3072 dimensions,gemini-embedding-2automatically normalizes these truncated embeddings. Withgemini-embedding-001, you need to perform manual normalization for dimensions other than 3072. See Ensuring quality for smaller dimensions for details.
Batch embeddings
If latency is not a concern, try using the Gemini Embeddings models with Batch API . This allows for much higher throughput at 50% of the default Embedding price. Find examples on how to get started in the Batch API cookbook .
Responsible use notice
В отличие от генеративных моделей ИИ, создающих новый контент, модель Gemini Embedding предназначена только для преобразования формата ваших входных данных в числовое представление. Хотя Google отвечает за предоставление модели встраивания, которая преобразует формат ваших входных данных в запрошенный числовой формат, пользователи сохраняют полную ответственность за вводимые ими данные и полученные в результате встраивания. Используя модель Gemini Embedding, вы подтверждаете, что обладаете необходимыми правами на любой загружаемый вами контент. Не создавайте контент, нарушающий права интеллектуальной собственности или права на неприкосновенность частной жизни других лиц. Использование вами этого сервиса регулируется нашей Политикой запрещенного использования и Условиями использования Google .
Start building with embeddings
Ознакомьтесь с кратким руководством по эмбеддингам , чтобы изучить возможности модели и узнать, как настраивать и визуализировать ваши эмбеддинги.