Gemini API cung cấp các mô hình nhúng để tạo các mục nhúng cho văn bản, hình ảnh, video và nội dung khác. Sau đó, bạn có thể dùng các vectơ nhúng thu được cho những tác vụ như tìm kiếm ngữ nghĩa, phân loại và phân cụm, mang lại kết quả chính xác hơn, có tính đến ngữ cảnh so với các phương pháp dựa trên từ khoá.
Mô hình mới nhất, gemini-embedding-2-preview, là mô hình nhúng đa phương thức đầu tiên trong Gemini API. Mô hình này ánh xạ văn bản, hình ảnh, video, âm thanh và tài liệu vào một không gian nhúng thống nhất, cho phép tìm kiếm, phân loại và phân cụm đa phương thức trên hơn 100 ngôn ngữ. Hãy xem phần về vectơ nhúng đa phương thức để tìm hiểu thêm. Đối với các trường hợp sử dụng chỉ có văn bản, bạn vẫn có thể dùng gemini-embedding-001.
Xây dựng hệ thống Tạo sinh tăng cường truy xuất (RAG) là một trường hợp sử dụng phổ biến cho các sản phẩm AI. Dữ liệu nhúng đóng vai trò quan trọng trong việc cải thiện đáng kể kết quả của mô hình nhờ độ chính xác về thông tin thực tế, tính nhất quán và mức độ phong phú về ngữ cảnh được cải thiện. Nếu bạn muốn sử dụng một giải pháp RAG được quản lý, chúng tôi đã tạo công cụ Tìm kiếm tệp. Công cụ này giúp bạn quản lý RAG dễ dàng hơn và tiết kiệm chi phí hơn.
Tạo vectơ nhúng
Sử dụng phương thức embedContent để tạo các vectơ nhúng văn bản:
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?"
}]
}
}'
Bạn cũng có thể tạo các vectơ nhúng cho nhiều đoạn cùng lúc bằng cách truyền các đoạn đó vào dưới dạng danh sách các chuỗi.
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"
}'
Chỉ định loại việc cần làm để cải thiện hiệu suất
Bạn có thể sử dụng các mục nhúng cho nhiều tác vụ, từ phân loại đến tìm kiếm tài liệu. Việc chỉ định đúng loại nhiệm vụ sẽ giúp tối ưu hoá các vectơ nhúng cho các mối quan hệ dự kiến, tối đa hoá độ chính xác và hiệu quả. Để biết danh sách đầy đủ các loại tác vụ được hỗ trợ, hãy xem bảng Các loại tác vụ được hỗ trợ.
Ví dụ sau đây cho thấy cách bạn có thể dùng SEMANTIC_SIMILARITY để kiểm tra mức độ tương đồng về ý nghĩa của các chuỗi văn bản.
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?"
}
]
}
}'
Các đoạn mã sẽ cho biết mức độ tương đồng giữa các khối văn bản khác nhau khi chạy.
Các loại việc cần làm được hỗ trợ
| Loại việc cần làm | Mô tả | Ví dụ |
|---|---|---|
| SEMANTIC_SIMILARITY | Các vectơ nhúng được tối ưu hoá để đánh giá mức độ tương đồng của văn bản. | Hệ thống đề xuất, phát hiện nội dung trùng lặp |
| PHÂN LOẠI | Các vectơ nhúng được tối ưu hoá để phân loại văn bản theo các nhãn đặt sẵn. | Phân tích cảm xúc, phát hiện tin nhắn rác |
| PHÂN CỤM | Các vectơ nhúng được tối ưu hoá để phân cụm văn bản dựa trên mức độ tương đồng. | Sắp xếp tài liệu, nghiên cứu thị trường, phát hiện điểm bất thường |
| RETRIEVAL_DOCUMENT | Các vectơ nhúng được tối ưu hoá cho tính năng tìm kiếm tài liệu. | Lập chỉ mục các bài viết, sách hoặc trang web để tìm kiếm. |
| RETRIEVAL_QUERY |
Các vectơ được tối ưu hoá cho các cụm từ tìm kiếm chung.
Sử dụng RETRIEVAL_QUERY cho các truy vấn; RETRIEVAL_DOCUMENT cho các tài liệu cần truy xuất.
|
Tìm kiếm tùy chỉnh |
| CODE_RETRIEVAL_QUERY |
Các vectơ nhúng được tối ưu hoá để truy xuất các khối mã dựa trên truy vấn bằng ngôn ngữ tự nhiên.
Sử dụng CODE_RETRIEVAL_QUERY cho các câu hỏi; RETRIEVAL_DOCUMENT cho các khối mã cần truy xuất.
|
Đề xuất và tìm kiếm mã |
| QUESTION_ANSWERING |
Các vectơ nhúng cho câu hỏi trong hệ thống trả lời câu hỏi, được tối ưu hoá để tìm các tài liệu trả lời câu hỏi.
Sử dụng QUESTION_ANSWERING cho câu hỏi; RETRIEVAL_DOCUMENT cho tài liệu cần truy xuất.
|
Chatbox |
| FACT_VERIFICATION |
Các câu cần được xác minh sẽ được nhúng, tối ưu hoá để truy xuất những tài liệu có bằng chứng ủng hộ hoặc bác bỏ câu đó.
Sử dụng FACT_VERIFICATION cho văn bản mục tiêu; RETRIEVAL_DOCUMENT cho tài liệu cần truy xuất
|
Hệ thống kiểm chứng tự động |
Kiểm soát kích thước nhúng
Cả gemini-embedding-001 và gemini-embedding-2-preview đều được huấn luyện bằng kỹ thuật Học biểu diễn Matryoshka (MRL), giúp dạy một mô hình học các mục nhúng nhiều chiều có các phân đoạn ban đầu (hoặc tiền tố) cũng là các phiên bản đơn giản hơn và hữu ích của cùng một dữ liệu.
Sử dụng tham số output_dimensionality để kiểm soát kích thước của vectơ nhúng đầu ra. Việc chọn một chiều đầu ra nhỏ hơn có thể giúp tiết kiệm dung lượng lưu trữ và tăng hiệu quả tính toán cho các ứng dụng hạ nguồn, đồng thời ít ảnh hưởng đến chất lượng. Theo mặc định, cả hai mô hình đều xuất ra một mục nhúng 3072 chiều, nhưng bạn có thể cắt bớt mục nhúng này thành kích thước nhỏ hơn mà không làm giảm chất lượng để tiết kiệm dung lượng lưu trữ. Bạn nên sử dụng kích thước đầu ra là 768, 1536 hoặc 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
}'
Ví dụ về đầu ra của đoạn mã:
Length of embedding: 768
Đảm bảo chất lượng cho các kích thước nhỏ hơn
Mức nhúng 3072 chiều được chuẩn hoá. Các mục nhúng được chuẩn hoá tạo ra độ tương đồng ngữ nghĩa chính xác hơn bằng cách so sánh hướng vectơ chứ không phải độ lớn. Đối với các phương diện khác, bao gồm 768 và 1536, bạn cần chuẩn hoá các mục nhúng như sau:
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
Ví dụ về đầu ra từ đoạn mã này:
Normed embedding length: 768
Norm of normed embedding: 1.000000
Bảng sau đây cho thấy điểm MTEB (một điểm chuẩn thường dùng cho các mục nhúng) cho nhiều phương diện. Đáng chú ý là kết quả cho thấy hiệu suất không hoàn toàn phụ thuộc vào kích thước của phương diện nhúng, với các phương diện thấp hơn đạt được điểm số tương đương với các phương diện cao hơn.
| Phương diện MRL | Điểm MTEB |
|---|---|
| 2048 | 68,16 |
| 1536 | 68,17 |
| 768 | 67,99 |
| 512 | 67,55 |
| 256 | 66,19 |
| 128 | 63,31 |
Nhúng đa phương thức
Mô hình gemini-embedding-2-preview hỗ trợ dữ liệu đầu vào đa phương thức, cho phép bạn nhúng nội dung hình ảnh, video, âm thanh và tài liệu cùng với văn bản. Tất cả các phương thức đều được ánh xạ vào cùng một không gian nhúng, cho phép tìm kiếm và so sánh đa phương thức.
Các phương thức và giới hạn được hỗ trợ
Giới hạn tổng số mã thông báo đầu vào tối đa là 8192 mã thông báo.
| Phương thức | Quy cách và giới hạn |
|---|---|
| Văn bản | Hỗ trợ tối đa 8.192 mã thông báo. |
| Image | Tối đa 6 hình ảnh cho mỗi yêu cầu. Các định dạng được hỗ trợ: PNG, JPEG. |
| Âm thanh | Thời lượng tối đa là 80 giây. Định dạng được hỗ trợ: MP3, WAV. |
| Video | Thời lượng tối đa là 128 giây. Định dạng được hỗ trợ: MP4, MOV, Bộ mã hoá và giải mã được hỗ trợ: H264, H265, AV1, VP9 |
| Tài liệu (PDF) | Tối đa 6 trang. |
Nhúng hình ảnh
Ví dụ sau đây cho thấy cách nhúng hình ảnh bằng gemini-embedding-2-preview.
Bạn có thể cung cấp hình ảnh dưới dạng dữ liệu nội tuyến hoặc dưới dạng tệp đã tải lên thông qua 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}"'"
}
}]
}
}'
Tổng hợp dữ liệu nhúng
Khi làm việc với nội dung đa phương thức, cách bạn cấu trúc dữ liệu đầu vào sẽ ảnh hưởng đến kết quả nhúng:
- Một mục nội dung: Việc gửi nhiều phần (ví dụ: văn bản và hình ảnh) trong một mục nội dung sẽ tạo ra một mục nhúng tổng hợp cho tất cả các phương thức trong mục đó.
- Nhiều mục: Việc gửi nhiều mục trong mảng
contentssẽ trả về các mục nhúng riêng biệt cho từng mục. - Biểu diễn ở cấp bài đăng: Đối với các đối tượng phức tạp như bài đăng trên mạng xã hội có nhiều mục nội dung nghe nhìn, bạn nên tổng hợp các mục nhúng riêng biệt (ví dụ: bằng cách tính trung bình) để tạo một biểu diễn nhất quán ở cấp bài đăng.
Ví dụ sau đây cho thấy cách tạo một vectơ nhúng tổng hợp cho văn bản và hình ảnh đầu vào.
Sử dụng trường parts để kết hợp nhiều dữ liệu đầu vào:
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}"'"
}
}
]
}
}'
Mặt khác, ví dụ này tạo nhiều mục nhúng trong một lệnh gọi nhúng:
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}"'"}}]}
}
]
}'
Nhúng âm thanh
Ví dụ sau đây cho biết cách nhúng một tệp âm thanh bằng gemini-embedding-2-preview.
Bạn có thể cung cấp tệp âm thanh dưới dạng dữ liệu nội tuyến hoặc dưới dạng tệp đã tải lên thông qua 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}"'"
}
}]
}
}'
Nhúng video
Ví dụ sau đây cho thấy cách nhúng video bằng gemini-embedding-2-preview.
Bạn có thể cung cấp video dưới dạng dữ liệu nội tuyến hoặc dưới dạng tệp đã tải lên thông qua 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}"'"
}
}]
}
}'
Nếu cần nhúng video dài hơn 128 giây, bạn có thể chia video thành các đoạn chồng chéo và nhúng từng đoạn riêng lẻ.
Nhúng tài liệu
Bạn có thể nhúng trực tiếp các tài liệu ở định dạng PDF. Mô hình này xử lý nội dung trực quan và văn bản của từng trang.
Bạn có thể cung cấp tệp PDF dưới dạng dữ liệu nội tuyến hoặc dưới dạng tệp được tải lên thông qua 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}"'"
}
}]
}
}'
Trường hợp sử dụng
Việc nhúng văn bản là rất quan trọng đối với nhiều trường hợp sử dụng AI phổ biến, chẳng hạn như:
- Tạo sinh tăng cường khả năng truy xuất (RAG): Các vectơ nhúng giúp nâng cao chất lượng của văn bản được tạo bằng cách truy xuất và kết hợp thông tin liên quan vào ngữ cảnh của một mô hình.
Truy xuất thông tin: Tìm kiếm văn bản hoặc tài liệu có ngữ nghĩa tương tự nhất dựa trên một đoạn văn bản đầu vào.
Sắp xếp lại kết quả tìm kiếm: Ưu tiên các mục phù hợp nhất bằng cách tính điểm ngữ nghĩa cho kết quả ban đầu dựa trên cụm từ tìm kiếm.
Phát hiện điểm bất thường: Việc so sánh các nhóm vectơ nhúng có thể giúp xác định xu hướng hoặc điểm ngoại lệ bị ẩn.
Phân loại: Tự động phân loại văn bản dựa trên nội dung, chẳng hạn như phân tích cảm xúc hoặc phát hiện tin nhắn rác
Phân cụm: Nắm bắt hiệu quả các mối quan hệ phức tạp bằng cách tạo các cụm và hình ảnh trực quan về các thành phần nhúng.
Lưu trữ mục nhúng
Khi đưa các mục nhúng vào sản xuất, bạn thường dùng cơ sở dữ liệu vectơ để lưu trữ, lập chỉ mục và truy xuất các mục nhúng có nhiều chiều một cách hiệu quả. Google Cloud cung cấp các dịch vụ dữ liệu được quản lý có thể dùng cho mục đích này, bao gồm BigQuery, AlloyDB và Cloud SQL.
Các hướng dẫn sau đây cho biết cách sử dụng các cơ sở dữ liệu vectơ khác của bên thứ ba với Gemini Embedding.
Phiên bản mô hình
Bản xem trước Gemini Embedding 2
| Thuộc tính | Mô tả |
|---|---|
| Mã kiểu máy |
Gemini API
|
| Các loại dữ liệu được hỗ trợ |
Input Văn bản, hình ảnh, video, âm thanh, PDF Đầu ra Văn bản nhúng |
| Giới hạn mã thông báo[*] |
Giới hạn mã thông báo đầu vào 8.192 Kích thước phương diện đầu ra Linh hoạt, hỗ trợ: 128 – 3072, Nên dùng: 768, 1536, 3072 |
| Phiên bản |
|
| Thông tin cập nhật mới nhất | Tháng 11 năm 2025 |
Gemini Embedding
| Thuộc tính | Mô tả |
|---|---|
| Mã kiểu máy |
Gemini API
|
| Các loại dữ liệu được hỗ trợ |
Input Văn bản Đầu ra Văn bản nhúng |
| Giới hạn mã thông báo[*] |
Giới hạn mã thông báo đầu vào 2.048 Kích thước phương diện đầu ra Linh hoạt, hỗ trợ: 128 – 3072, Nên dùng: 768, 1536, 3072 |
| Phiên bản |
|
| Thông tin cập nhật mới nhất | Tháng 6 năm 2025 |
Đối với các mô hình Nhúng không dùng nữa, hãy truy cập trang Ngừng cung cấp
Di chuyển từ gemini-embedding-001
Các khoảng trống nhúng giữa gemini-embedding-001 và gemini-embedding-2-preview là không tương thích. Điều này có nghĩa là bạn không thể so sánh trực tiếp các vectơ nhúng do một mô hình tạo với các vectơ nhúng do mô hình khác tạo. Nếu đang nâng cấp lên gemini-embedding-2-preview, bạn phải nhúng lại tất cả dữ liệu hiện có.
Nhúng theo lô
Nếu không lo ngại về độ trễ, hãy thử dùng các mô hình Gemini Embeddings với Batch API. Điều này cho phép thông lượng cao hơn nhiều ở mức 50% giá Nhúng mặc định. Bạn có thể tìm thấy các ví dụ về cách bắt đầu trong sổ tay về Batch API.
Thông báo về việc sử dụng có trách nhiệm
Không giống như các mô hình AI tạo sinh tạo nội dung mới, Mô hình nhúng Gemini chỉ nhằm mục đích chuyển đổi định dạng dữ liệu đầu vào của bạn thành một biểu diễn bằng số. Mặc dù Google chịu trách nhiệm cung cấp một mô hình nhúng giúp chuyển đổi định dạng dữ liệu đầu vào của bạn sang định dạng số theo yêu cầu, nhưng người dùng vẫn hoàn toàn chịu trách nhiệm về dữ liệu mà họ nhập và các vectơ nhúng thu được. Bằng việc sử dụng mô hình Gemini Embedding, bạn xác nhận rằng bạn có các quyền cần thiết đối với mọi nội dung mình tải lên. Đừng tạo nội dung vi phạm quyền sở hữu trí tuệ hoặc quyền riêng tư của người khác. Khi sử dụng dịch vụ này, bạn phải tuân thủ Chính sách về các hành vi bị cấm và Điều khoản dịch vụ của Google.
Bắt đầu xây dựng bằng các thành phần nhúng
Hãy xem notebook bắt đầu nhanh về việc nhúng để khám phá các chức năng của mô hình và tìm hiểu cách tuỳ chỉnh cũng như trực quan hoá các thành phần nhúng.