Udostępnij za pośrednictwem


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

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Rozszerzenie azure_ai dodaje możliwość korzystania z dużych modeli językowych (LLMs) i tworzenia aplikacji generujących sztuczną inteligencję w ramach elastycznej bazy danych serwera 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. azure_ai Użycie rozszerzenia umożliwia korzystanie z funkcji przetwarzania zapytań języka naturalnego w języku naturalnym generowania sztucznej inteligencji bezpośrednio z bazy danych.

W tym samouczku przedstawiono dodawanie zaawansowanych funkcji sztucznej inteligencji do wystąpienia elastycznego serwera usługi Azure Database for PostgreSQL przy użyciu azure_ai rozszerzenia . Obejmuje ona integrację zarówno usługi Azure OpenAI, jak i usługi Azure AI Language z bazą danych przy użyciu rozszerzenia .

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie.

  • Dostęp jest udzielany usłudze Azure OpenAI w żądanej subskrypcji platformy Azure. Obecnie dostęp do tej usługi jest udzielany przez aplikację. Możesz ubiegać się o dostęp do usługi Azure OpenAI, wypełniając formularz pod adresem https://aka.ms/oai/access.

  • 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.

  • Usługa językowa azure AI. Jeśli nie masz zasobu, możesz utworzyć zasób language w witrynie Azure Portal, postępując zgodnie z instrukcjami podanymi w dokumencie Szybki start na potrzeby 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 zasobu, zobacz Tworzenie wystąpienia usługi Azure Database for PostgreSQL — serwer elastyczny.

Nawiązywanie połączenia z bazą danych przy użyciu psql usługi Azure Cloud Shell

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

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

  1. Przejdź do zasobu serwera elastycznego usługi Azure Database for PostgreSQL w witrynie Azure Portal.

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

  3. Wklej skopiowane wiersze deklaracji zmiennej środowiskowej do otwartego powyżej terminalu usługi Azure Cloud Shell, zastępując {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}"
    

    Połącz się z bazą danych przy użyciu narzędzia wiersza polecenia psql, wprowadzając następujące polecenie w wierszu polecenia.

    psql
    

azure_ai Instalowanie rozszerzenia

Rozszerzenie usługi Azure AI i interfejs OpenAI

azure_ai Rozszerzenie umożliwia integrację usług Azure OpenAI i Azure Cognitive Services z bazą danych. Aby włączyć rozszerzenie w bazie danych, wykonaj poniższe kroki:

  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 je zgodnie z opisem w temacie Tworzenie rozszerzeń

Sprawdzanie obiektów zawartych w azure_ai rozszerzeniu

Przeglądanie obiektów zawartych w azure_ai rozszerzeniu może zapewnić lepsze zrozumienie możliwości oferowanych przez nią. Meta-command można użyć \dx w psql wierszu polecenia, aby wyświetlić listę obiektów zawartych 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 wymieniono schematy dodane przez rozszerzenie i opisano każdy z nich.

Schemat opis
azure_ai Schemat główny, w którym znajduje się tabela konfiguracji i funkcje zdefiniowane przez użytkownika do interakcji z nim.
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 \df meta-polecenia, określając schemat, którego funkcje powinny być wyświetlane. Polecenia \x auto przed \df przełączenia rozwiniętego wyświetlania i wyłączania automatycznie, aby dane wyjściowe polecenia było łatwiejsze do wyświetlenia w usłudze Azure Cloud Shell.

\x auto
\df+ azure_ai.*

Funkcja azure_ai.set_setting() umożliwia ustawianie punktów końcowych i wartości krytycznych 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 ustawionych za set_setting() pomocą funkcji . Akceptuje klucz ustawienia, które chcesz wyświetlić. W przypadku obu metod klucz musi być jednym z następujących elementów:

Key opis
azure_openai.endpoint Obsługiwany punkt końcowy openAI (na przykład https://example.openai.azure.com).
azure_openai.subscription_key Klucz subskrypcji dla zasobu 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 interfejsu API, są przechowywane w tabeli konfiguracji w bazie danych, azure_ai rozszerzenie definiuje rolę wywoływaną azure_ai_settings_manager w celu zapewnienia, że te informacje są chronione i dostępne tylko dla użytkowników przypisanych do tej roli. 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() . Na serwerze elastycznym usługi Azure Database for PostgreSQL wszyscy użytkownicy administracyjni mają przypisaną azure_ai_settings_manager rolę.

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. Przy użyciu tego schematu można wygenerować osadzanie za pomocą usługi Azure OpenAI bezpośrednio z bazy danych, aby utworzyć wektorowe reprezentacje tekstu wejściowego, które następnie mogą być używane w wyszukiwaniach podobieństw wektorowych 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, umożliwiając algorytmom identyfikowanie wzorców i dokonywanie dokładnych przewidywań.

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

Przed użyciem azure_openai funkcji:

  1. Skonfiguruj rozszerzenie przy użyciu punktu końcowego i klucza usługi Azure OpenAI.

  2. Przejdź do zasobu usługi Azure OpenAI w witrynie Azure Portal i wybierz pozycję Klucze i punkt końcowy w obszarze Zarządzanie zasobami z menu po lewej stronie.

  3. 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.

W poniższym poleceniu zastąp {endpoint} wartości i {api-key} wartościami pobranymi z witryny Azure Portal, a 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}');

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 samouczku użyto małego podzestawu zestawu danych BillSum, który zawiera listę Stany Zjednoczone rachunki stanów Kongresu i Kalifornii, aby dostarczyć przykładowe dane tekstowe do generowania wektorów. Plik bill_sum_data.csv zawierający te dane można pobrać z repozytorium GitHub Przykłady 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ślając, ż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

Rozszerzenie azure_ai umożliwia generowanie osadzania dla tekstu wejściowego. Aby umożliwić przechowywanie wygenerowanych wektorów wraz z resztą danych w bazie danych, należy zainstalować pgvector rozszerzenie, postępując zgodnie ze wskazówkami zawartymi w dokumentacji dotyczącej włączania wektorów.

Po dodaniu wektora do bazy danych dodaj nową kolumnę do bill_summaries tabeli przy użyciu vector typu danych do przechowywania osadzania 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. azure_openai.create_embeddings() Za pomocą funkcji tworzysz wektory dla bill_text pola i wstawiasz je do nowo utworzonej bill_vector kolumny w bill_summaries tabeli.

Przed użyciem create_embeddings() funkcji uruchom następujące polecenie, aby sprawdzić go 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.

Argument Typ Domyślny opis
deployment_name text Nazwa wdrożenia w programie Azure OpenAI Studio, który 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 prawda Flaga wskazująca, czy funkcja powinna po błędzie zgłosić wyjątek powodujący wycofanie transakcji opakowujących.

Pierwszy argument to deployment_name, przypisany podczas wdrażania modelu osadzania na koncie usługi Azure OpenAI. Aby pobrać tę wartość, przejdź do zasobu usługi Azure OpenAI w witrynie Azure Portal. Następnie w menu nawigacji po lewej stronie w obszarze Zarządzanie zasobami wybierz element Wdrożenia modelu, aby otworzyć program Azure OpenAI Studio. W usłudze Azure OpenAI Studio na karcie 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, wstawiając wygenerowane wektory osadzania dla bill_text pola w bill_vector kolumnie przy użyciu azure_openai.create_embeddings() funkcji . Zastąp {your-deployment-name} wartość nazwą wdrożenia skopiowaną z karty Wdrożenia programu Azure OpenAI Studio, a następnie uruchom następujące polecenie:

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

Wykonaj 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, tak aby odległość między dwoma osadzaniami w przestrzeni wektorowej została skorelowana z podobieństwem semantycznym między dwoma danymi wejściowymi w oryginalnym formacie.

Podobieństwo wektorów to metoda służąca do mierzenia, jak podobne dwa elementy są reprezentowane jako wektory, które są seriami liczb. Wektory są często używane do przeprowadzania wyszukiwania przy użyciu funkcji LLMs. Podobieństwo wektorów jest często obliczane przy użyciu metryk odległości, takich jak odległość euklidesowa lub podobieństwo cosinusu. Odległość euklidesowa mierzy odległość linii prostej między dwoma wektorami w przestrzeni nwymiarowej, podczas gdy podobieństwo cosinusu mierzy cosinus kąta między dwoma wektorami.

Aby umożliwić bardziej wydajne wyszukiwanie w vector polu, tworząc indeks na bill_summaries podstawie odległości cosinusu i HNSW, który jest skrótem od hierarchicznej nawigacji mały świat. 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 cosinus względem bazy danych.

W poniższym zapytaniu osadzanie jest generowane dla pytania wejściowego, a następnie rzutowane do tablicy wektorowej (::vector), która umożliwia porównywanie ich 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 operatora wektora <=> , który reprezentuje operator "odległość 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 dostępnych 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 funkcjami sztucznej inteligencji platformy Azure dostępnymi za pośrednictwem rozszerzenia, zobacz integrowanie usługi Azure Database for PostgreSQL — serwer elastyczny z usługami Azure Cognitive Services.

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

Podobnie jak w przypadku azure_openai funkcji, aby pomyślnie wykonywać wywołania usług Azure AI przy użyciu azure_ai rozszerzenia, musisz podać punkt końcowy i klucz dla usługi językowej Azure AI. Pobierz te wartości, przechodząc do zasobu usługi językowej w witrynie Azure Portal z menu po lewej stronie w obszarze Zarządzanie zasobami wybierz pozycję Klucze i punkt końcowy . Skopiuj punkt końcowy i klucz dostępu. Możesz użyć wartości KEY1 lub KEY2.

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

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, należy wygenerować podsumowanie każdego rachunku. Schemat azure_cognitive zawiera dwie funkcje podsumowywania tekstu summarize_abstractive i summarize_extractive. Podsumowanie abstrakcyjne tworzy podsumowanie, które przechwytuje główne pojęcia z tekstu wejściowego, ale może nie używać identycznych słów. Podsumowanie wyodrębniające jest sumaryczne, wyodrębniając zdania krytyczne 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. \df Użyj ponownie meta-poleceniapsql, tym razem, aby przyjrzeć się konkretnie azure_cognitive.summarize_abstractive funkcji.

\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.

Argument Typ Domyślny opis
text text Tekst wejściowy do podsumowania.
język text Dwuliterowa reprezentacja języka ISO 639-1, w którym jest zapisywany tekst wejściowy. Sprawdź obsługę języka pod kątem dozwolonych wartości.
timeout_ms integer 3600000 Limit czasu w milisekundach, po którym operacja jest zatrzymana.
throw_on_error boolean prawda Flaga wskazująca, czy funkcja powinna po błędzie zgłosić wyjątek powodujący wycofanie transakcji opakowujących.
sentence_count integer 3 Maksymalna liczba zdań do uwzględnienia w wygenerowanych podsumowaniach.
disable_service_logs boolean fałsz 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 Cognitive Services Compliance and Privacy notes at and Microsoft Responsible AI principles at https://aka.ms/cs-compliance https://www.microsoft.com/ai/responsible-ai.

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

Poniższe zapytanie względem bill_summaries tabeli używa summarize_abstractive funkcji , aby wygenerować nowe jedno zdanie podsumowania tekstu rachunku, co umożliwia 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';

Funkcja może również służyć 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 throw_on_error zapytaniu argument został ustawiony na falsewartość . 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 powyższym zapytaniu. Jeśli ta flaga została pozostawiona domyślnie true, zapytanie zakończy się niepowodzeniem, a żadne podsumowania nie zostałyby zapisane w bazie danych. Aby wyświetlić rekord, który rzucił ostrzeżenie, wykonaj następujące polecenie:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Następnie możesz wysłać zapytanie bill_summaries do tabeli, aby wyświetlić nowe, jedno zdanie podsumowania wygenerowane przez azure_ai rozszerzenie 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 generowania możliwości sztucznej inteligencji w bazie danych.