Delen via


Azure AI-mogelijkheden integreren in Azure Database for PostgreSQL

De azure_ai extensie voegt de mogelijkheid toe om grote taalmodellen (LLM's) te gebruiken en generatieve AI-toepassingen te bouwen in een Azure Database for PostgreSQL-database door de kracht van Azure AI-services te integreren.

Generatieve AI is een vorm van kunstmatige intelligentie waarin LLM's worden getraind om oorspronkelijke inhoud te genereren op basis van invoer in natuurlijke taal. Met behulp van de azure_ai extensie kunt u de mogelijkheden van AI gebruiken om query's in natuurlijke taal rechtstreeks vanuit de database te verwerken.

In dit artikel wordt beschreven hoe u uitgebreide AI-mogelijkheden toevoegt aan een flexibele Azure Database for PostgreSQL-serverinstantie met behulp van de azure_ai extensie. U ziet hoe u zowel Azure OpenAI als de Azure AI Language-service in uw database kunt integreren met behulp van de extensie.

Vereisten

Verbinding maken met de database met behulp van psql in Azure Cloud Shell

Open Azure Cloud Shell in een webbrowser. Selecteer Bash als de omgeving. Als u hierom wordt gevraagd, selecteert u het abonnement dat u hebt gebruikt voor uw Azure Database for PostgreSQL-database en selecteert u Vervolgens Opslag maken.

Ga als volgende te werk om de details van de databaseverbinding op te halen:

  1. Ga in Azure Portal naar uw flexibele Server-exemplaar van Azure Database for PostgreSQL.

  2. Selecteer Verbinding maken in het linkermenu onder Instellingen. Kopieer het blok Verbindingsgegevens .

  3. Plak de gekopieerde declaratieregels voor omgevingsvariabelen in de Azure Cloud Shell-terminal. Vervang het {your-password} token door het wachtwoord dat u hebt ingesteld toen u de database maakte.

    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. Maak verbinding met uw database met behulp van het opdrachtregelprogramma psql. Voer de volgende opdracht in bij de prompt:

    psql
    

De azure_ai-extensie installeren

U kunt de azure_ai extensie gebruiken om Azure OpenAI en Azure Cognitive Services te integreren in uw database. Zie Vector embeddings genereren met Azure OpenAI in Azure Database for PostgreSQL voor meer informatie.

De extensie inschakelen in uw database:

  1. Voeg de extensie toe aan uw acceptatielijst, zoals wordt beschreven in Extensies toestaan.

  2. Installeer de extensie in de database waarin u de azure_ai extensie wilt gebruiken, zoals beschreven in Extensies maken.

De objecten in de extensie azure_ai controleren

Het controleren van de objecten die de azure_ai extensie bevat, kan een beter begrip bieden van de mogelijkheden die de extensie biedt. U kunt de \dx metaopdracht vanaf de psql opdrachtprompt gebruiken om de objecten in de extensie weer te geven:

\dx+ azure_ai

In de uitvoer van de metaopdracht ziet u dat de extensie drie schema's, meerdere door de azure_ai gebruiker gedefinieerde functies (UDF's) en verschillende samengestelde typen in de database maakt. In de volgende tabel worden de schema's beschreven die door de extensie worden toegevoegd:

Schema Beschrijving
azure_ai Biedt het principal-schema waarin de configuratietabel en UDF's zich bevinden voor interactie met de tabel.
azure_openai Bevat de UDF's waarmee een Azure OpenAI-eindpunt kan worden aangeroepen.
azure_cognitive Biedt UDF's en samengestelde typen die betrekking hebben op de integratie van de database met Azure Cognitive Services.

De functies en typen zijn allemaal gekoppeld aan een van de schema's. Gebruik de azure_ai meta-opdracht om de functies te controleren die in het \df schema zijn gedefinieerd. Geef het schema op waarvan de functies moeten worden weergegeven. Met de \x auto opdrachten vóór de \df opdracht wordt de uitgevouwen weergave automatisch ingeschakeld en uitgeschakeld, zodat de uitvoer van de opdracht gemakkelijker te bekijken is in Azure Cloud Shell.

\x auto
\df+ azure_ai.*

Gebruik de azure_ai.set_setting() functie om het eindpunt en de kritieke waarden voor Azure AI-services in te stellen. Het accepteert een sleutel en de waarde om deze toe te wijzen. De azure_ai.get_setting() functie biedt een manier om de waarden op te halen die u met de set_setting() functie hebt ingesteld. Hiermee wordt de sleutel geaccepteerd van de instelling die u wilt weergeven. Voor beide methoden moet de sleutel een van de volgende zijn:

sleutel Beschrijving
azure_openai.endpoint Een ondersteund Azure OpenAI-eindpunt (bijvoorbeeld https://example.openai.azure.com).
azure_openai.subscription_key Een abonnementssleutel voor een Azure OpenAI-resource.
azure_cognitive.endpoint Een ondersteund Cognitive Services-eindpunt (bijvoorbeeld https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Een abonnementssleutel voor een Cognitive Services-resource.

Belangrijk

Omdat de verbindingsgegevens voor Azure AI-services, inclusief API-sleutels, worden opgeslagen in een configuratietabel in de database, definieert de azure_ai extensie een rol die wordt aangeroepen azure_ai_settings_manager om ervoor te zorgen dat deze informatie wordt beveiligd en alleen toegankelijk is voor gebruikers die die rol hebben. Met deze rol kunt u instellingen lezen en schrijven die betrekking hebben op de extensie.

Alleen supergebruikers en leden van de azure_ai_settings_manager rol kunnen de azure_ai.get_setting() en azure_ai.set_setting() functies aanroepen. In Azure Database for PostgreSQL hebben alle beheerders de azure_ai_settings_manager rol.

Vector-insluitingen genereren met Azure OpenAI

Het azure_ai schema van azure_openai de extensie maakt het gebruik van Azure OpenAI mogelijk voor het maken van vector-insluitingen voor tekstwaarden. Met behulp van dit schema kunt u insluitingen genereren met Azure OpenAI rechtstreeks vanuit de database om vectorweergaven van invoertekst te maken. Deze weergaven kunnen vervolgens worden gebruikt in vector gelijkeniszoekopdrachten en door machine learning-modellen worden gebruikt.

Insluitingen zijn een techniek voor het gebruik van machine learning-modellen om te evalueren hoe nauw gerelateerde informatie is. Met deze techniek kunnen relaties en overeenkomsten tussen gegevens efficiënt worden geïdentificeerd, zodat algoritmen patronen kunnen identificeren en nauwkeurige voorspellingen kunnen doen.

Het Azure OpenAI-eindpunt en -sleutel instellen

Voordat u de azure_openai functies gebruikt, configureert u de extensie met uw Azure OpenAI-service-eindpunt en -sleutel:

  1. Ga in Azure Portal naar uw Azure OpenAI-resource. Selecteer sleutels en eindpunt in het linkermenu onder Resourcebeheer.

  2. Kopieer uw eindpunt en toegangssleutel. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder de service te onderbreken.

  3. Vervang in de volgende opdracht de {endpoint} en {api-key} tokens door waarden die u hebt opgehaald uit Azure Portal. Voer vervolgens de opdrachten uit vanaf de psql opdrachtprompt om uw waarden toe te voegen aan de configuratietabel.

    SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');
    
  4. Controleer de instellingen die zijn geschreven in de configuratietabel:

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

De azure_ai extensie is nu verbonden met uw Azure OpenAI-account en kan vector-insluitingen genereren.

De database vullen met voorbeeldgegevens

In dit artikel wordt een kleine subset van de BillSum-gegevensset gebruikt om voorbeeldtekstgegevens te bieden voor het genereren van vectoren. Deze gegevensset bevat een lijst met Amerikaanse congreswetten en staatwetten van Californië. U kunt het bill_sum_data.csv bestand met deze gegevens downloaden uit de GitHub-opslagplaats voor Azure-voorbeelden.

Als u de voorbeeldgegevens in de database wilt hosten, maakt u een tabel met de naam 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
);

Door de PostgreSQL COPY-opdracht vanuit de psql opdrachtprompt te gebruiken, laadt u de voorbeeldgegevens uit het CSV-bestand in de bill_summaries tabel. Geef op dat de eerste rij van het CSV-bestand een koprij is.

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

Vectorondersteuning inschakelen

U kunt de azure_ai extensie gebruiken om insluitingen te genereren voor invoertekst. Als u wilt dat de gegenereerde vectoren naast de rest van uw gegevens in de database worden opgeslagen, moet u de pgvector extensie installeren. Volg de richtlijnen in de documentatie over het inschakelen van vectorondersteuning in uw database.

Met vectorondersteuning toegevoegd aan uw database, voegt u een nieuwe kolom toe aan de bill_summaries tabel met behulp van het vector gegevenstype voor het opslaan van insluitingen in de tabel. Het text-embedding-ada-002 model produceert vectoren met 1536 dimensies, dus u moet opgeven 1536 als de vectorgrootte.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Vectoren genereren en opslaan

De bill_summaries tabel is nu klaar om insluitingen op te slaan. Met behulp van de azure_openai.create_embeddings() functie maakt u vectoren voor het bill_text veld en voegt u deze in de zojuist gemaakte bill_vector kolom in de bill_summaries tabel in.

Voordat u de create_embeddings() functie gebruikt, voert u de volgende opdracht uit om deze te controleren en de vereiste argumenten te controleren:

\df+ azure_openai.*

De Argument data types eigenschap in de uitvoer van de \df+ azure_openai.* opdracht toont de lijst met argumenten die door de functie worden verwacht:

Argumentatie Soort Standaard Beschrijving
deployment_name text De naam van de implementatie in de Azure AI Foundry-portal die het text-embeddings-ada-002 model bevat.
input text Invoertekst die wordt gebruikt voor het maken van insluitingen.
timeout_ms integer 3600000 Time-out in milliseconden, waarna de bewerking wordt gestopt.
throw_on_error boolean true Vlag die aangeeft of de functie bij een fout een uitzondering moet genereren die resulteert in een terugdraaiactie van de teruglooptransacties.

Het eerste argument is de deployment_name waarde die is toegewezen toen uw insluitmodel werd geïmplementeerd in uw Azure OpenAI-account. Ga als volgt te werk om deze waarde op te halen:

  1. Ga naar uw Azure OpenAI-resource in Azure Portal.

  2. Selecteer in het linkermenu onder Resourcebeheermodelimplementaties om de Azure AI Foundry-portal te openen.

  3. Selecteer Implementaties in de Azure AI Foundry-portal. Kopieer in het deelvenster Implementaties de waarde van de implementatienaam die is gekoppeld aan de text-embedding-ada-002 modelimplementatie.

Schermopname van het insluiten van implementaties voor het integreren van AI.

Voer met deze informatie een query uit om elke record in de bill_summaries tabel bij te werken. Voeg de gegenereerde vectorinsluitingen voor het bill_text veld in de bill_vector kolom in met behulp van de azure_openai.create_embeddings() functie. Vervang door {your-deployment-name} de waarde van de implementatienaam die u hebt gekopieerd uit het deelvenster Implementaties van de Azure AI Foundry-portal. Voer vervolgens de volgende opdracht uit:

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

Voer de volgende query uit om de insluiting weer te geven die is gegenereerd voor de eerste record in de tabel. U kunt eerst \x uitvoeren als de uitvoer moeilijk te lezen is.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Elke embedding is een vector van decimale getallen. De afstand tussen twee insluitingen in de vectorruimte wordt gecorreleerd met semantische overeenkomsten tussen twee invoerwaarden in de oorspronkelijke indeling.

Vector-gelijkenis is een methode voor het meten van hoe vergelijkbare twee items zijn door ze als vectoren weer te geven. Vectoren zijn een reeks getallen. Ze worden vaak gebruikt om zoekopdrachten uit te voeren via LLMs.

Vector-overeenkomsten worden meestal berekend via metrische gegevens over afstand, zoals:

  • Euclidische afstand: meet de rechte lijnafstand tussen twee vectoren in de n-dimensionale ruimte.
  • Cosinus-gelijkenis: meet de cosinus van de hoek tussen twee vectoren.

Efficiënter zoeken via het vector veld mogelijk maken door een index bill_summaries op te maken via cosinusafstand en Hiërarchische Navigable Small World (HNSW). Met HNSW kunt pgvector u de meest recente algoritmen op basis van grafieken gebruiken om query's van dichtstbijzijnde buren bij benadering te gebruiken.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Nu alles klaar is, bent u klaar om een cosine similarity-zoekopdracht uit te voeren in de database.

In de volgende query worden de insluitingen gegenereerd voor een invoervraag en vervolgens gecast naar een vectormatrix (::vector). Met de vectormatrix kan de vraag worden vergeleken met de vectoren die in de bill_summaries tabel zijn opgeslagen.

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;

De query maakt gebruik van de <=>vectoroperator. Deze operator vertegenwoordigt de cosinusafstandsoperator die wordt gebruikt om de afstand tussen twee vectoren in een multidimensionale ruimte te berekenen.

Azure Cognitive Services integreren

De Integraties van Azure AI-services die zijn opgenomen in het azure_cognitive schema van de azure_ai extensie bieden een uitgebreide set AI-taalfuncties die u rechtstreeks vanuit de database kunt openen. De functies omvatten sentimentanalyse, taaldetectie, sleuteltermextractie, entiteitsherkenning en samenvatting van tekst. Toegang tot deze mogelijkheden is ingeschakeld via de Azure AI Language-service.

Zie Azure Database for PostgreSQL integreren met Azure Cognitive Services om de volledige Azure AI-mogelijkheden te bekijken waartoe u toegang hebt via de extensie.

Het azure AI Language-service-eindpunt en -sleutel instellen

Net als bij de functies moet u het eindpunt en een sleutel voor uw Azure AI Language-serviceresource opgeven om met de azure_openai-extensie succesvol oproepen naar Azure AI-services te doen.

  1. Ga in Azure Portal naar uw Taalserviceresource.

  2. Selecteer sleutels en eindpunt in het linkermenu onder Resourcebeheer.

  3. Kopieer uw eindpunt en toegangssleutel. U kunt KEY1 of KEY2 gebruiken.

  4. Voer in de psql opdrachtprompt de volgende opdrachten uit om uw waarden toe te voegen aan de configuratietabel. Vervang de {endpoint} en {api-key} tokens door de waarden die u hebt opgehaald uit Azure Portal.

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

Facturen samenvatten

Als u enkele van de mogelijkheden van de azure_cognitive functies van de azure_ai extensie wilt demonstreren, kunt u een samenvatting van elke factuur genereren. Het azure_cognitive schema biedt twee functies voor het samenvatten van tekst:

  • summarize_abstractive: Abstractieve samenvatting produceert een samenvatting die de belangrijkste concepten van invoertekst vastlegt, maar mogelijk geen identieke woorden gebruikt.
  • summarize_extractive: Extraherende samenvatting stelt een samenvatting samen door kritieke zinnen uit de invoertekst te extraheren.

Als u de mogelijkheid van de Azure AI Language-service wilt gebruiken om nieuwe, oorspronkelijke inhoud te genereren, gebruikt u de summarize_abstractive functie om een samenvatting van tekstinvoer te maken. Gebruik de \df meta-opdracht opnieuw van psql deze keer om specifiek naar de azure_cognitive.summarize_abstractive functie te kijken:

\df azure_cognitive.summarize_abstractive

De Argument data types eigenschap in de uitvoer van de \df azure_cognitive.summarize_abstractive opdracht toont de lijst met argumenten die door de functie worden verwacht:

Argumentatie Soort Standaard Beschrijving
text text Voer tekst in die u wilt samenvatten.
language text Tweeletterige ISO 639-1 representatie van de taal waarin de invoertekst is geschreven. Raadpleeg taalondersteuning voor taalfuncties voor toegestane waarden.
timeout_ms integer 3600000 Time-out in milliseconden, waarna de bewerking wordt gestopt.
throw_on_error boolean true Vlag die aangeeft of de functie bij een fout een uitzondering moet genereren die resulteert in een terugdraaiactie van de teruglooptransacties.
sentence_count integer 3 Maximum aantal zinnen dat moet worden opgenomen in de gegenereerde samenvatting.
disable_service_logs boolean false Instelling waarmee taalservicelogboeken worden uitgeschakeld. De Taalservice registreert uw invoertekst gedurende 48 uur om problemen op te lossen. Als u deze eigenschap instelt om invoerlogboekregistratie uit te true schakelen, kan dit de mogelijkheid beperken om problemen te onderzoeken die zich voordoen. Zie de nalevings- en privacyopmerkingen van Cognitive Services en de principes van Microsoft Responsible AI voor meer informatie.

Voor de summarize_abstractive functie zijn de volgende argumenten vereist: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

De volgende query voor de bill_summaries tabel maakt gebruik van de summarize_abstractive functie om een nieuwe samenvatting van één zin te genereren voor de tekst van een wetsvoorstel. Hiermee kunt u de kracht van generatieve AI rechtstreeks opnemen in uw query's.

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

U kunt de functie ook gebruiken om gegevens naar uw databasetabellen te schrijven. Wijzig de bill_summaries tabel om een nieuwe kolom toe te voegen voor het opslaan van de samenvattingen van één zin in de database:

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Werk vervolgens de tabel bij met de samenvattingen. De summarize_abstractive functie retourneert een matrix met tekst (text[]). De array_to_string functie converteert de retourwaarde naar de tekenreeksweergave. In de volgende query is het throw_on_error argument ingesteld op false. Met deze instelling kan het samenvattingsproces worden voortgezet als er een fout optreedt.

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 de uitvoer ziet u mogelijk een waarschuwing over een ongeldig document waarvoor geen geschikte samenvatting kan worden gegenereerd. Deze waarschuwing is het gevolg van het instellen van throw_on_error op false in de voorgaande query. Als u deze vlag op de standaardwaarde truehebt achtergelaten, mislukt de query en worden er geen samenvattingen naar de database geschreven. Voer deze opdracht uit om de record weer te geven die de waarschuwing heeft gegeven:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Vervolgens kunt u een query uitvoeren op de bill_summaries tabel om de nieuwe samenvattingen van één zin weer te geven die de azure_ai extensie genereert voor de andere records in de tabel:

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusie

Gefeliciteerd! U hebt zojuist geleerd hoe u de azure_ai extensie kunt gebruiken om grote taalmodellen en generatieve AI-mogelijkheden in uw database te integreren.