Gemini API cung cấp các mô hình nhúng văn bản để tạo các mục nhúng cho từ, cụm từ, câu và mã. Các tác vụ nhúng như tìm kiếm ngữ nghĩa, phân loại và phân cụm, cung cấp kết quả chính xác hơn, có tính đến ngữ cảnh hơn so với các phương pháp dựa trên từ khoá.
Xây dựng hệ thống Tạo sinh tăng cường dựa trên 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ú theo 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ụ giúp tối ưu hoá các vectơ nhúng cho 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 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 tình cảm, phát hiện nội dung 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.
|
Hộp trò chuyện |
| FACT_VERIFICATION |
Các câu cần được xác minh sẽ được nhúng, tối ưu hoá để truy xuất các tài liệu có bằng chứng hỗ trợ 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
Mô hình nhúng Gemini, gemini-embedding-001, được huấn luyện bằng kỹ thuật Học biểu diễn Matryoshka (MRL) để dạy một mô hình học các thành phần nhúng có 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 bạn tiết kiệm không gian 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 giảm thiểu sự hy sinh về chất lượng. Theo mặc định, mô hình này xuất ra một mục nhúng 3072 chiều, nhưng bạn có thể cắt bớt thành kích thước nhỏ hơn mà không làm giảm chất lượng để tiết kiệm không gian 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 cả 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 của đoạn mã này:
Normed embedding length: 768
Norm of normed embedding: 1.000000
Bảng sau đây cho thấy điểm số 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 |
Trường hợp sử dụng
Văn bản nhúng đóng vai trò 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 các xu hướng hoặc điểm bất thường 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 nội dung 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 mục 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
| 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
Nhúng theo lô
Nếu không lo ngại về độ trễ, hãy thử dùng 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 Gemini Embedding 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ố được 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 khi sử dụng 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.