取得文字嵌入

本文說明如何使用 Vertex AI Text Embeddings API 建立文字嵌入。

Vertex AI 文字嵌入 API 使用密集向量表示法:例如 gemini-embedding-001 使用 3072 維度的向量。密集向量嵌入模型使用的深度學習方法,與大型語言模型使用的類似。稀疏向量通常會直接將字詞對應至數字,而密集向量的設計宗旨是更準確地呈現一段文字的意義。在生成式 AI 中使用密集向量嵌入的優點是,您不必搜尋直接的字詞或語法比對,而是可以更有效地搜尋與查詢意義一致的段落,即使這些段落使用的語言不同也沒關係。

向量經過正規化,因此您可以使用餘弦相似度、點積或歐氏距離,提供相同的相似度排名。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. 為嵌入工作選擇工作類型
  7. 支援的模型

    您可以使用下列模型取得文字嵌入:

    模型名稱 說明 輸出維度 序列長度上限 支援的文字語言
    gemini-embedding-001 在英文、多語言和程式碼工作方面表現優異。這項模型整合了先前的專用模型 (例如 text-embedding-005text-multilingual-embedding-002),並在各自的領域中展現更出色的效能。詳情請參閱我們的技術報告 最多 3072 個 2048 個符記 支援的文字語言
    text-embedding-005 專精於英文和程式碼工作。 最多 768 個 2048 個符記 英文
    text-multilingual-embedding-002 擅長處理多語言工作。 最多 768 個 2048 個符記 支援的文字語言

    如要取得最佳嵌入品質,請使用 gemini-embedding-001,這是我們設計的大型模型,可提供最高效能。

    取得某段文字的文字嵌入

    您可以使用 Vertex AI API 或 Python 適用的 Vertex AI SDK,取得文字片段的文字嵌入。

    API 上限

    每個要求最多只能輸入 250 則文字。 API 的輸入詞元上限為 20,000 個。 如果輸入內容超過這項限制,系統就會傳回 400 錯誤。此外,每段輸入文字最多只能有 2048 個符記,超出上限的文字會遭到截斷。您也可以將 autoTruncate 設為 false,停用無聲截斷功能。

    詳情請參閱「文字嵌入限制」。

    選擇嵌入維度

    所有模型預設都會生成完整長度的嵌入向量。對於 gemini-embedding-001,這個向量有 3072 個維度,其他模型則會產生 768 維向量。不過,使用者可以透過 output_dimensionality 參數控制輸出嵌入向量的大小。選取較小的輸出維度可節省儲存空間,並提高下游應用程式的運算效率,同時幾乎不會犧牲品質。

    下列範例使用 gemini-embedding-001 模型。

    Python

    安裝

    pip install --upgrade google-genai

    詳情請參閱 SDK 參考說明文件

    設定環境變數,透過 Vertex AI 使用 Gen AI SDK:

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    from google import genai
    from google.genai.types import EmbedContentConfig
    
    client = genai.Client()
    response = client.models.embed_content(
        model="gemini-embedding-001",
        contents=[
            "How do I get a driver's license/learner's permit?",
            "How long is my driver's license valid for?",
            "Driver's knowledge test study guide",
        ],
        config=EmbedContentConfig(
            task_type="RETRIEVAL_DOCUMENT",  # Optional
            output_dimensionality=3072,  # Optional
            title="Driver's License",  # Optional
        ),
    )
    print(response)
    # Example response:
    # embeddings=[ContentEmbedding(values=[-0.06302902102470398, 0.00928034819662571, 0.014716853387653828, -0.028747491538524628, ... ],
    # statistics=ContentEmbeddingStatistics(truncated=False, token_count=13.0))]
    # metadata=EmbedContentMetadata(billable_character_count=112)

    Go

    瞭解如何安裝或更新 Go

    詳情請參閱 SDK 參考說明文件

    設定環境變數,透過 Vertex AI 使用 Gen AI SDK:

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"google.golang.org/genai"
    )
    
    // generateEmbedContentWithText shows how to embed content with text.
    func generateEmbedContentWithText(w io.Writer) error {
    	ctx := context.Background()
    
    	client, err := genai.NewClient(ctx, &genai.ClientConfig{
    		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create genai client: %w", err)
    	}
    
    	outputDimensionality := int32(3072)
    	config := &genai.EmbedContentConfig{
    		TaskType:             "RETRIEVAL_DOCUMENT",  //optional
    		Title:                "Driver's License",    //optional
    		OutputDimensionality: &outputDimensionality, //optional
    	}
    
    	contents := []*genai.Content{
    		{
    			Parts: []*genai.Part{
    				{
    					Text: "How do I get a driver's license/learner's permit?",
    				},
    				{
    					Text: "How long is my driver's license valid for?",
    				},
    				{
    					Text: "Driver's knowledge test study guide",
    				},
    			},
    			Role: "user",
    		},
    	}
    
    	modelName := "gemini-embedding-001"
    	resp, err := client.Models.EmbedContent(ctx, modelName, contents, config)
    	if err != nil {
    		return fmt.Errorf("failed to generate content: %w", err)
    	}
    
    	fmt.Fprintln(w, resp)
    
    	// Example response:
    	// embeddings=[ContentEmbedding(values=[-0.06302902102470398, 0.00928034819662571, 0.014716853387653828, -0.028747491538524628, ... ],
    	// statistics=ContentEmbeddingStatistics(truncated=False, token_count=13.0))]
    	// metadata=EmbedContentMetadata(billable_character_count=112)
    
    	return nil
    }
    

    將嵌入項目新增至向量資料庫

    生成嵌入後,您可以將嵌入新增至向量資料庫,例如 Vector Search。這有助於縮短擷取作業的延遲時間,而且隨著資料量增加,這項做法也變得越來越重要。

    如要進一步瞭解 Vector Search,請參閱「Vector Search 總覽」。

    後續步驟