إنشاء تضمينات متجهات باستخدام Azure OpenAI على قاعدة بيانات Azure ل PostgreSQL - خادم مرن

ينطبق على: قاعدة بيانات Azure ل PostgreSQL - خادم مرن

استدعاء تضمينات Azure OpenAI بسهولة للحصول على تمثيل متجه للإدخال، والذي يمكن استخدامه بعد ذلك في عمليات البحث عن تشابه المتجهات واستهلاكها بواسطة نماذج التعلم الآلي.

المتطلبات الأساسية

  1. تمكين الملحق وتكوينهazure_ai.
  2. إنشاء حساب OpenAI وطلب الوصول إلى خدمة Azure OpenAI.
  3. امنح حق الوصول إلى Azure OpenAI في الاشتراك المطلوب.
  4. منح أذونات لإنشاء موارد Azure OpenAI ونشر النماذج.
  5. إنشاء ونشر مورد خدمة Azure OpenAI ونموذج، على سبيل المثال نشر نموذج التضمين text-embedding-ada-002. انسخ اسم النشر كما هو مطلوب لإنشاء عمليات تضمين.

تكوين نقطة نهاية OpenAI والمفتاح

في مورد Azure OpenAI، ضمن Resource Management>Keys and Endpoints، يمكنك العثور على نقطة النهاية والمفاتيح لمورد Azure OpenAI. لاستدعاء نشر النموذج، قم بتمكين الملحق azure_ai باستخدام نقطة النهاية وأحد المفاتيح.

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

استدعاء واجهة برمجة تطبيقات Azure OpenAI لإنشاء عمليات تضمين باستخدام النشر المقدم عبر الإدخال المحدد.

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)

الوسيطات

deployment_name

text اسم النشر في استوديو Azure OpenAI الذي يحتوي على النموذج.

input

text أو text[] نص واحد أو صفيف من النصوص، اعتمادا على التحميل الزائد للدالة المستخدمة، والتي يتم إنشاء التضمينات لها.

dimensions

integer DEFAULT NULL عدد الأبعاد التي يجب أن تحتوي عليها تضمينات الإخراج الناتجة. معتمد فقط في تضمين النص-3 والنماذج الأحدث. متوفر في الإصدارات 1.1.0 والإصدارات الأحدث من ملحق azure_ai

batch_size

integer DEFAULT 100 عدد السجلات التي يجب معالجتها في كل مرة (متاح فقط للتحميل الزائد للدالة التي لها معلمة input من النوع text[]).

timeout_ms

integer DEFAULT 3600000 المهلة بالمللي ثانية التي يتم بعدها إيقاف العملية.

throw_on_error

boolean DEFAULT true عند الخطأ، يجب أن تطرح الدالة استثناء يؤدي إلى التراجع عن عمليات الالتفاف.

max_attempts

integer DEFAULT 1 عدد المرات التي يعيد فيها الملحق محاولة إنشاء تضمين Azure OpenAI إذا فشل مع أي خطأ قابل لإعادة المحاولة.

retry_delay_ms

integer DEFAULT 1000 مقدار الوقت (بالمللي ثانية) الذي ينتظره الملحق قبل استدعاء نقطة نهاية Azure OpenAI مرة أخرى لتضمين الإنشاء، عندما يفشل مع أي خطأ قابل لإعادة المحاولة.

نوع الإرجاع

real[] أو TABLE(embedding real[]) عنصر واحد أو جدول من عمود واحد، اعتمادا على التحميل الزائد للدالة المستخدمة، مع تمثيلات متجهة لنص الإدخال، عند معالجتها بواسطة النشر المحدد.

استخدام OpenAI لإنشاء تضمينات وتخزينها في نوع بيانات متجه

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

الخطوات التالية