Bagikan melalui


Membuat penyematan vektor dengan Azure OpenAI di Azure Database for PostgreSQL - Server Fleksibel

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel

Panggil penyematan Azure OpenAI dengan mudah untuk mendapatkan representasi vektor input, yang dapat digunakan kemudian dalam pencarian kesamaan vektor dan dikonsumsi oleh model pembelajaran mesin.

Prasyarat

  1. Mengaktifkan dan mengonfigurasiazure_ai ekstensi.
  2. Buat akun OpenAI dan minta akses ke Azure OpenAI Service.
  3. Berikan Akses ke Azure OpenAI dalam langganan yang diinginkan.
  4. Berikan izin untuk membuat sumber daya Azure OpenAI dan untuk menyebarkan model.
  5. Buat dan sebarkan sumber daya layanan Azure OpenAI dan model, misalnya sebarkan penyematan model penyematan teks-ada-002. Salin nama penyebaran karena diperlukan untuk membuat penyematan.

Mengonfigurasi titik akhir dan kunci OpenAI

Di sumber daya Azure OpenAI, di bawah Kunci Manajemen>Sumber Daya dan Titik Akhir Anda dapat menemukan titik akhir dan kunci untuk sumber daya Azure OpenAI Anda. Untuk memanggil penyebaran model, aktifkan azure_ai ekstensi menggunakan titik akhir dan salah satu kunci.

select azure_ai.set_setting('azure_openai.endpoint', 'https://<endpoint>.openai.azure.com'); 
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>'); 

azure_openai.create_embeddings

Memanggil Azure OpenAI API untuk membuat penyematan menggunakan penyebaran yang disediakan melalui input yang diberikan.

azure_openai.create_embeddings(deployment_name text, input text, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)
azure_openai.create_embeddings(deployment_name text, input text[], batch_size integer DEFAULT 100, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)

Argumen

deployment_name

text nama penyebaran di studio Azure OpenAI yang berisi model.

input

text atau text[] teks tunggal atau array teks, tergantung pada kelebihan beban fungsi yang digunakan, yang penyematannya dibuat.

dimensions

integer DEFAULT NULL Jumlah dimensi yang harus dimiliki penyematan output yang dihasilkan. Hanya didukung dalam model penyematan teks-3 dan yang lebih baru. Tersedia di versi 1.1.0 dan yang lebih baru dari ekstensi azure_ai

batch_size

integer DEFAULT 100 jumlah rekaman yang akan diproses pada satu waktu (hanya tersedia untuk kelebihan fungsi yang parameternya input berjenis text[]).

timeout_ms

integer DEFAULT 3600000 waktu habis dalam milidetik setelah operasi dihentikan.

throw_on_error

boolean DEFAULT true pada kesalahan jika fungsi melemparkan pengecualian yang mengakibatkan pembatalan transaksi pembungkusan.

max_attempts

integer DEFAULT 1 berapa kali ekstensi mencoba kembali pembuatan penyematan Azure OpenAI jika gagal dengan kesalahan yang dapat diulang.

retry_delay_ms

integer DEFAULT 1000 jumlah waktu (milidetik) yang ditunggu ekstensi sebelum memanggil lagi titik akhir Azure OpenAI untuk pembuatan penyematan, ketika gagal dengan kesalahan yang dapat diulang.

Tipe hasil

real[] atau TABLE(embedding real[]) elemen tunggal atau tabel kolom tunggal, tergantung pada kelebihan beban fungsi yang digunakan, dengan representasi vektor teks input, ketika diproses oleh penyebaran yang dipilih.

Menggunakan OpenAI untuk membuat penyematan dan menyimpannya dalam jenis data vektor

-- Create tables and populate data
DROP TABLE IF EXISTS conference_session_embeddings;
DROP TABLE IF EXISTS conference_sessions;

CREATE TABLE conference_sessions(
  session_id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  title text,
  session_abstract text,
  duration_minutes integer,
  publish_date timestamp
);

-- Create a table to store embeddings with a vector column.
CREATE TABLE conference_session_embeddings(
  session_id integer NOT NULL REFERENCES conference_sessions(session_id),
  session_embedding vector(1536)
);

-- Insert a row into the sessions table
INSERT INTO conference_sessions
    (title,session_abstract,duration_minutes,publish_date) 
VALUES
    ('Gen AI with Azure Database for PostgreSQL flexible server'
    ,'Learn about building intelligent applications with azure_ai extension and pg_vector' 
    , 60, current_timestamp)
    ,('Deep Dive: PostgreSQL database storage engine internals'
    ,' We will dig deep into storage internals'
    , 30, current_timestamp)
    ;

-- Get an embedding for the Session Abstract
SELECT
     pg_typeof(azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)) as embedding_data_type
    ,azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)
  FROM
    conference_sessions c LIMIT 10;

-- Insert embeddings 
INSERT INTO conference_session_embeddings
    (session_id, session_embedding)
SELECT
    c.session_id, (azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract))
FROM
    conference_sessions as c  
LEFT OUTER JOIN
    conference_session_embeddings e ON e.session_id = c.session_id
WHERE
    e.session_id IS NULL;

-- Create a HNSW index
CREATE INDEX ON conference_session_embeddings USING hnsw (session_embedding vector_ip_ops);


-- Retrieve top similarity match
SELECT
    c.*
FROM
    conference_session_embeddings e
INNER JOIN
    conference_sessions c ON c.session_id = e.session_id
ORDER BY
    e.session_embedding <#> azure_openai.create_embeddings('text-embedding-ada-002', 'Session to learn about building chatbots')::vector
LIMIT 1;

Langkah berikutnya