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}"'"
}
}]
}
}'
Варианты использования
Встраивание текста имеет решающее значение для целого ряда распространенных сценариев использования ИИ, таких как:
- Генерация с расширенным поиском (Retrieval-Augmented Generation, RAG): Эмбеддинги повышают качество генерируемого текста за счет извлечения и включения релевантной информации в контекст модели.
Поиск информации: поиск наиболее семантически схожих текстов или документов по заданному текстовому фрагменту.
Переранжирование результатов поиска : определение приоритета наиболее релевантных элементов путем семантической оценки первоначальных результатов в соответствии с поисковым запросом.
Выявление аномалий: сравнение групп эмбеддингов может помочь выявить скрытые тенденции или выбросы.
Классификация: Автоматическая классификация текста на основе его содержания, например, для анализа настроения или обнаружения спама.
Кластеризация: Эффективно выявляйте сложные взаимосвязи, создавая кластеры и визуализации ваших эмбеддингов.
Хранение эмбеддингов
При внедрении эмбеддингов в производство часто используются векторные базы данных для эффективного хранения, индексирования и извлечения многомерных эмбеддингов. Google Cloud предлагает управляемые сервисы данных, которые можно использовать для этой цели, включая BigQuery , AlloyDB и Cloud SQL .
В следующих руководствах показано, как использовать сторонние векторные базы данных с Gemini Embedding.
- Учебные пособия по ChromaDB
- Учебные пособия QDrant
- Учебные пособия Weaviate,
- Уроки по изготовлению из сосновых шишек
Версии моделей
Предварительная версия Gemini Embedding 2
| Свойство | Описание |
|---|---|
| Код модели | API Gemini |
| Поддерживаемые типы данных | Вход Текст, изображение, видео, аудио, PDF Выход Встраивание текста |
| Ограничения на количество токенов [*] | Ограничение на количество введенных токенов 8192 Размеры выходных данных Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072 |
| версии |
|
| Последнее обновление | Ноябрь 2025 г. |
Встраивание Gemini
| Свойство | Описание |
|---|---|
| Код модели | API Gemini |
| Поддерживаемые типы данных | Вход Текст Выход Встраивание текста |
| Ограничения на количество токенов [*] | Ограничение на количество введенных токенов 2048 Размеры выходных данных Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072 |
| версии |
|
| Последнее обновление | Июнь 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 .
Начните создавать с помощью эмбеддингов.
Ознакомьтесь с кратким руководством по эмбеддингам , чтобы изучить возможности модели и узнать, как настраивать и визуализировать ваши эмбеддинги.