Aracılığıyla paylaş


Öğretici: PostgreSQL için Azure Veritabanı ve Azure OpenAI ile anlamsal arama oluşturma

Bu uygulamalı öğreticide PostgreSQL için Azure Veritabanı'nı ve Azure OpenAI'yi kullanarak anlamsal arama uygulaması oluşturmayı öğreneceksiniz.

Anlamsal arama, semantiği temel alan aramalar yapar. Standart sözcük temelli arama, sorguda sağlanan anahtar sözcüklere göre arama yapar. Örneğin, tarif veri kümeniz glütensiz, vegan, sütsüz, meyvesiz veya tatlı gibi etiketler içermeyebilir, ancak bu özellikler bileşenlerden çıkarılabilir. Fikir, bu tür anlamsal sorgular yapmak ve ilgili arama sonuçlarını almaktır.

Bu eğitimde, siz:

  • Arama senaryolarını ve aramada yer alacak veri alanlarını belirleyin.
  • Aramada yer alan her veri alanı için, veri alanında depolanan değerin eklemelerini depolamak için karşılık gelen bir vektör alanı oluşturun.
  • Seçili veri alanlarındaki veriler için eklemeler oluşturun ve eklemeleri ilgili vektör alanlarında depolayın.
  • Herhangi bir arama sorgusu için gömme oluşturun.
  • Vektör veri alanını arayın ve en yakın komşuları listeleyin.
  • Son derecelendirmeyi oluşturmak için sonuçları uygun ilgi, derecelendirme ve kişiselleştirme modellerinde çalıştırın. Bu tür modellerin olmaması halinde sonuçları noktalı ürün sırasının azalmasına göre sıralar.
  • Modeli, sonuç kalitesini ve tıklama oranı ve bekleme süresi gibi iş ölçümlerini izleyin. Veri kalitesi, veri güncelliği ve kişiselleştirmeden kullanıcı deneyimine kadar arama yığınında hata ayıklamak ve geliştirmek için geri bildirim mekanizmalarını birleştirin.

Önkoşullar

  1. Bir OpenAI hesabı oluşturun ve Azure OpenAI'ye erişim isteyin.
  2. İstenen abonelikte Azure OpenAI'ye erişim izni verin.
  3. Azure OpenAI kaynakları oluşturma ve modelleri dağıtma izinleri verin.
  4. Azure OpenAI kaynağı ve modeli oluşturma ve dağıtma. Embeddings modelini text-embedding-ada-002 dağıtın. Eklemeler oluşturmak için ihtiyacınız olduğundan dağıtım adını kopyalayın.

azure_ai ve pgvector uzantılarını etkinleştirme

PostgreSQL için Azure Veritabanı esnek sunucu örneğinizi etkinleştirebilmeniz azure_aipgvector için önce bunları izin verilenler listenize eklemeniz gerekir. komutunu çalıştırarak SHOW azure.extensions;bunların doğru şekilde eklendiğinden emin olun.

Ardından hedef veritabanınıza bağlanıp CREATE EXTENSION komutunu çalıştırarak uzantıyı yükleyebilirsiniz. Uzantının kullanılabilir olmasını istediğiniz her veritabanı için komutu ayrı ayrı yinelemeniz gerekir.

CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;

OpenAI uç noktasını ve anahtarını yapılandırma

Azure AI hizmetlerinde , Kaynak Yönetimi>Anahtarları ve Uç Noktaları altında Azure AI kaynağınızın uç noktasını ve anahtarlarını bulabilirsiniz. Model dağıtımını çağırmak için azure_ai uzantısını etkinleştirirken, uç noktayı ve anahtarlardan birini kullanın.

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

Verileri indirme

Kaggle'dan verileri indirin.

Tabloyu oluşturma

Sunucunuza bağlanın ve bir test veritabanı oluşturun. Bu veritabanında, verileri içeri aktaracağınız bir tablo oluşturmak için aşağıdaki komutu kullanın:

CREATE TABLE public.recipes(
    rid integer NOT NULL,
    recipe_name text,
    prep_time text,
    cook_time text,
    total_time text,
    servings integer,
    yield text,
    ingredients text,
    directions text,
    rating real,
    url text,
    cuisine_path text,
    nutrition text,
    timing text,
    img_src text,
    PRIMARY KEY (rid)
);

Verileri içeri aktarma

kodlamayı UTF-8 olarak ayarlamak için istemci penceresinde aşağıdaki ortam değişkenini ayarlayın. Bu veri kümesi Windows-1252 kodlaması kullandığından bu adım gereklidir.

Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8

Verileri oluşturduğunuz tabloya aktarın. Bu veri kümesinin üst bilgi satırı içerdiğini unutmayın.

psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"

Eklemeleri depolamak için sütun ekleme

Tabloya ekleme sütunu ekleyin:

ALTER TABLE recipes ADD COLUMN embedding vector(1536);

Eklemeler oluşturma

Uzantıyı azure_ai kullanarak verileriniz için eklemeler oluşturun. Aşağıdaki örnek birkaç alanı vektörleştirir ve birleştirilir.

WITH ro AS (
    SELECT ro.rid
    FROM
        recipes ro
    WHERE
        ro.embedding is null
        LIMIT 500
)
UPDATE
    recipes r
SET
    embedding = azure_openai.create_embeddings('text-embedding-ada-002', r.recipe_name||' '||r.cuisine_path||' '||r.ingredients||' '||r.nutrition||' '||r.directions)
FROM
    ro
WHERE
    r.rid = ro.rid;

İşlenmek üzere başka satır kalmayıncaya kadar komutu yineleyin.

İpucu

LIMIT değerini değiştirerek oynayın. Azure OpenAI tarafından uygulanan kısıtlama nedeniyle, yüksek bir değer kullanıldığında deyim yarıda başarısız olabilir. Deyimi başarısız olursa, en az bir dakika bekleyin ve komutu yeniden çalıştırın.

Kolaylık sağlamak için veritabanınızda bir arama işlevi oluşturun:

create function
    recipe_search(searchQuery text, numResults int)
returns table(
            recipeId int,
            recipe_name text,
            nutrition text,
            score real)
as $$
declare
    query_embedding vector(1536);
begin
    query_embedding := (azure_openai.create_embeddings('text-embedding-ada-002', searchQuery));
    return query
    select
        r.rid,
        r.recipe_name,
        r.nutrition,
        (r.embedding <=> query_embedding)::real as score
    from
        recipes r
    order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;

Şimdi arama yapmak için işlevini çağırın:

select recipeid, recipe_name, score from recipe_search('vegan recipes', 10);

Ve sonuçları keşfedin:

 recipeid |                         recipe_name                          |   score
----------+--------------------------------------------------------------+------------
      829 | Avocado Toast (Vegan)                                        | 0.15672222
      836 | Vegetarian Tortilla Soup                                     | 0.17583494
      922 | Vegan Overnight Oats with Chia Seeds and Fruit               | 0.17668104
      600 | Spinach and Banana Power Smoothie                            |  0.1773768
      519 | Smokey Butternut Squash Soup                                 | 0.18031077
      604 | Vegan Banana Muffins                                         | 0.18287598
      832 | Kale, Quinoa, and Avocado Salad with Lemon Dijon Vinaigrette | 0.18368931
      617 | Hearty Breakfast Muffins                                     | 0.18737361
      946 | Chia Coconut Pudding with Coconut Milk                       |  0.1884186
      468 | Spicy Oven-Roasted Plums                                     | 0.18994217
(10 rows)