הטמעות

‫Gemini API מציע מודלים להטמעה כדי ליצור הטמעות לטקסט, לתמונות, לסרטונים ולתוכן אחר. אפשר להשתמש בהטמעות שמתקבלות למשימות כמו חיפוש סמנטי, סיווג ואשכול, כדי לקבל תוצאות מדויקות יותר שמתחשבות בהקשר, בהשוואה לגישות שמבוססות על מילות מפתח.

המודל העדכני ביותר, gemini-embedding-2-preview, הוא מודל ההטמעה המולטי-מודאלי הראשון ב-Gemini API. הוא ממפה טקסט, תמונות, סרטונים, אודיו ומסמכים למרחב הטמעה מאוחד, ומאפשר חיפוש, סיווג וקיבוץ חוצי-אופנים ביותר מ-100 שפות. מידע נוסף זמין בקטע בנושא הטמעות מולטימודאליות. לתרחישי שימוש שמבוססים על טקסט בלבד, gemini-embedding-001 עדיין זמין.

יצירת מערכות Retrieval Augmented Generation (יצירה משולבת-אחזור, RAG) היא תרחיש שימוש נפוץ במוצרי AI. הטמעות ממלאות תפקיד מרכזי בשיפור משמעותי של התפוקות של המודל, עם דיוק עובדתי משופר, קוהרנטיות ועושר הקשרי. אם אתם מעדיפים להשתמש בפתרון RAG מנוהל, יצרנו את הכלי File Search (חיפוש קבצים), שמקל על ניהול RAG ומוזיל את העלויות.

יצירת הטמעות

משתמשים ב-method‏ 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();

Go

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))
}

REST

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();

Go

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))
}

REST

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";
// 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();

Go

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)
        }
    }
}

REST

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?"
        }
        ]
    }
    }'

קטעי הקוד יראו עד כמה חלקי הטקסט השונים דומים זה לזה כשהם יופעלו.

סוגי המשימות הנתמכים

סוג המשימה תיאור דוגמאות
SEMANTIC_SIMILARITY הטמעות שעברו אופטימיזציה להערכת הדמיון בין טקסטים. מערכות המלצות, זיהוי כפילויות
CLASSIFICATION הטמעה שעברה אופטימיזציה לסיווג טקסטים לפי תוויות מוגדרות מראש. ניתוח סנטימנטים, זיהוי ספאם
CLUSTERING הטמעות שעברו אופטימיזציה לקיבוץ טקסטים על סמך הדמיון ביניהם. ארגון מסמכים, מחקר שוק, זיהוי אנומליות
RETRIEVAL_DOCUMENT הטמעות שעברו אופטימיזציה לחיפוש מסמכים. יצירת אינדקס של מאמרים, ספרים או דפי אינטרנט לחיפוש.
RETRIEVAL_QUERY הטמעות שעברו אופטימיזציה לשאילתות חיפוש כלליות. משתמשים ב-RETRIEVAL_QUERY לשאילתות וב-RETRIEVAL_DOCUMENT למסמכים לאחזור. חיפוש בהתאמה אישית
CODE_RETRIEVAL_QUERY הטמעות שעברו אופטימיזציה לאחזור של בלוקים של קוד על סמך שאילתות בשפה טבעית. משתמשים ב-CODE_RETRIEVAL_QUERY לחיפושים וב-RETRIEVAL_DOCUMENT לבלוקים של קוד שאותם רוצים לאחזר. הצעות קוד וחיפוש
QUESTION_ANSWERING הטמעות לשאלות במערכת למתן תשובות לשאלות, שעברו אופטימיזציה למציאת מסמכים שכוללים תשובה לשאלה. משתמשים ב-QUESTION_ANSWERING לשאלות וב-RETRIEVAL_DOCUMENT למסמכים שרוצים לאחזר. תיבת צ'אט
FACT_VERIFICATION הטמעה של הצהרות שצריך לאמת, עם אופטימיזציה לאחזור מסמכים שמכילים הוכחות שתומכות בהצהרה או מפריכות אותה. משתמשים ב-FACT_VERIFICATION לטקסט היעד וב-RETRIEVAL_DOCUMENT למסמכים שאותם רוצים לאחזר מערכות אוטומטיות לבדיקת עובדות

שליטה בגודל ההטמעה

גם gemini-embedding-001 וגם gemini-embedding-2-preview עוברים אימון באמצעות טכניקת Matryoshka Representation Learning ‏ (MRL). הטכניקה הזו מלמדת מודל ללמוד הטמעות רב-ממדיות שיש להן פלחים ראשוניים (או קידומות) שגם הם שימושיים, ושהם גרסאות פשוטות יותר של אותם נתונים.

משתמשים בפרמטר output_dimensionality כדי לשלוט בגודל של וקטור ההטמעה של הפלט. בחירה של ממד פלט קטן יותר יכולה לחסוך מקום באחסון ולשפר את יעילות החישוב עבור יישומים במורד הזרם, בלי לפגוע באיכות. כברירת מחדל, שני המודלים יוצרים הטמעה תלת-ממדית של 3,072 מימדים, אבל אפשר לקצר אותה לגודל קטן יותר בלי לפגוע באיכות כדי לחסוך בנפח האחסון. מומלץ להשתמש בממדי פלט של 768,‏ 1,536 או 3,072.

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',
        contents: 'What is the meaning of life?',
        config: { outputDimensionality: 768 },
    });

    const embeddingLength = response.embeddings[0].values.length;
    console.log(`Length of embedding: ${embeddingLength}`);
}

main();

Go

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)
}

REST

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

הבטחת איכות למאפיינים קטנים יותר

ההטמעה של 3,072 המאפיינים מנורמלת. הטמעות מנורמלות מניבות דמיון סמנטי מדויק יותר כי הן משוות את כיוון הווקטור ולא את הגודל שלו. לגבי מאפיינים אחרים, כולל 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, מדד נפוץ להשוואה בין הטמעות, עבור ממדים שונים. חשוב לציין שהתוצאה מראה שהביצועים לא קשורים באופן ישיר לגודל של ממד ההטמעה, וממדים נמוכים יותר השיגו ציונים שדומים לאלה של הממדים הגבוהים יותר.

מאפיין MRL ציון MTEB ‏ (Gemini Embedding 001)
2048 68.16
1536 68.17
768 ‪67.99
512 67.55
256 66.19
128 63.31

הטמעות מולטי-מודאליות

מודל gemini-embedding-2-preview תומך בקלט מולטי-מודאלי, כך שאפשר להטמיע תמונות, סרטונים, אודיו ותוכן מסמכים לצד טקסט. כל המודאליות ממופות לאותו מרחב הטמעה, מה שמאפשר חיפוש והשוואה בין מודאליות שונות.

מגבלות וסוגי נתונים נתמכים

המגבלה הכוללת על מספר האסימונים בקלט היא 8,192 אסימונים.

אופן הפעולה מפרטים ומגבלות
טקסט תמיכה בעד 8,192 טוקנים.
תמונה אפשר להוסיף עד 6 תמונות לכל בקשה. פורמטים נתמכים: PNG, ‏ JPEG.
אודיו משך הזמן המקסימלי הוא 80 שניות. פורמטים נתמכים: MP3, ‏ WAV.
סרטון משך הזמן המקסימלי הוא 120 שניות. פורמטים נתמכים: MP4, ‏ MOV. קודקים נתמכים: H264, ‏ H265, ‏ AV1, ‏ VP9.
המערכת מעבדת עד 32 פריימים לכל סרטון: סרטונים קצרים (עד 32 שניות) נדגמים בקצב של פרים אחד לשנייה, ואילו סרטונים ארוכים יותר נדגמים באופן אחיד עד 32 פריימים. לא מתבצע עיבוד של טראקים של אודיו בקובצי וידאו.
מסמכים (PDF) עד 6 עמודים.

הטמעת תמונות

בדוגמה הבאה אפשר לראות איך מטמיעים תמונה באמצעות gemini-embedding-2-preview.

אפשר לספק תמונות כנתונים מוטבעים או כקבצים שהועלו דרך Files 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();

REST

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();

REST

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();

REST

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.

אפשר לספק קובצי אודיו כנתונים מוטבעים או כקבצים שהועלו דרך Files 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();

REST

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.

אפשר לספק סרטונים כנתונים מוטבעים או כקבצים שהועלו דרך Files 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();

REST

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}"'"
                }
            }]
        }
    }'

אם אתם צריכים להטמיע סרטונים באורך של יותר מ-120 שניות, אתם יכולים לחלק את הסרטון לקטעים חופפים ולהטמיע כל קטע בנפרד.

הטמעת מסמכים

אפשר להטמיע מסמכים בפורמט PDF ישירות. המודל מעבד את התוכן החזותי והטקסטואלי של כל דף.

אפשר לספק קובצי PDF כנתונים מוטבעים או כקבצים שהועלו דרך Files 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();

REST

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}"'"
                }
            }]
        }
    }'

תרחישים לדוגמה

הטמעות טקסט חיוניות למגוון תרחישי שימוש נפוצים ב-AI, כמו:

אחסון הטמעות

כשמעבירים הטמעות לייצור, נהוג להשתמש במסדי נתונים וקטוריים כדי לאחסן, ליצור אינדקס ולאחזר הטמעות רב-ממדיות בצורה יעילה. ‫Google Cloud מציע שירותי נתונים מנוהלים שאפשר להשתמש בהם למטרה הזו, כולל Vertex AI Vector Search 2.0,‏ BigQuery, ‏ AlloyDB ו-Cloud SQL.

במדריכים הבאים מוסבר איך להשתמש במסדי נתונים אחרים של וקטורים של צד שלישי עם Gemini Embedding.

גרסאות המודלים

‫Gemini Embedding 2 Preview

נכס תיאור
קוד הדגם

Gemini API

gemini-embedding-2-preview

סוגי נתונים נתמכים

קלט

טקסט, תמונה, סרטון, אודיו, PDF

פלט

הטמעות של טקסט

מגבלות על טוקנים[*]

מגבלת טוקנים של קלט

‫8,192

גודל מאפיין הפלט

גמיש, תומך בערכים: 128 עד 3072, מומלץ: 768, ‏ 1536, ‏ 3072

גרסאות
פרטים נוספים זמינים במאמר בנושא דפוסי גרסאות של מודלים.
  • תצוגה מקדימה: gemini-embedding-2-preview
העדכון האחרון נובמבר 2025

Gemini Embedding

נכס תיאור
קוד הדגם

Gemini API

gemini-embedding-001

סוגי נתונים נתמכים

קלט

טקסט

פלט

הטמעות של טקסט

מגבלות על טוקנים[*]

מגבלת טוקנים של קלט

2,048

גודל מאפיין הפלט

גמיש, תומך בערכים: 128 עד 3072, מומלץ: 768, ‏ 1536, ‏ 3072

גרסאות
פרטים נוספים זמינים במאמר בנושא דפוסי גרסאות של מודלים.
  • יציב: gemini-embedding-001
העדכון האחרון יוני 2025

למידע על מודלים של הטמעות שהוצאו משימוש, אפשר לעבור לדף הוצאות משימוש.

העברה מ-gemini-embedding-001

הרווחים להטמעה בין gemini-embedding-001 ל-gemini-embedding-2-preview לא תואמים. כלומר, אי אפשר להשוות ישירות בין הטמעות שנוצרו על ידי מודל אחד לבין הטמעות שנוצרו על ידי המודל השני. אם אתם משדרגים ל-gemini-embedding-2-preview, אתם צריכים להטמיע מחדש את כל הנתונים הקיימים.

הטמעות באצווה

אם זמן האחזור לא חשוב לכם, נסו להשתמש במודלים של Gemini Embeddings עם Batch API. השינוי הזה מאפשר תפוקה גבוהה בהרבה במחיר שהוא 50% ממחיר ברירת המחדל של Embedding. אפשר למצוא דוגמאות לאופן השימוש ב-Batch API במדריך המתכונים ל-Batch API.

הודעה על שימוש אחראי

בניגוד למודלים של AI גנרטיבי שיוצרים תוכן חדש, מודל Gemini Embedding נועד רק להמיר את הפורמט של נתוני הקלט לייצוג מספרי. ‫Google אחראית לספק מודל הטמעה שממיר את הפורמט של נתוני הקלט לפורמט המספרי המבוקש, אבל המשתמשים אחראים באופן מלא לנתונים שהם מזינים ולהטמעות שמתקבלות. השימוש במודל Gemini Embedding מבטא את האישור שלכם לכך שיש לכם את הזכויות הנדרשות על התוכן שאתם מעלים. אסור ליצור תוכן שמפר את זכויות הקניין הרוחני או זכויות הפרטיות של אחרים. השימוש בשירות הזה כפוף למדיניות שלנו בנושא שימוש אסור ולתנאים ולהגבלות של Google.

איך מתחילים ליצור הטמעות

כדאי לעיין במדריך למתחילים בנושא הטמעות כדי להכיר את היכולות של המודל וללמוד איך להתאים אישית את ההטמעות ולהציג אותן בצורה ויזואלית.