Mendapatkan embedding teks Platform Agen

Halaman ini menjelaskan cara menggunakan API embedding teks Gemini Enterprise Agent Platform untuk membuat, menyimpan, dan memperbarui embedding teks untuk data yang disimpan di Spanner untuk database dialek GoogleSQL dan database dialek PostgreSQL.

Embedding teks adalah representasi vektor dari data teks, dan digunakan dengan berbagai cara untuk menemukan item yang serupa. Anda berinteraksi dengan embedding teks setiap kali menyelesaikan Google Penelusuran atau melihat rekomendasi saat berbelanja online. Saat membuat embedding teks, Anda akan mendapatkan representasi vektor teks alami sebagai array bilangan floating point. Artinya, semua teks input Anda diberi representasi numerik. Dengan membandingkan jarak numerik antara representasi vektor dari dua bagian teks, aplikasi dapat menentukan kesamaan antara teks atau objek yang diwakili oleh teks.

Dengan Agent Platform text embeddings API, Anda dapat membuat embedding teks dengan AI Generatif. Dalam tutorial ini, Anda akan menggunakan model embedding teks Agent Platform untuk membuat embedding teks bagi data yang disimpan di Spanner.

Untuk mempelajari lebih lanjut embedding teks dan model yang didukung, lihat Mendapatkan embedding teks.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  • Daftarkan model embedding teks Agent Platform dalam skema Spanner menggunakan pernyataan DDL.
  • Referensi model yang terdaftar menggunakan kueri SQL untuk menghasilkan embedding dari data yang disimpan di Spanner.

Harga

Tutorial ini menggunakan komponen Google Cloudyang dapat ditagih, termasuk:

  • Spanner
  • Agent Platform

Untuk mengetahui informasi selengkapnya tentang biaya Spanner, lihat halaman Harga Spanner.

Untuk mengetahui informasi selengkapnya tentang biaya Agent Platform, lihat halaman harga Agent Platform.

Membuat dan menyimpan embedding teks

Bergantung pada model yang Anda gunakan, pembuatan embedding mungkin memerlukan waktu beberapa saat. Untuk workload yang lebih sensitif terhadap performa, praktik terbaiknya adalah menghindari pembuatan embedding dalam transaksi baca-tulis. Sebagai gantinya, buat embedding dalam transaksi hanya baca menggunakan contoh SQL berikut.

GoogleSQL

Mendaftarkan model embedding teks di Spanner

Di GoogleSQL, Anda harus mendaftarkan model sebelum menggunakannya dengan fungsi ML.PREDICT. Untuk mendaftarkan model embedding teks Agent Platform di database Spanner, jalankan pernyataan DDL berikut:

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'
);

Ganti kode berikut:

  • MODEL_NAME: nama model embedding teks Agent Platform
  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform

Spanner memberikan izin yang sesuai secara otomatis. Jika tidak, tinjau kontrol akses endpoint model.

Penemuan dan validasi skema tidak tersedia untuk model AI Generatif. Anda harus memberikan klausa INPUT dan OUTPUT yang cocok dengan skema model. Untuk skema lengkap model embedding teks, lihat Mendapatkan embedding teks.

Membuat embedding teks

Untuk membuat embedding, teruskan potongan teks langsung ke fungsi ML.PREDICT menggunakan SQL berikut:

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

Untuk membuat embedding bagi data yang disimpan dalam tabel, gunakan SQL berikut:

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

Untuk menentukan jenis tugas dan dimensi output:

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;

Menyimpan embedding teks

Setelah membuat embedding dalam transaksi hanya baca, simpan embedding tersebut di Spanner agar dapat dikelola dengan data operasional Anda. Untuk menyimpan embedding, gunakan transaksi baca-tulis.

Untuk workload yang kurang sensitif terhadap performa, Anda dapat membuat dan menyisipkan embedding dengan SQL berikut dalam transaksi baca-tulis. Penentuan vector_length bersifat opsional untuk menyimpan embedding, direkomendasikan untuk penelusuran KNN, dan diperlukan untuk indeks vektor. Ganti VECTOR_LENGTH dengan dimensi output model Anda, seperti 3072 atau 768, atau hapus vector_length jika kolom menyimpan vektor dengan dimensi yang bervariasi:

CREATE TABLE Products(
  id INT64 NOT NULL,
  description STRING(MAX),
  embeddings ARRAY<FLOAT32>(vector_length=>VECTOR_LENGTH),
) 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

Membuat embedding teks

Untuk membuat embedding, teruskan potongan teks langsung ke fungsi spanner.ML_PREDICT_ROW menggunakan SQL berikut:

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

Ganti kode berikut:

  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform
  • MODEL_NAME: nama model embedding teks Agent Platform

Untuk membuat embedding bagi data yang disimpan dalam tabel, gunakan SQL berikut:

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))))
  ) -> 'predictions'->0->'embeddings'->'values'
FROM Products;

Ganti kode berikut:

  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform
  • MODEL_NAME: nama model embedding teks Agent Platform

Untuk menentukan jenis tugas dan dimensi output:

UPDATE Products p
SET description_embedding = spanner.float64_array(
  spanner.ML_PREDICT_ROW(
   'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
    JSONB_BUILD_OBJECT(
      'instances', JSONB_BUILD_ARRAY(
        JSONB_BUILD_OBJECT(
          'content', p.description,
          'task_type', 'RETRIEVAL_DOCUMENT'
        )
      ),
      'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
    )
  )->'predictions'->0->'embeddings'->'values'
);

SELECT p.product_id, p.name, p.description, spanner.COSINE_DISTANCE(
    p.description_embedding,
    spanner.float64_array(
      spanner.ML_PREDICT_ROW(
        'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
        JSONB_BUILD_OBJECT(
          'instances', JSONB_BUILD_ARRAY(
            JSONB_BUILD_OBJECT(
              'content', $1,
              'task_type', 'RETRIEVAL_QUERY'
            )
          ),
          'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
        )
      )->'predictions'->0->'embeddings'->'values'
    )
  ) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;

Ganti kode berikut:

  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform
  • MODEL_NAME: nama model embedding teks Agent Platform

Menyimpan embedding teks

Setelah membuat embedding dalam transaksi hanya baca, simpan embedding tersebut di Spanner agar dapat dikelola dengan data operasional Anda. Untuk menyimpan embedding, gunakan transaksi baca-tulis.

Untuk workload yang kurang sensitif terhadap performa, Anda dapat membuat dan menyisipkan embedding dengan SQL berikut dalam transaksi baca-tulis. Menentukan VECTOR LENGTH bersifat opsional untuk menyimpan embedding, direkomendasikan untuk penelusuran KNN, dan diperlukan untuk indeks vektor. Ganti VECTOR_LENGTH dengan dimensi output model Anda, seperti 3072 atau 768, atau hapus VECTOR LENGTH jika kolom menyimpan vektor dengan dimensi yang bervariasi:

CREATE TABLE Products (
  id INT8 NOT NULL,
  description TEXT,
  embeddings REAL[] VECTOR LENGTH VECTOR_LENGTH,
  PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(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)))
  ) -> 'predictions'->0->'embeddings'->'values'
));

Ganti kode berikut:

  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform
  • MODEL_NAME: nama model embedding teks Agent Platform

Memperbarui embedding teks

Untuk memperbarui embedding atau menyerap data secara real-time, gunakan pernyataan UPDATE (GoogleSQL dan PostgreSQL).

Untuk memperbarui tabel Products dalam contoh sebelumnya, gunakan SQL berikut:

GoogleSQL

UPDATE Products
SET
  description = @description,
  embeddings = (SELECT embeddings.values
                  FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
              )
WHERE id = @id;

Ganti kode berikut:

  • MODEL_NAME: nama model embedding teks Agent Platform

PostgreSQL

UPDATE
  Products
SET
  description = $1,
  embeddings = spanner.FLOAT32_ARRAY(
    spanner.ML_PREDICT_ROW(
      'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
      JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
    ) -> 'predictions'->0->'embeddings'->'values')
WHERE
  id = $2;

Ganti kode berikut:

  • PROJECT: project yang menghosting endpoint Agent Platform
  • LOCATION: lokasi endpoint Agent Platform
  • MODEL_NAME: nama model embedding teks Agent Platform

Langkah berikutnya