Freigeben über


Integrieren von Azure KI-Funktionen in Azure-Datenbank für PostgreSQL – Flexibler Server

GILT FÜR: Azure Database for PostgreSQL – Flexibler Server

Die azure_ai-Erweiterung bietet die Möglichkeit, große Sprachmodelle (LLMs) zu verwenden und generative KI-Anwendungen innerhalb einer Azure Database for PostgreSQL Flexible Server-Datenbank zu erstellen, indem sie die Leistung der Azure KI Services integriert. Generative KI ist eine Form der künstlichen Intelligenz, bei der LLMs darauf trainiert werden, auf der Grundlage von natürlichem Sprachinput originale Inhalte zu generieren. Mithilfe der azure_ai Erweiterung können Sie die Funktionen der natürlichen Sprachabfrageverarbeitung von KI direkt aus der Datenbank verwenden.

Dieses Tutorial zeigt, wie Sie einer Azure-Database for PostgreSQL Flexible Server-Instanz mithilfe der azure_ai-Erweiterung umfangreiche KI-Funktionen hinzufügen können. Es umfasst die Integration von Azure OpenAI und dem Azure KI Language Service in Ihre Datenbank mithilfe der Erweiterung.

Voraussetzungen

Herstellen einer Verbindung mit der Datenbank mithilfe psql der Azure Cloud Shell

Öffnen Sie den Azure Cloud Shell-Dienst in einem Webbrowser. Wählen Sie Bash als Umgebung aus und wählen Sie, wenn Sie dazu aufgefordert werden, das Abonnement aus, das Sie für Ihre Azure Database for PostgreSQL Flexible Server-Datenbank verwendet haben. Wählen Sie dann Speicher erstellen aus.

So rufen Sie Details zur Datenbankverbindung ab:

  1. Navigieren Sie im Azure-Portal zu Ihren Azure Database for MySQL Flexibler Server-Ressourcen.

  2. Wählen Sie im linken Navigationsmenü unter Einstellungen die Option Verbinden und kopieren Sie den Block Verbindungsdetails.

  3. Fügen Sie die kopierten Zeilen zur Definition der Umgebungsvariablen in das Terminal der Azure Cloud Shell ein, das Sie oben geöffnet haben, und ersetzen Sie dabei das Token {your-password} durch das Kennwort, das Sie bei der Erstellung der Datenbank festgelegt haben.

    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}"
    

    Stellen Sie mithilfe des Befehlszeilenprogramms psql eine Verbindung mit Ihrer Datenbank her, indem Sie Folgendes an der Eingabeaufforderung eingeben.

    psql
    

Installieren Sie die azure_ai-Erweiterung.

Azure KI-Erweiterung und OpenAI

Mit der azure_ai Erweiterung können Sie Azure OpenAI und Azure Cognitive Services in Ihre Datenbank integrieren. Führen Sie die folgenden Schritte aus, um die Erweiterung in Ihrer Datenbank zu aktivieren:

  1. Fügen Sie die Erweiterung zu Ihrer Positivliste hinzu, wie in Zulassen von Erweiterungen beschrieben.

  2. Installieren Sie sie in der Datenbank, in der Sie die azure_ai-Erweiterung verwenden möchten, wie in Erstellen von Erweiterungen beschrieben.

Prüfen der Objekte, die in der azure_ai Erweiterung enthalten sind

Das Überprüfen der in der azure_ai Erweiterung enthaltenen Objekte kann ein besseres Verständnis der von ihr angebotenen Funktionen bieten. Sie können den \dx Metabefehl über die psql Eingabeaufforderung verwenden, um die in der Erweiterung enthaltenen Objekte auflisten zu können.

\dx+ azure_ai

Die Metabefehlsausgabe zeigt, dass die azure_ai Erweiterung drei Schema, mehrere benutzerdefinierte Funktionen (UDFs) und mehrere zusammengesetzte Typen in der Datenbank erstellt. In der folgenden Tabelle sind die Schema aufgeführt, die von der Erweiterung hinzugefügt wurden, und die einzelnen Schema werden beschrieben.

Schema Beschreibung
azure_ai Das Prinzipalschema, in dem sich die Konfigurationstabelle und die UDFs für die Interaktion mit ihr befinden.
azure_openai Enthält die UDFs, die das Aufrufen eines Azure OpenAI-Endpunkts ermöglichen.
azure_cognitive Stellt UDFs und zusammengesetzte Typen bereit, die sich auf die Integration der Datenbank in Azure Cognitive Services beziehen.

Die Funktionen und Typen sind alle einem der Schema zugeordnet. Um die im azure_ai Schema definierten Funktionen zu überprüfen, verwenden Sie den \df Metabefehl, und geben Sie das Schema an, dessen Funktionen angezeigt werden sollen. Die \x auto-Befehle vor dem \df-Befehl schaltet die erweiterte Anzeige automatisch ein und aus, um die Ausgabe des Befehls in der Azure Cloud Shell einfacher anzuzeigen.

\x auto
\df+ azure_ai.*

Mit der azure_ai.set_setting() Funktion können Sie den Endpunkt und kritische Werte für Azure KI Services festlegen. Er akzeptiert einen Schlüssel und den Wert, der ihm zugewiesen werden soll. Die azure_ai.get_setting() Funktion bietet eine Möglichkeit zum Abrufen der Werte, die Sie mit der set_setting() Funktion festgelegt haben. Er akzeptiert den Schlüssel der Einstellung, die Sie anzeigen möchten. Für beide Methoden muss der Schlüssel eine der folgenden Sein:

Schlüssel Beschreibung
azure_openai.endpoint Ein unterstützter OpenAI-Endpunkt (z. B https://example.openai.azure.com. ).
azure_openai.subscription_key Ein Abonnementschlüssel für eine OpenAI-Ressource.
azure_cognitive.endpoint Ein unterstützter Cognitive Services-Endpunkt (z. B https://example.cognitiveservices.azure.com. ).
azure_cognitive.subscription_key Ein Abonnementschlüssel für eine Cognitive Services-Ressource.

Wichtig

Da die Verbindungsinformationen für Azure KI Services, einschließlich der API-Schlüssel, in einer Konfigurationstabelle in der Datenbank gespeichert werden, definiert die azure_ai Erweiterung eine Rolle namens azure_ai_settings_manager, um sicherzustellen, dass diese Informationen geschützt und nur für Benutzer mit dieser Rolle zugänglich sind. Diese Rolle ermöglicht das Lesen und Schreiben von Einstellungen im Zusammenhang mit der Erweiterung. Nur Superuser und Mitglieder der azure_ai_settings_manager Rolle können die Funktionen azure_ai.get_setting() und azure_ai.set_setting() aufrufen. In Azure Database for PostgreSQL Flexible Server wird allen Administratorbenutzern die Rolle azure_ai_settings_manager zugewiesen.

Generieren von Vektoreinbettungen mit Azure OpenAI

Das azure_ai Schema der Erweiterung azure_openai ermöglicht die Verwendung von Azure OpenAI zum Erstellen von Vektoreinbettungen für Textwerte. Mithilfe dieses Schemas können Sie Einbettungen mit Azure OpenAI direkt aus der Datenbank generieren, um Vektordarstellungen von Eingabetexten zu erstellen, die dann in Vektorähnlichkeitssuchen verwendet und von Machine Learning-Modellen genutzt werden können.

Einbettungen sind eine Technik, bei der Machine Learning-Modelle verwendet werden, um zu bewerten, wie eng verwandte Informationen sind. Diese Technik ermöglicht eine effiziente Identifizierung von Beziehungen und Ähnlichkeiten zwischen Daten, sodass Algorithmen Muster identifizieren und genaue Vorhersagen vornehmen können.

Festlegen des Azure OpenAI-Endpunkts und des Schlüssels

Bevor Sie die azure_openai Funktionen verwenden:

  1. Konfigurieren Sie die Erweiterung mit Ihrem Azure OpenAI-Dienstendpunkt und -Schlüssel.

  2. Navigieren Sie zu Ihrer Azure OpenAI-Ressource im Azure-Portal und wählen Sie im linken Menü unter Ressourcenverwaltung den Punkt Schlüssel und Endpunkt.

  3. Kopieren Sie Ihren Endpunkt und Zugriffsschlüssel. Sie können KEY1 oder KEY2 verwenden. Wenn Sie jederzeit zwei Schlüssel zur Verfügung haben, können Sie die Schlüssel auf sichere Weise rotieren und neu generieren, ohne Dienstunterbrechungen zu verursachen.

Ersetzen Sie im folgenden Befehl die {endpoint} und {api-key} Token durch Werte, die Sie aus dem Azure-Portal abgerufen haben, und führen Sie dann die Befehle von der psql Eingabeaufforderung aus, um Ihre Werte der Konfigurationstabelle hinzuzufügen.

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

Überprüfen Sie die in der Konfigurationstabelle enthaltenen Einstellungen:

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

Die azure_ai Erweiterung ist jetzt mit Ihrem Azure OpenAI-Konto verbunden und kann Vektoreinbettungen generieren.

Füllen der Datenbank mit Beispieldaten

In diesem Tutorial wird eine kleine Teilmenge des BillSum-Datasets verwendet, der eine Liste von Gesetzesvorlagen des US-Kongresses und des Bundesstaates Kalifornien enthält, um Beispiel-Textdaten für die Erstellung von Vektoren bereitzustellen. Die bill_sum_data.csv Datei, die diese Daten enthält, kann aus dem GitHub-Repository vonAzure Samples heruntergeladen werden.

Um die Beispieldaten in der Datenbank zu hosten, erstellen Sie eine Tabelle mit dem Namen 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
);

Laden Sie mit dem PostgreSQL COPY-Befehl von der psql Eingabeaufforderung aus die Beispieldaten aus der CSV-Datei in die bill_summaries Tabelle, wobei Sie angeben, dass die erste Zeile der CSV-Datei eine Kopfzeile ist.

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

Aktivierung des Vektor-Support

Mit der azure_ai Erweiterung können Sie Einbettungen für Eingabetext generieren. Damit die generierten Vektoren zusammen mit den übrigen Daten in der Datenbank gespeichert werden können, müssen Sie die pgvector Erweiterung installieren, indem Sie den Anweisungen in der Dokumentation Vektorunterstützung in Ihrer Datenbank aktivieren folgen.

Wenn der Datenbank Vektor unterstützt wird, fügen Sie der bill_summaries Tabelle mithilfe des vector Datentyps zum Speichern von Einbettungen in der Tabelle eine neue Spalte hinzu. Das text-embedding-ada-002 Modell erzeugt Vektoren mit 1536 Dimensionen, sodass Sie als Vektorgröße 1536 angeben müssen.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Generieren und Speichern von Vektoren

Die bill_summaries Tabelle kann jetzt Einbettungen speichern. Mithilfe der azure_openai.create_embeddings() Funktion erstellen Sie Vektoren für das bill_text Feld und fügen sie in die neu erstellte bill_vector Spalte in der bill_summaries Tabelle ein.

Führen Sie vor der Verwendung der create_embeddings() Funktion den folgenden Befehl aus, um sie zu prüfen und die erforderlichen Argumente zu überprüfen:

\df+ azure_openai.*

Die Argument data types Eigenschaft in der Ausgabe des \df+ azure_openai.* Befehls zeigt die Liste der Argumente an, die die Funktion erwartet.

Argument Typ Standard Beschreibung
deployment_name text Name der Bereitstellung in Azure OpenAI Studio, das das text-embeddings-ada-002 Modell enthält.
input text Eingabetext zum Erstellen von Einbettungen.
timeout_ms integer 3600000 Timeout in Millisekunden, nach dem der Vorgang beendet wird.
throw_on_error boolean true Flag, das angibt, ob die Funktion beim Fehler eine Ausnahme auslösen soll, was zu einem Rollback der Umbruchtransaktionen führt.

Das erste Argument ist das deployment_name, das zugewiesen wurde, als Ihr Einbettungsmodell in Ihrem Azure OpenAI-Konto bereitgestellt wurde. Um diesen Wert abzurufen, wechseln Sie im Azure-Portal zu Ihrer Azure OpenAI-Ressource. Wählen Sie dort im linken Navigationsmenü unter Ressourcenverwaltung das Modellbereitstellungen-Element aus, um Azure OpenAI Studio zu öffnen. Kopieren Sie auf der Registerkarte Bereitstellungen in Azure OpenAI Studio den Wert Bereitstellungsname, der mit der text-embedding-ada-002 Modellimplementierung verbunden ist.

Screenshot der Einbettungsbereitstellungen für die Integration von KI

Führen Sie mithilfe dieser Informationen eine Abfrage aus, um jeden Datensatz in der bill_summaries Tabelle zu aktualisieren und die generierten Vektoreinbettungen für das bill_text Feld mithilfe der azure_openai.create_embeddings() Funktion in die bill_vector Spalte einzufügen. Ersetzen Sie {your-deployment-name} durch den Wert des Bereitstellungsnamens, den Sie aus der Registerkarte Azure OpenAI Studio-Bereitstellungen kopiert haben, und führen Sie dann den folgenden Befehl aus:

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

Führen Sie die folgende Abfrage aus, um die für den ersten Datensatz in der Tabelle erzeugte Einbettung anzuzeigen. Sie können zuerst \x ausführen, wenn die Ausgabe schwer zu lesen ist.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Jede Einbettung ist ein Vektor aus Gleitkommazahlen. Der Abstand zwischen zwei Einbettungen im Vektorraum korreliert mit der semantischen Nähe zwischen zwei Eingaben im Originalformat.

Die Vektorähnlichkeit ist eine Methode, mit der gemessen wird, wie ähnlich zwei Elemente sind. Dazu werden sie als Vektoren dargestellt, bei denen es sich um Zahlenreihen handelt. Vektoren werden häufig zum Ausführen von Suchvorgängen mithilfe von LLMs verwendet. Die Vektorähnlichkeit wird häufig mithilfe von Entfernungsmetriken berechnet, z. B. euklidischer Abstand oder Kosinus-Ähnlichkeit. Der euklidische Abstand misst den geraden Abstand zwischen zwei Vektoren im n-dimensionalen Raum, während die Kosinusähnlichkeit den Kosinus des Winkels zwischen zwei Vektoren misst.

Um eine effizientere Suche über das vector Feld zu ermöglichen, erstellen Sie einen Index unter bill_summaries Verwendung der Kosinus-Distanz und HNSW (Hierarchical Navigable Small World). HNSW ermöglicht pgvector, die neuesten graphbasierten Algorithmen zu verwenden, um Pixelwiederholung-Abfragen anzunähern.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Da jetzt alles vorhanden ist, können Sie jetzt eine Kosinussuchabfrage für die Datenbank ausführen.

In der folgenden Abfrage werden die Einbettungen für eine Eingabefrage generiert und dann in ein Vektorarray (::vector) umgestellt, wodurch sie mit den in der bill_summaries Tabelle gespeicherten Vektoren verglichen werden kann.

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;

Die Abfrage verwendet den Vektoroperator <=>, der den „Kosinus-Abstands“-Operator darstellt, der zur Berechnung des Abstands zwischen zwei Vektoren in einem mehrdimensionalen Raum verwendet wird.

Integration von Azure Cognitive Services

Die im azure_cognitive Schema der azure_ai Erweiterung enthaltenen Azure KI Services-Integrationen bieten eine umfangreiche Sammlung von KI-Sprachfeatures, die direkt über die Datenbank zugänglich sind. Zu den Funktionen gehören Stimmungsanalyse, Spracherkennung, Extraktion von Schlüsselwörtern, Erkennung von Entitäten und Textzusammenfassung. Der Zugriff auf diese Funktionen wird über den Azure KI Language Serviceaktiviert.

Um die vollständigen Azure KI-Funktionen zu überprüfen, auf die über die Erweiterung zugegriffen werden kann, zeigen Sie die Integration der Azure Database for PostgreSQL Flexible Server mit Azure Cognitive Services an.

Festlegen des Azure KI Language-Dienstendpunkts und des Schlüssels

Wie bei den azure_openai Funktionen müssen Sie den Endpunkt und einen Schlüssel für Ihren Azure KI Language Service bereitstellen, um erfolgreich Aufrufe für Azure KI Services mithilfe der azure_ai Erweiterung zu tätigen. Rufen Sie diese Werte ab, indem Sie im Azure-Portal zu Ihrer Sprachdienstressource navigieren und im linken Menü unter Ressourcenverwaltung den Punkt Schlüssel und Endpunkt auswählen. Kopieren Sie Ihren Endpunkt und Zugriffsschlüssel. Sie können KEY1 oder KEY2 verwenden.

Ersetzen Sie im folgenden Befehl die {endpoint} und {api-key} Token durch Werte, die Sie aus dem Azure-Portal abgerufen haben, und führen Sie dann die Befehle von der psql Eingabeaufforderung aus, um Ihre Werte der Konfigurationstabelle hinzuzufügen.

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

Zusammenfassen von Rechnungen

Um einige der Möglichkeiten der azure_cognitive Funktionen der azure_ai Erweiterung zu demonstrieren, erstellen Sie eine Zusammenfassung jeder Rechnung. Das azure_cognitive Schema bietet zwei Funktionen zum Zusammenfassen von Text summarize_abstractive und summarize_extractive. Abstrakte Zusammenfassung erzeugt eine Zusammenfassung, die die Hauptkonzepte von Eingabetext erfasst, aber möglicherweise nicht identische Wörter verwendet. Extrahierende Zusammenfassung fasst eine Zusammenfassung zusammen, indem kritische Sätze aus dem Eingabetext extrahiert werden.

Um die Fähigkeit des Azure KI Language Services zum Generieren neuer, ursprünglicher Inhalte zu verwenden, verwenden Sie die summarize_abstractive Funktion, um eine Zusammenfassung der Texteingabe zu erstellen. Verwenden Sie den \df Metabefehl von psql erneut, um sich die azure_cognitive.summarize_abstractive Funktion genauer anzusehen.

\df azure_cognitive.summarize_abstractive

Die Argument data types Eigenschaft in der Ausgabe des \df azure_cognitive.summarize_abstractive Befehls zeigt die Liste der Argumente an, die die Funktion erwartet.

Argument Typ Standard Beschreibung
text text Der zu zusammenfassende Eingabetext.
Sprache text Eine zweiseitige ISO 639-1-Darstellung der Sprache, in der der Eingabetext geschrieben wird. Überprüfen Sie die Sprachunterstützung auf zulässige Werte.
timeout_ms integer 3600000 Timeout in Millisekunden, nach dem der Vorgang beendet wird.
throw_on_error boolean true Flag, das angibt, ob die Funktion beim Fehler eine Ausnahme auslösen soll, was zu einem Rollback der Umbruchtransaktionen führt.
sentence_count integer 3 Die maximale Anzahl von Sätzen, die in die generierte Zusammenfassung aufgenommen werden sollen.
disable_service_logs boolean false Der Sprachdienst protokolliert Ihren Eingabetext nur für 48 Stunden, um Probleme zu beheben. Wenn Sie diese Eigenschaft auf true festlegen, wird die Protokollierung der Eingaben deaktiviert und unsere Möglichkeiten, auftretende Probleme zu untersuchen, könnten eingeschränkt sein. Weitere Informationen finden Sie in den Compliance- und Datenschutzhinweisen zu Cognitive Services unter https://aka.ms/cs-compliance den Prinzipien von Microsoft Responsible AI unter https://www.microsoft.com/ai/responsible-ai.

Für die summarize_abstractive-Funktionsfunktion sind die folgenden Argumente erforderlich: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

Die folgende Abfrage für die bill_summaries Tabelle verwendet die summarize_abstractive Funktion, um eine neue Einsatzzusammenfassung für den Text einer Rechnung zu generieren, sodass Sie die Leistungsfähigkeit der generativen KI direkt in Ihre Abfragen integrieren können.

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

Die Funktion kann auch verwendet werden, um Daten in Ihre Datenbanktabellen zu schreiben. Ändern Sie die bill_summaries Tabelle, um eine neue Spalte zum Speichern der Einsatzzusammenfassungen in der Datenbank hinzuzufügen.

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Aktualisieren Sie als Nächstes die Tabelle mit den Zusammenfassungen. Die summarize_abstractive Funktion gibt ein Array von Text (text[]) zurück. Die array_to_string Funktion konvertiert den Rückgabewert in die Zeichenfolgendarstellung. In der folgenden Abfrage wurde das throw_on_error Argument auf false festgelegt. Mit dieser Einstellung kann der Zusammenfassungsprozess fortgesetzt werden, wenn ein Fehler auftritt.

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;

In der Ausgabe bemerken Sie möglicherweise eine Warnung zu einem ungültigen Dokument, für das eine entsprechende Zusammenfassung nicht generiert werden konnte. Diese Warnung ergibt sich aus der Einstellung throw_on_error zu false in der obigen Abfrage. Wäre der Standardwert true eingestellt, würde die Abfrage fehlschlagen und es wären keine Zusammenfassungen in die Datenbank geschrieben worden. Führen Sie Folgendes aus, um den Datensatz anzuzeigen, der die Warnung ausgelöst hat:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Anschließend können Sie die bill_summaries-Tabelle abfragen, um die neuen Zusammenfassungen in einem Satz anzuzeigen, die von der azure_ai-Erweiterung für die anderen Datensätze in der Tabelle generiert wurden.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Zusammenfassung

Herzlichen Glückwunsch, Sie haben gerade gelernt, wie Sie die azure_ai Erweiterung verwenden können, um große Sprachmodelle und generative KI-Funktionen in Ihre Datenbank zu integrieren.