取得 Agent Platform 文字嵌入

本頁說明如何使用 Gemini Enterprise Agent Platform 文字嵌入 API,為儲存在 Spanner for GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫中的資料生成、儲存及更新文字嵌入。

文字嵌入是文字資料的向量表示法,可用於以多種方式尋找相似項目。每次完成 Google 搜尋或在線上購物時看到建議,您都會與這些模型互動。建立文字嵌入項目時,您會取得自然文字的向量表示法,也就是浮點數陣列。也就是說,所有輸入文字都會指派一個數字表示。比較兩段文字的向量表示法之間的數值距離,應用程式就能判斷文字或文字代表的物件之間的相似度。

您可以使用 Agent Platform 文字嵌入 API,透過 生成式 AI 建立文字嵌入。在本教學課程中,您將使用 Agent Platform 文字嵌入模型,為儲存在 Spanner 中的資料生成文字嵌入。

如要進一步瞭解文字嵌入和支援的模型,請參閱「取得文字嵌入」。

目標

在本教學課程中,您將瞭解以下內容:

  • 使用 DDL 陳述式,在 Spanner 結構定義中註冊 Agent Platform 文字嵌入模型
  • 使用 SQL 查詢參照已註冊的模型,從儲存在 Spanner 中的資料生成嵌入。

定價

本教學課程使用 Google Cloud的計費元件,包括:

  • Spanner
  • Agent Platform

如要進一步瞭解 Spanner 費用,請參閱 Spanner 定價頁面。

如要進一步瞭解 Agent Platform 費用,請參閱 Agent Platform 定價頁面。

生成及儲存文字嵌入

視使用的模型而定,產生嵌入內容可能需要一段時間。對於效能較為敏感的工作負載,最佳做法是避免在讀寫交易中產生嵌入內容。請改用下列 SQL 範例,在唯讀交易中生成嵌入。

GoogleSQL

在 Spanner 中註冊文字嵌入模型

在 GoogleSQL 中,您必須先註冊模型,才能搭配 ML.PREDICT 函式使用。如要在 Spanner 資料庫中註冊 Agent Platform 文字嵌入模型,請執行下列 DDL 陳述式

CREATE MODEL MODEL_NAME
INPUT(
  content STRING(MAX),
  -- Optional: For models that support specifying task type.
  task_type STRING(MAX),
)
OUTPUT(
  embeddings
    STRUCT<
      statistics STRUCT<truncated BOOL, token_count FLOAT64>,
      values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME'
);

請替換下列項目:

  • MODEL_NAME:Agent Platform 文字嵌入模型的名稱
  • PROJECT:代管 Agent Platform 端點的專案
  • LOCATION:Agent Platform 端點的位置

Spanner 會自動授予適當的權限。如果沒有,請檢查模型端點存取控管

生成式 AI 模型不支援結構定義探索和驗證。您必須提供與模型結構定義相符的 INPUTOUTPUT 子句。如需文字嵌入模型的完整結構定義,請參閱「取得文字嵌入」。

生成文字嵌入

如要生成嵌入,請使用下列 SQL,將一段文字直接傳遞至 ML.PREDICT 函式:

SELECT embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT "A product description" as content)
);

如要為儲存在資料表中的資料生成嵌入,請使用下列 SQL:

SELECT id, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT id, description as content FROM Products)
);

如要指定工作類型輸出維度,請按照下列步驟操作:

UPDATE Products p
SET description_embedding = (
  SELECT embeddings.values
  FROM ML.PREDICT(
    MODEL MODEL_NAME,
    (SELECT p.description as content, "RETRIEVAL_DOCUMENT" as task_type),
    STRUCT(768 AS outputDimensionality)
  ));

SELECT p.product_id, p.name, p.description, COSINE_DISTANCE(
    p.description_embedding,
    (
      SELECT embeddings.values 
      FROM ML.PREDICT(
        MODEL MODEL_NAME,
        (SELECT @user_query as content, "RETRIEVAL_QUERY" as task_type),
        STRUCT(768 AS outputDimensionality)
      ) 
    )
  ) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;

儲存文字嵌入

在唯讀交易中產生嵌入內容後,請將其儲存在 Spanner 中,以便與作業資料一併管理。如要儲存嵌入內容,請使用讀寫交易

對於效能要求較低的工作負載,您可以在讀寫交易中,使用下列 SQL 生成及插入嵌入內容:

CREATE TABLE Products(
  id INT64 NOT NULL,
  description STRING(MAX),
  embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT @Description as content)
);

PostgreSQL

生成文字嵌入

如要生成嵌入,請使用下列 SQL,將一段文字直接傳遞至 spanner.ML_PREDICT_ROW 函式:

SELECT
  spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
    '{"instances": [{"content": "A product description"}]}'::jsonb
  ) ->'predictions'->0->'embeddings'->'values';

請替換下列項目:

  • PROJECT:代管 Agent Platform 端點的專案
  • LOCATION:Agent Platform 端點的位置
  • MODEL_NAME:Agent Platform 文字嵌入模型的名稱

如要為儲存在資料表中的資料生成嵌入,請使用下列 SQL:

SELECT id, spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
  )