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
Варианты использования
Встраивание текста имеет решающее значение для множества распространенных вариантов использования ИИ, таких как:
- Генерация дополненной информации (RAG): встраивание повышает качество генерируемого текста за счет извлечения и включения релевантной информации в контекст модели.
Поиск информации: использование вложений для поиска семантически схожего текста или документов по заданному фрагменту входного текста.
Учебное по поиску документов
Обнаружение аномалий: сравнение групп внедрений может помочь выявить скрытые тенденции или выбросы.
Классификация: автоматическая классификация текста на основе его содержания, например, анализ настроений или обнаружение спама.
Кластеризация: Эффективный способ понять взаимосвязи — это создание кластеров и визуализаций ваших внедрений.
Хранение вложений
При внедрении встраиваемых данных в производство часто используются векторные базы данных для эффективного хранения, индексации и извлечения многомерных встраиваемых данных. Google Cloud предлагает управляемые сервисы данных, которые можно использовать для этой цели, включая BigQuery , AlloyDB и Cloud SQL .
В следующих уроках показано, как использовать сторонние векторные базы данных с Gemini Embedding.
- Учебные по ChromaDB
- Учебные пособия QDrant
- Учебные пособия Weaviate
- с обучающими материалами Pinecone
Встраиваемые модели
Общедоступная модель
Устаревшие модели
-
embedding-001
(Устаревание с 14 августа 2025 г.) -
text-embedding-004
(Устарело 14 января 2026 г.)
Использование вложений
В отличие от генеративных моделей искусственного интеллекта, создающих новый контент, модель встраивания Gemini предназначена только для преобразования формата ваших входных данных в числовое представление. Хотя Google отвечает за предоставление модели встраивания, преобразующей формат ваших входных данных в запрошенный числовой формат, пользователи несут полную ответственность за введённые ими данные и полученные встраивания. Используя модель встраивания Gemini, вы подтверждаете наличие у вас необходимых прав на любой загружаемый вами контент. Не создавайте контент, нарушающий права интеллектуальной собственности или конфиденциальности других лиц. Использование вами этого сервиса регулируется нашей Политикой в отношении запрещённого использования и Условиями обслуживания Google .
Начните строительство с встраиваниями
Ознакомьтесь с кратким руководством по внедрению , чтобы изучить возможности модели и узнать, как настраивать и визуализировать ваши внедрения.