API Gemini предлагает модели векторного представления текста для генерации встраивания слов, фраз, предложений и кода. Эти базовые модели используются в сложных задачах обработки естественного языка, таких как семантический поиск, классификация и кластеризация, обеспечивая более точные и контекстно-зависимые результаты, чем подходы, основанные на ключевых словах.
Создание систем генерации с расширенным поиском информации (Retrieval Augmented Generation, RAG) — распространенный пример использования эмбеддингов. Эмбеддинги играют ключевую роль в значительном улучшении выходных данных модели за счет повышения фактической точности, согласованности и контекстной насыщенности. Они эффективно извлекают релевантную информацию из баз знаний, представленных эмбеддингами, которая затем передается в качестве дополнительного контекста во входном запросе языковым моделям, направляя их на генерацию более обоснованных и точных ответов.
Чтобы узнать больше о доступных вариантах модели встраивания, см. раздел « Версии модели» . Для более высокой пропускной способности при вдвое меньшей цене попробуйте пакетное встраивание API .
Генерация эмбеддингов
Для генерации текстовых вставок используйте метод 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 "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?"}]}
}'
Также можно создавать векторные представления для нескольких фрагментов одновременно, передавая их в виде списка строк.
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:batchEmbedContents" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"requests": [{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "What is the meaning of life?"}]}, },
{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "How much wood would a woodchuck chuck?"}]}, },
{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "How does the brain work?"}]}, }, ]}' 2> /dev/null | grep -C 5 values
```
Укажите тип задачи для повышения производительности.
Эмбеддинги можно использовать для решения широкого спектра задач, от классификации до поиска документов. Указание правильного типа задачи помогает оптимизировать эмбеддинги для предполагаемых взаимосвязей, обеспечивая максимальную точность и эффективность. Полный список поддерживаемых типов задач см. в таблице «Поддерживаемые типы задач» .
В следующем примере показано, как использовать SEMANTIC_SIMILARITY для проверки степени сходства смысловых значений текстовых строк.
Python
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 "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"task_type": "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?"}]}
}'
Ниже приведен пример выходных данных из этого фрагмента кода:
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 для запросов; RETRIEVAL_DOCUMENT для извлечения блоков кода. | Предложения по коду и поиск |
| ВОПРОСЫ И ОТВЕТЫ | Встраивание вопросов в систему вопросов и ответов, оптимизированное для поиска документов, отвечающих на вопрос. Используйте QUESTION_ANSWERING для вопросов; RETRIEVAL_DOCUMENT для извлекаемых документов. | Чат |
| ПРОВЕРКА ФАКТОВ | Встраивания для утверждений, требующих проверки, оптимизированы для поиска документов, содержащих доказательства, подтверждающие или опровергающие утверждение. Используйте FACT_VERIFICATION для целевого текста; RETRIEVAL_DOCUMENT для поиска документов. | Автоматизированные системы проверки фактов |
Контроль размера встраивания
Модель эмбеддинга Gemini, gemini-embedding-001 , обучается с использованием метода обучения представлению «матрёшка» (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 "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-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 |
Варианты использования
Встраивание текста имеет решающее значение для целого ряда распространенных сценариев использования ИИ, таких как:
- Генерация с расширенным поиском (Retrieval-Augmented Generation, RAG): Эмбеддинги повышают качество генерируемого текста за счет извлечения и включения релевантной информации в контекст модели.
Поиск информации: поиск наиболее семантически схожих текстов или документов по заданному текстовому фрагменту.
Переранжирование результатов поиска : определение приоритета наиболее релевантных элементов путем семантической оценки первоначальных результатов в соответствии с поисковым запросом.
Выявление аномалий: сравнение групп эмбеддингов может помочь выявить скрытые тенденции или выбросы.
Классификация: Автоматическая классификация текста на основе его содержания, например, для анализа настроения или обнаружения спама.
Кластеризация: Эффективно выявляйте сложные взаимосвязи, создавая кластеры и визуализации ваших эмбеддингов.
Хранение эмбеддингов
При внедрении эмбеддингов в производство часто используются векторные базы данных для эффективного хранения, индексирования и извлечения многомерных эмбеддингов. Google Cloud предлагает управляемые сервисы данных, которые можно использовать для этой цели, включая BigQuery , AlloyDB и Cloud SQL .
В следующих руководствах показано, как использовать сторонние векторные базы данных с Gemini Embedding.
- Учебные пособия по ChromaDB
- Учебные пособия QDrant
- Учебные пособия Weaviate,
- Уроки по изготовлению из сосновых шишек
Версии моделей
| Свойство | Описание |
|---|---|
| Код модели | API Gemini |
| Поддерживаемые типы данных | Вход Текст Выход Встраивание текста |
| Ограничения на количество токенов [*] | Ограничение на количество введенных токенов 2048 Размеры выходных данных Гибкий, поддерживает: 128–3072, рекомендуется: 768, 1536, 3072 |
| версии |
|
| Последнее обновление | Июнь 2025 г. |
Пакетные встраивания
Если задержка не является проблемой, попробуйте использовать модель Gemini Embeddings с Batch API . Это позволит значительно повысить пропускную способность при цене, составляющей 50% от стоимости интерактивного Embedding. Примеры начала работы можно найти в руководстве по Batch API .
Уведомление об ответственном использовании
В отличие от генеративных моделей ИИ, создающих новый контент, модель Gemini Embedding предназначена только для преобразования формата ваших входных данных в числовое представление. Хотя Google отвечает за предоставление модели встраивания, которая преобразует формат ваших входных данных в запрошенный числовой формат, пользователи сохраняют полную ответственность за вводимые ими данные и полученные в результате встраивания. Используя модель Gemini Embedding, вы подтверждаете, что обладаете необходимыми правами на любой загружаемый вами контент. Не создавайте контент, нарушающий права интеллектуальной собственности или права на неприкосновенность частной жизни других лиц. Использование вами этого сервиса регулируется нашей Политикой запрещенного использования и Условиями использования Google .
Начните создавать с помощью эмбеддингов.
Ознакомьтесь с кратким руководством по эмбеддингам , чтобы изучить возможности модели и узнать, как настраивать и визуализировать ваши эмбеддинги.
Уведомление об устаревании устаревших моделей
Следующие модели будут выведены из эксплуатации в октябре 2025 года: - embedding-001 - embedding-gecko-001 - gemini-embedding-exp-03-07 ( gemini-embedding-exp )