Udostępnij za pomocą


Integrowanie możliwości sztucznej inteligencji platformy Azure z usługą Azure Database for PostgreSQL

Rozszerzenie azure_ai dodaje możliwość korzystania z dużych modeli językowych (LLMs) i tworzenia aplikacji generacyjnych sztucznej inteligencji w bazie danych usługi Azure Database for PostgreSQL przez zintegrowanie możliwości usług Azure AI.

Generowanie sztucznej inteligencji to forma sztucznej inteligencji, w której maszyny LLM są trenowane w celu generowania oryginalnej zawartości na podstawie danych wejściowych języka naturalnego. Za pomocą azure_ai rozszerzenia można używać funkcji generacyjnych sztucznej inteligencji do przetwarzania zapytań języka naturalnego bezpośrednio z bazy danych.

W tym artykule przedstawiono, jak dodać zaawansowane funkcje AI do elastycznego serwera usługi Azure Database for PostgreSQL przy użyciu rozszerzenia azure_ai. Pokazano w nim, jak można zintegrować usługę Azure OpenAI i Azure AI Language service z bazą danych przy użyciu rozszerzenia .

Wymagania wstępne

  • Subskrypcja platformy Azure. Utwórz je bezpłatnie.

  • Dostęp jest udzielany usłudze Azure OpenAI w żądanej subskrypcji platformy Azure. Obecnie aplikacja udziela dostępu do tej usługi. Możesz ubiegać się o dostęp do usługi Azure OpenAI, wypełniając formularz w obszarze Ograniczony dostęp do usługi Azure OpenAI Service.

  • Zasób usługi Azure OpenAI z wdrożonym modelem text-embedding-ada-002 (wersja 2). Ten model jest obecnie dostępny tylko w niektórych regionach. Jeśli nie masz zasobu, proces tworzenia zasobu jest udokumentowany w przewodniku wdrażania zasobów usługi Azure OpenAI.

  • Zasób języka sztucznej inteligencji platformy Azure. Jeśli nie masz zasobu językowego, możesz go utworzyć w portalu Azure, postępując zgodnie z instrukcjami podanymi w przewodniku Szybki start do podsumowania. Możesz użyć warstwy cenowej bezpłatna (Free F0), aby wypróbować usługę i uaktualnić ją później do warstwy płatnej dla środowiska produkcyjnego.

  • Elastyczne wystąpienie serwera usługi Azure Database for PostgreSQL w ramach subskrypcji platformy Azure. Jeśli nie masz tego zasobu, zobacz Tworzenie usługi Azure Database for PostgreSQL.

Nawiązywanie połączenia z bazą danych przy użyciu narzędzia psql w usłudze Azure Cloud Shell

Otwórz usługę Azure Cloud Shell w przeglądarce internetowej. Wybierz pozycję Bash jako środowisko. Jeśli zostanie wyświetlony monit, wybierz subskrypcję, której używasz dla bazy danych usługi Azure Database for PostgreSQL, a następnie kliknij Utwórz magazyn.

Aby pobrać szczegóły połączenia z bazą danych:

  1. W witrynie Azure Portal przejdź do wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL.

  2. W menu po lewej stronie w obszarze Ustawienia wybierz pozycję Połącz. Skopiuj blok Szczegóły połączenia .

  3. Wklej skopiowane wiersze deklaracji zmiennych środowiskowych do terminalu usługi Azure Cloud Shell. Zastąp {your-password} token hasłem ustawionym podczas tworzenia bazy danych.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    
  4. Nawiąż połączenie z bazą danych przy użyciu narzędzia wiersza polecenia psql. Wprowadź następujące polecenie w wierszu polecenia:

    psql
    

Instalowanie rozszerzenia azure_ai

Za pomocą azure_ai rozszerzenia można zintegrować usługi Azure OpenAI i Azure Cognitive Services z bazą danych. Aby uzyskać więcej informacji, zobacz Generate vector embeddings with Azure OpenAI in Azure Database for PostgreSQL (Generowanie osadzania wektorów za pomocą usługi Azure OpenAI w usłudze Azure Database for PostgreSQL).

Aby włączyć rozszerzenie w bazie danych:

  1. Dodaj rozszerzenie do listy dozwolonych zgodnie z opisem w sekcji Zezwalaj na rozszerzenia.

  2. W bazie danych, w której planujesz używać azure_ai rozszerzenia, zainstaluj rozszerzenie zgodnie z opisem w temacie Tworzenie rozszerzeń.

Sprawdzanie obiektów w rozszerzeniu azure_ai

Przeglądanie obiektów, które azure_ai zawiera rozszerzenie, może zapewnić lepsze zrozumienie możliwości oferowanych przez to rozszerzenie. W wierszu polecenia możesz użyć \dx meta-poleceniapsql, aby wyświetlić listę obiektów w rozszerzeniu:

\dx+ azure_ai

Dane wyjściowe meta-polecenia pokazują, że azure_ai rozszerzenie tworzy trzy schematy, wiele funkcji zdefiniowanych przez użytkownika (UDF) i kilka typów złożonych w bazie danych. W poniższej tabeli opisano schematy, które dodaje rozszerzenie:

Schemat opis
azure_ai Udostępnia główny schemat, w którym znajduje się tabela konfiguracji oraz funkcje zdefiniowane przez użytkownika umożliwiające interakcję z tą tabelą.
azure_openai Zawiera funkcje zdefiniowane przez użytkownika, które umożliwiają wywoływanie punktu końcowego usługi Azure OpenAI.
azure_cognitive Udostępnia funkcje zdefiniowane przez użytkownika i typy złożone związane z integracją bazy danych z usługami Azure Cognitive Services.

Wszystkie funkcje i typy są skojarzone z jednym ze schematów. Aby przejrzeć funkcje zdefiniowane w schemacie azure_ai, użyj meta-polecenia \df. Określ schemat, którego funkcje powinny być wyświetlane. Polecenia \x auto przed poleceniem \df automatycznie włączają i wyłączają rozwinięty wyświetlacz, aby ułatwić przeglądanie danych wyjściowych w Azure Cloud Shell.

\x auto
\df+ azure_ai.*

azure_ai.set_setting() Użyj funkcji , aby ustawić punkt końcowy i wartości krytyczne dla usług Azure AI. Akceptuje klucz i wartość, która ma zostać przypisana. Funkcja azure_ai.get_setting() zapewnia sposób pobierania wartości, które ustawiono za pomocą funkcji set_setting(). Akceptuje klucz ustawienia, które chcesz wyświetlić. W przypadku obu metod klucz musi być jednym z następujących elementów:

Klawisz opis
azure_openai.endpoint Obsługiwany punkt końcowy usługi Azure OpenAI (na przykład https://example.openai.azure.com).
azure_openai.subscription_key Klucz subskrypcji zasobu usługi Azure OpenAI.
azure_cognitive.endpoint Obsługiwany punkt końcowy usług Cognitive Services (na przykład https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Klucz subskrypcji dla zasobu usług Cognitive Services.

Ważne

Ponieważ informacje o połączeniu usług Azure AI, w tym klucze API, są przechowywane w tabeli konfiguracyjnej w bazie danych, azure_ai rozszerzenie definiuje rolę określaną jako azure_ai_settings_manager, aby zapewnić, że te informacje są chronione i dostępne wyłącznie dla użytkowników posiadających tę rolę. Ta rola umożliwia odczytywanie i zapisywanie ustawień związanych z rozszerzeniem.

Tylko superużytkownicy i członkowie azure_ai_settings_manager roli mogą wywoływać azure_ai.get_setting() funkcje i azure_ai.set_setting() . W usłudze Azure Database for PostgreSQL wszyscy użytkownicy administracyjni mają rolę azure_ai_settings_manager .

Generowanie osadzania wektorów za pomocą usługi Azure OpenAI

azure_ai Schemat rozszerzenia azure_openai umożliwia korzystanie z usługi Azure OpenAI do tworzenia wektorowych osadzeń dla wartości tekstowych. Za pomocą tego schematu można wygenerować osadzanie za pomocą usługi Azure OpenAI bezpośrednio z bazy danych, aby utworzyć wektorowe reprezentacje tekstu wejściowego. Te reprezentacje mogą być następnie używane w wyszukiwaniach podobieństwa wektorów i używane przez modele uczenia maszynowego.

Osadzanie to technika używania modeli uczenia maszynowego do oceny, jak ściśle powiązane są informacje. Ta technika umożliwia wydajną identyfikację relacji i podobieństw między danymi, dzięki czemu algorytmy mogą identyfikować wzorce i tworzyć dokładne przewidywania.

Ustawianie punktu końcowego i klucza usługi Azure OpenAI

Przed użyciem azure_openai funkcji skonfiguruj rozszerzenie za pomocą punktu końcowego i klucza usługi Azure OpenAI:

  1. W witrynie Azure Portal przejdź do zasobu azure OpenAI. W menu po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Klucze i punkt końcowy.

  2. Skopiuj punkt końcowy i klucz dostępu. Możesz użyć wartości KEY1 lub KEY2. Posiadanie zawsze dwóch kluczy pozwala bezpiecznie rotować i ponowne generować klucze bez powodowania przerw w działaniu usługi.

  3. W poniższym poleceniu zastąp tokeny {endpoint} i {api-key} wartościami pobranymi z portalu Azure. Następnie uruchom polecenia z psql wiersza polecenia, aby dodać wartości do tabeli konfiguracji.

    SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');
    
  4. Sprawdź ustawienia zapisane w tabeli konfiguracji:

    SELECT azure_ai.get_setting('azure_openai.endpoint');
    SELECT azure_ai.get_setting('azure_openai.subscription_key');
    

Rozszerzenie azure_ai jest teraz połączone z kontem usługi Azure OpenAI i jest gotowe do generowania osadzania wektorów.

Wypełnienie bazy danych przykładowymi danymi

W tym artykule użyto małego podzestawu zestawu danych BillSum w celu udostępnienia przykładowych danych tekstowych do generowania wektorów. Ten zestaw danych zawiera listę projektów ustaw Kongresu Stanów Zjednoczonych oraz stanowych Kalifornii. Możesz pobrać bill_sum_data.csv plik zawierający te dane z repozytorium GitHub dla przykładów platformy Azure.

Aby hostować przykładowe dane w bazie danych, utwórz tabelę o nazwie bill_summaries:

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

Za pomocą polecenia COPY postgreSQL z psql wiersza polecenia załaduj przykładowe dane z pliku CSV do bill_summaries tabeli. Określ, że pierwszy wiersz pliku CSV jest wierszem nagłówka.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Włączanie obsługi wektorów

Za pomocą azure_ai rozszerzenia można wygenerować osadzanie dla tekstu wejściowego. Aby umożliwić przechowywanie wygenerowanych wektorów obok pozostałych danych w bazie danych, należy zainstalować pgvector rozszerzenie. Postępuj zgodnie ze wskazówkami w dokumentacji dotyczącymi włączania obsługi wektorów w bazie danych.

Dzięki dodaniu obsługi wektorów do bazy danych, dodaj nową kolumnę do tabeli bill_summaries przy użyciu typu danych vector do przechowywania embeddingów w tabeli. Model text-embedding-ada-002 tworzy wektory o wymiarach 1536, więc należy określić 1536 jako rozmiar wektora.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Generowanie i przechowywanie wektorów

Tabela bill_summaries jest teraz gotowa do przechowywania osadzania. Za pomocą azure_openai.create_embeddings() funkcji tworzysz wektory dla bill_text pola i wstawiasz je do nowo utworzonej bill_vectorbill_summaries kolumny w tabeli.

Przed użyciem create_embeddings() funkcji uruchom następujące polecenie, aby go sprawdzić i przejrzeć wymagane argumenty:

\df+ azure_openai.*

Właściwość Argument data types w danych wyjściowych \df+ azure_openai.* polecenia wyświetla listę argumentów, których oczekuje funkcja:

Argumentacja Typ Domyślny opis
deployment_name text Nazwa wdrożenia w portalu usługi Azure AI Foundry, które zawiera text-embeddings-ada-002 model.
input text Tekst wejściowy używany do tworzenia osadzania.
timeout_ms integer 3600000 Limit czasu w milisekundach, po którym operacja jest zatrzymana.
throw_on_error boolean true Flaga wskazująca, czy funkcja, w przypadku błędu, powinna zgłaszać wyjątek, który powoduje wycofanie transakcji opakowujących.

Pierwszym argumentem deployment_name jest wartość przypisana podczas wdrażania modelu osadzania na koncie usługi Azure OpenAI. Aby pobrać tę wartość:

  1. Przejdź do zasobu azure OpenAI w witrynie Azure Portal.

  2. W menu po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Wdrożenia modelu , aby otworzyć portal usługi Azure AI Foundry.

  3. W portalu azure AI Foundry wybierz pozycję Wdrożenia. W okienku Wdrożenia skopiuj wartość Nazwa wdrożenia skojarzona z wdrożeniem text-embedding-ada-002 modelu.

Zrzut ekranu przedstawiający osadzanie wdrożeń na potrzeby integracji sztucznej inteligencji.

Korzystając z tych informacji, uruchom zapytanie, aby zaktualizować każdy rekord w bill_summaries tabeli. Wstaw wygenerowane wektory osadzeń dla pola bill_text do kolumny bill_vector przy użyciu funkcji azure_openai.create_embeddings(). Zastąp {your-deployment-name} ciąg wartością Nazwa wdrożenia skopiowaną z okienka Wdrożenia portalu usługi Azure AI Foundry. Następnie uruchom następujące polecenie:

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Uruchom następujące zapytanie, aby wyświetlić osadzanie wygenerowane dla pierwszego rekordu w tabeli. Możesz uruchomić \x najpierw, jeśli dane wyjściowe są trudne do odczytania.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Każde osadzanie jest wektorem liczb zmiennoprzecinkowych. Odległość między dwoma osadzaniami w przestrzeni wektorowej jest skorelowana z podobieństwem semantycznym między dwoma danymi wejściowymi w oryginalnym formacie.

Podobieństwo wektorów to metoda pomiaru podobieństwa dwóch elementów poprzez ich reprezentację jako wektory. Wektory są serią liczb. Są one często używane do wykonywania wyszukiwań za pośrednictwem LLM-ów.

Podobieństwo wektorów jest często obliczane za pomocą metryk odległości, takich jak:

  • Odległość euklidesowa: Mierzy odległość linii prostej między dwoma wektorami w przestrzeni nwymiarowej.
  • Podobieństwo cosinusu: Mierzy cosinus kąta między dwoma wektorami.

Umożliwia bardziej wydajne wyszukiwanie w vector polu, tworząc indeks na bill_summaries podstawie odległości cosinusu i hierarchicznego nawigowalnego małego świata (HNSW). Usługa HNSW umożliwia pgvector używanie najnowszych algorytmów opartych na grafach do przybliżonych zapytań najbliższych sąsiadów.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Teraz wszystko jest gotowe do wykonania zapytania wyszukiwania podobieństwa cosinusowego względem bazy danych.

W poniższym zapytaniu osadzenia są generowane dla pytania wejściowego, a następnie są rzutowane na tablicę wektorową (::vector). Tablica wektorów umożliwia porównywanie pytania z wektorami przechowywanymi w bill_summaries tabeli.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

Zapytanie używa <=>. Ten operator reprezentuje operator odległości cosinus używany do obliczania odległości między dwoma wektorami w przestrzeni wielowymiarowej.

Integrowanie usług Azure Cognitive Services

Integracje usług Azure AI zawarte w azure_cognitive schemacie azure_ai rozszerzenia zapewniają bogaty zestaw funkcji języka sztucznej inteligencji, do których można uzyskać dostęp bezpośrednio z bazy danych. Funkcje obejmują analizę tonacji, wykrywanie języka, wyodrębnianie kluczowych fraz, rozpoznawanie jednostek i podsumowywanie tekstu. Dostęp do tych funkcji jest włączony za pośrednictwem usługi językowej Azure AI.

Aby zapoznać się z pełnymi możliwościami sztucznej inteligencji platformy Azure, do których można uzyskać dostęp za pośrednictwem rozszerzenia, zobacz Integrowanie usługi Azure Database for PostgreSQL z usługami Azure Cognitive Services.

Ustawianie punktu końcowego i klucza usługi językowej azure AI

Podobnie jak w przypadku funkcji azure_openai, aby pomyślnie wykonywać wywołania w stosunku do usług Azure AI przy użyciu rozszerzenia azure_ai, należy podać adres URL punktu końcowego i klucz zasobu usługi językowej Azure AI.

  1. W witrynie Azure Portal przejdź do zasobu usługi językowej.

  2. W menu po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Klucze i punkt końcowy.

  3. Skopiuj punkt końcowy i klucz dostępu. Możesz użyć wartości KEY1 lub KEY2.

  4. psql W wierszu polecenia uruchom następujące polecenia, aby dodać wartości do tabeli konfiguracji. Zastąp tokeny {endpoint} i {api-key} wartościami pobranymi z portalu Azure.

    SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');
    

Podsumowywanie rachunków

Aby zademonstrować niektóre możliwości azure_cognitive funkcji azure_ai rozszerzenia, możesz wygenerować podsumowanie każdego rachunku. Schemat azure_cognitive zawiera dwie funkcje podsumowania tekstu:

  • summarize_abstractive: Podsumowanie abstrakcyjne tworzy podsumowanie, które przechwytuje główne pojęcia z tekstu wejściowego, ale może nie używać identycznych słów.
  • summarize_extractive: Podsumowanie wyodrębniające tworzy skrót, wyodrębniając kluczowe zdania z tekstu wejściowego.

Aby użyć możliwości usługi językowej Azure AI do generowania nowej, oryginalnej zawartości, użyj summarize_abstractive funkcji , aby utworzyć podsumowanie danych wejściowych tekstu. Użyj ponownie meta-polecenia \df z psql, tym razem, aby przyjrzeć się funkcji azure_cognitive.summarize_abstractive konkretnej:

\df azure_cognitive.summarize_abstractive

Właściwość Argument data types w danych wyjściowych \df azure_cognitive.summarize_abstractive polecenia wyświetla listę argumentów, których oczekuje funkcja:

Argumentacja Typ Domyślny opis
text text Tekst wejściowy do podsumowania.
language text Dwuliterowa reprezentacja języka ISO 639-1, w którym jest zapisywany tekst wejściowy. Aby uzyskać dozwolone wartości, zobacz Obsługa funkcji językowych.
timeout_ms integer 3600000 Limit czasu w milisekundach, po którym operacja jest zatrzymana.
throw_on_error boolean true Flaga wskazująca, czy funkcja, w przypadku błędu, powinna zgłaszać wyjątek, który powoduje wycofanie transakcji opakowujących.
sentence_count integer 3 Maksymalna liczba zdań do uwzględnienia w wygenerowanych podsumowaniach.
disable_service_logs boolean false Ustawienie wyłączające dzienniki usługi językowej. Usługa językowa rejestruje tekst wejściowy przez 48 godzin wyłącznie w celu umożliwienia rozwiązywania problemów. Ustawienie tej właściwości w celu true wyłączenia rejestrowania danych wejściowych i może ograniczyć możliwość badania występujących problemów. Aby uzyskać więcej informacji, zobacz Informacje o zgodności i ochronie prywatności usług Cognitive Services oraz zasady odpowiedzialnej sztucznej inteligencji firmy Microsoft.

Funkcja summarize_abstractive wymaga następujących argumentów: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

Poniższe zapytanie względem tabeli bill_summaries używa funkcji summarize_abstractive do wygenerowania nowego, jednozdaniowego podsumowania tekstu ustawy. Umożliwia ona włączenie możliwości generowania sztucznej inteligencji bezpośrednio do zapytań.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

Możesz również użyć funkcji do zapisywania danych w tabelach bazy danych. Zmodyfikuj tabelę, bill_summaries aby dodać nową kolumnę do przechowywania podsumowań z jednym zdaniem w bazie danych:

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Następnie zaktualizuj tabelę za pomocą podsumowań. Funkcja summarize_abstractive zwraca tablicę tekstu (text[]). Funkcja array_to_string konwertuje wartość zwracaną na reprezentację ciągu. W poniższym zapytaniu argument throw_on_error jest ustawiony na false wartość. To ustawienie umożliwia kontynuowanie procesu podsumowania w przypadku wystąpienia błędu.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

W danych wyjściowych może zostać wyświetlone ostrzeżenie dotyczące nieprawidłowego dokumentu, dla którego nie można wygenerować odpowiedniego podsumowania. To ostrzeżenie wynika z ustawienia throw_on_error na false w poprzednim zapytaniu. Jeśli ta flaga zostałaby ustawiona na wartość domyślną true, zapytanie zakończy się niepowodzeniem, a żadne podsumowania nie zostaną zapisane w bazie danych. Aby wyświetlić rekord, który rzucił ostrzeżenie, uruchom następujące polecenie:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Następnie możesz wysyłać zapytania do tabeli bill_summaries, aby wyświetlić nowe, jednostrzałowe podsumowania generowane przez rozszerzenie azure_ai dla innych rekordów w tabeli.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Podsumowanie

Gratulacje! Wiesz już, jak używać azure_ai rozszerzenia do integrowania dużych modeli językowych i możliwości generowania sztucznej inteligencji w bazie danych.