توفّر Gemini API نماذج تضمين لإنشاء تضمينات للنصوص والصور والفيديوهات وأنواع أخرى من المحتوى. يمكن بعد ذلك استخدام عمليات التضمين الناتجة في مهام مثل البحث الدلالي والتصنيف والتجميع، ما يوفّر نتائج أكثر دقة ومراعية للسياق مقارنةً بالطرق المستندة إلى الكلمات الرئيسية.
أحدث نموذج، gemini-embedding-2-preview، هو أول نموذج متعدد الوسائط
للتضمين في Gemini API. يعمل هذا النموذج على ربط النصوص والصور والفيديوهات والمقاطع الصوتية والمستندات بمساحة تضمين موحّدة، ما يتيح البحث والتصنيف والتجميع المتعدّد الوسائط بأكثر من 100 لغة. يمكنك الاطّلاع على قسم "التضمينات المتعدّدة الوسائط" لمعرفة المزيد. بالنسبة إلى حالات الاستخدام النصية فقط، سيظل gemini-embedding-001 متاحًا.
إنشاء أنظمة التوليد المعزّز بالاسترجاع (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();
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";
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();
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 | تضمينات محسَّنة لتقييم التشابه بين النصوص | أنظمة الاقتراح، رصد المحتوى المكرّر |
| التصنيف | تضمينات محسَّنة لتصنيف النصوص وفقًا لتصنيفات محدَّدة مسبقًا | تحليل المشاعر ورصد الرسائل غير المرغوب فيها |
| التجميع | تكون عمليات التضمين محسّنة لتجميع النصوص استنادًا إلى أوجه التشابه بينها. | تنظيم المستندات وأبحاث السوق ورصد القيم الشاذة |
| 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 للتحكّم في حجم متجه التضمين الناتج. يمكن أن يؤدي اختيار عدد أقل من الأبعاد الناتجة إلى توفير مساحة التخزين وزيادة كفاءة الحوسبة للتطبيقات اللاحقة، مع التضحية بجزء بسيط من الجودة. بشكل تلقائي، ينتج كلا النموذجين تضمينًا
بـ 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();
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
ضمان الجودة للأبعاد الأصغر
يتم تسوية تضمين البُعد 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، وهو مقياس أداء شائع الاستخدام لعمليات التضمين، وذلك لمختلف السمات. والجدير بالذكر أنّ النتيجة توضّح أنّ الأداء لا يرتبط بشكل صارم بحجم سمة التضمين، إذ حقّقت السمات ذات الأبعاد المنخفضة نتائج مماثلة للسمات ذات الأبعاد الأعلى.
| سمة MRL | نتيجة MTEB |
|---|---|
| 2048 | 68.16 |
| 1536 | 68.17 |
| 768 | 67.99 |
| 512 | 67.55 |
| 256 | 66.19 |
| 128 | 63.31 |
التضمينات المتعددة الوسائط
يتيح نموذج gemini-embedding-2-preview إدخال بيانات متعددة الوسائط، ما يسمح لك بتضمين صور وفيديوهات وملفات صوتية ومستندات إلى جانب النصوص. يتم ربط جميع الوسائط بمساحة التضمين نفسها، ما يتيح البحث والمقارنة بين الوسائط المختلفة.
الوسائط المتوافقة والحدود
الحد الأقصى العام لعدد الرموز المميزة المُدخلة هو 8192 رمزًا مميزًا.
| نمط البيانات | المواصفات والحدود |
|---|---|
| Text | يمكنه التعامل مع ما يصل إلى 8,192 رمزًا مميزًا. |
| صورة | يمكن إرسال 6 صور كحدّ أقصى لكل طلب. التنسيقات المتوافقة: PNG وJPEG |
| الصوت | الحدّ الأقصى للمدّة هو 80 ثانية. التنسيقات المتوافقة: MP3 وWAV |
| الفيديو | الحدّ الأقصى للمدّة هو 128 ثانية. الصيغ المتوافقة: MP4 وMOV، وبرنامج الترميز المتوافق: H264 وH265 وAV1 وVP9 |
| المستندات (ملف 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:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"content": {
"parts": [
{"text": "The dog is cute"},
{
"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}"'"
}
}]
}
}'
إذا كنت بحاجة إلى تضمين فيديوهات تزيد مدتها عن 128 ثانية، يمكنك تقسيم الفيديو إلى مقاطع متداخلة وتضمين هذه المقاطع بشكل منفصل.
تضمين المستندات
يمكن تضمين المستندات بتنسيق 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}"'"
}
}]
}
}'
حالات الاستخدام
تُعدّ تضمينات النصوص ضرورية لمجموعة متنوّعة من حالات الاستخدام الشائعة للذكاء الاصطناعي، مثل:
- التوليد المعزّز بالاسترجاع: تعمل التضمينات على تحسين جودة النص الذي يتم إنشاؤه من خلال استرجاع المعلومات ذات الصلة ودمجها في سياق النموذج.
استرجاع المعلومات: البحث عن النص أو المستندات الأكثر تشابهًا من الناحية الدلالية، وذلك استنادًا إلى جزء من النص المدخل.
إعادة ترتيب نتائج البحث: إعطاء الأولوية للعناصر الأكثر صلة من خلال تقييم النتائج الأولية بشكل دلالي مقارنةً بطلب البحث.
رصد القيم الشاذة: يمكن أن تساعد مقارنة مجموعات التضمينات في تحديد المؤشرات المخفية أو القيم الشاذة.
التصنيف: تصنيف النصوص تلقائيًا استنادًا إلى محتواها، مثل تحليل المشاعر أو رصد الرسائل غير المرغوب فيها
التجميع: يمكنك فهم العلاقات المعقّدة بشكل فعّال من خلال إنشاء مجموعات وتصوّرات لعمليات التضمين.
تخزين التضمينات
عند نقل عمليات التضمين إلى مرحلة الإنتاج، من الشائع استخدام قواعد بيانات المتّجهات لتخزين عمليات التضمين العالية الأبعاد وفهرستها واسترجاعها بكفاءة. توفّر Google Cloud خدمات بيانات مُدارة يمكن استخدامها لهذا الغرض، بما في ذلك BigQuery وAlloyDB وCloud SQL.
توضّح البرامج التعليمية التالية كيفية استخدام قواعد بيانات متّجهة تابعة لجهات خارجية أخرى مع Gemini Embedding.
- برامج تعليمية حول ChromaDB
- فيديوهات QDrant التعليمية
- برامج Weaviate التعليمية
- برامج Pinecone التعليمية
إصدارات النماذج
معاينة Gemini Embedding 2
| الموقع | الوصف |
|---|---|
| رمز النموذج |
Gemini API
|
| أنواع البيانات المتوافقة |
الإدخال النصوص والصور والفيديوهات وملفات الصوت وملفات PDF الناتج تضمينات النص |
| حدود الرموز المميزة[*] |
حد الرموز المميزة للإدخال 8,192 حجم سمة الإخراج مرن، ويتوافق مع: 128 - 3072، الحجم المقترَح: 768 و1536 و3072 |
| إصدارات |
|
| آخر تعديل | نوفمبر 2025 |
Gemini Embedding
| الموقع | الوصف |
|---|---|
| رمز النموذج |
Gemini API
|
| أنواع البيانات المتوافقة |
الإدخال نص الناتج تضمينات النص |
| حدود الرموز المميزة[*] |
حد الرموز المميزة للإدخال 2,048 حجم سمة الإخراج مرن، ويتوافق مع: 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 من سعر Embedding التلقائي. يمكنك العثور على أمثلة حول كيفية البدء في كتاب وصفات Batch API.
إشعار الاستخدام المسؤول
على عكس نماذج الذكاء الاصطناعي التوليدي التي تنشئ محتوًى جديدًا، يهدف نموذج Gemini Embedding إلى تحويل تنسيق بيانات الإدخال إلى تمثيل رقمي فقط. في حين أنّ Google مسؤولة عن توفير نموذج تضمين يحوّل تنسيق بيانات الإدخال إلى التنسيق الرقمي المطلوب، يحتفظ المستخدمون بالمسؤولية الكاملة عن البيانات التي يدخلونها وعمليات التضمين الناتجة. يشير استخدامك لنموذج Gemini Embedding إلى تأكيدك على امتلاك الحقوق اللازمة لأي محتوى يتم تحميله. ويجب عدم إنشاء محتوى ينتهك حقوق الملكية الفكرية أو حقوق الخصوصية للآخرين. يخضع استخدامك لهذه الخدمة لسياسة الاستخدام المحظور وبنود خدمة Google.
بدء إنشاء المحتوى باستخدام عمليات التضمين
اطّلِع على دفتر ملاحظات البدء السريع الخاص بالمتجهات الدلالية لاستكشاف إمكانات النموذج والتعرّف على كيفية تخصيص المتجهات الدلالية وعرضها بشكل مرئي.