Delen via


Intelligente toepassingen met Azure SQL Database

Van toepassing op: Azure SQL Database

Dit artikel bevat een overzicht van het gebruik van AI-opties (kunstmatige intelligentie), zoals OpenAI en vectoren, voor het bouwen van intelligente toepassingen met Azure SQL Database.

Overzicht

Met grote taalmodellen (LLM's) kunnen ontwikkelaars AI-toepassingen maken met een vertrouwde gebruikerservaring.

Het gebruik van LLM's in toepassingen biedt meer waarde en een verbeterde gebruikerservaring wanneer de modellen op het juiste moment toegang hebben tot de juiste gegevens vanuit de database van uw toepassing. Dit proces staat bekend als Rag (Retrieval Augmented Generation) en Azure SQL Database heeft veel functies die dit nieuwe patroon ondersteunen, waardoor het een geweldige database is om intelligente toepassingen te bouwen.

De volgende koppelingen bevatten voorbeeldcode van verschillende Azure SQL Database-opties voor het bouwen van intelligente toepassingen:

AI-optie Beschrijving
Azure OpenAI Genereer insluitingen voor RAG en integreer met elk model dat wordt ondersteund door Azure OpenAI.
Vectoren Meer informatie over het opslaan en opvragen van vectoren in Azure SQL Database.
Azure AI Search Gebruik Azure SQL Database samen met Azure AI Search om LLM op uw gegevens te trainen.
Intelligente toepassingen Leer hoe u een end-to-end-oplossing maakt met behulp van een gemeenschappelijk patroon dat in elk scenario kan worden gerepliceerd.

Belangrijke concepten

Deze sectie bevat belangrijke concepten die essentieel zijn voor het implementeren van RAG met Azure SQL Database en Azure OpenAI.

Augmented Generation ophalen (RAG)

RAG is een techniek die het vermogen van de LLM verbetert om relevante en informatieve antwoorden te produceren door extra gegevens uit externe bronnen op te halen. Rag kan bijvoorbeeld query's uitvoeren op artikelen of documenten die domeinspecifieke kennis bevatten met betrekking tot de vraag of prompt van de gebruiker. De LLM kan deze opgehaalde gegevens vervolgens gebruiken als verwijzing bij het genereren van het antwoord. Een eenvoudig RAG-patroon met behulp van Azure SQL Database kan bijvoorbeeld zijn:

  1. Gegevens invoegen in een Azure SQL Database-tabel.
  2. Koppel Azure SQL Database aan Azure AI Search.
  3. Maak een Azure OpenAI GPT4-model en verbind het met Azure AI Search.
  4. Chat en stel vragen over uw gegevens met behulp van het getrainde Azure OpenAI-model vanuit uw toepassing en vanuit Azure SQL Database.

Het RAG-patroon, met prompt engineering, is bedoeld om de responskwaliteit te verbeteren door meer contextuele informatie aan het model te bieden. RAG maakt het mogelijk om een bredere knowledgebase toe te passen door relevante externe bronnen in het generatieproces op te nemen, wat resulteert in uitgebreidere en geïnformeerde antwoorden. Zie Grounding LLMs - Microsoft Community Hub voor meer informatie over het grounden van LLM's.

Prompts en prompt engineering

Een prompt verwijst naar specifieke tekst of informatie die dient als instructie voor een LLM of als contextuele gegevens waarop de LLM kan bouwen. Een prompt kan verschillende vormen aannemen, zoals een vraag, een instructie of zelfs een codefragment.

Hier volgt een lijst met prompts die kunnen worden gebruikt voor het genereren van een antwoord van een LLM:

  • Instructies: instructies geven aan de LLM
  • Primaire inhoud: geeft informatie aan de LLM voor verwerking
  • Voorbeelden: het model aan een bepaalde taak of een bepaald proces aanpassen
  • Aanwijzingen: de uitvoer van de LLM in de juiste richting sturen
  • Ondersteunende inhoud: vertegenwoordigt aanvullende informatie die de LLM kan gebruiken om uitvoer te genereren

Het proces voor het maken van goede prompts voor een scenario wordt prompt engineering genoemd. Zie De Azure OpenAI-service voor meer informatie over prompts en aanbevolen procedures voor prompt-engineering.

Tokens

Tokens zijn kleine stukken tekst die worden gegenereerd door de invoertekst op te splitsen in kleinere segmenten. Deze segmenten kunnen woorden of groepen tekens zijn, variërend van één teken tot een heel woord. Het woord hamburger wordt bijvoorbeeld onderverdeeld in tokens zoals ham, buren ger hoewel een kort en gemeenschappelijk woord als pear één token wordt beschouwd.

In Azure OpenAI wordt invoertekst die aan de API wordt verstrekt, omgezet in tokens (tokenized). Het aantal tokens dat in elke API-aanvraag wordt verwerkt, is afhankelijk van factoren zoals de lengte van de invoer-, uitvoer- en aanvraagparameters. Het aantal tokens dat wordt verwerkt, heeft ook invloed op de reactietijd en doorvoer van de modellen. Er zijn limieten voor het aantal tokens dat elk model kan aannemen in één aanvraag/reactie van Azure OpenAI. Zie quota en limieten voor De Azure OpenAI-service voor meer informatie.

Vectoren

Vectoren zijn geordende matrices van getallen (meestal floats) die informatie over sommige gegevens kunnen vertegenwoordigen. Een afbeelding kan bijvoorbeeld worden weergegeven als een vector van pixelwaarden, of een tekenreeks met tekst kan worden weergegeven als een vector- of ASCII-waarden. Het proces om gegevens om te zetten in een vector wordt vectorisatie genoemd.

Insluitingen

Insluitingen zijn vectoren die belangrijke functies van gegevens vertegenwoordigen. Insluitingen worden vaak geleerd met behulp van een Deep Learning-model en machine learning- en AI-modellen gebruiken ze als functies. Insluitingen kunnen ook semantische overeenkomsten tussen vergelijkbare concepten vastleggen. Bij het genereren van een insluiting voor de woorden person en humanverwachten we bijvoorbeeld dat hun insluitingen (vectorweergave) vergelijkbaar zijn in waarde, omdat de woorden ook semantisch vergelijkbaar zijn.

Azure OpenAI bevat modellen voor het maken van insluitingen op basis van tekstgegevens. De service breekt tekst op in tokens en genereert insluitingen met behulp van modellen die vooraf zijn getraind door OpenAI. Zie Insluitingen maken met Azure OpenAI voor meer informatie.

Vectorzoekopdrachten verwijzen naar het proces van het vinden van alle vectoren in een gegevensset die semantisch vergelijkbaar zijn met een specifieke queryvector. Daarom zoekt een queryvector voor het woord human in de hele woordenlijst naar semantisch vergelijkbare woorden en moet het woord person als een nauwe overeenkomst worden gevonden. Deze nabijheid, of afstand, wordt gemeten met behulp van een metrische overeenkomst, zoals cosinus-gelijkenis. De dichtere vectoren zijn vergelijkbaar, hoe kleiner is de afstand tussen deze vectoren.

Overweeg een scenario waarin u een query uitvoert op miljoenen documenten om de meest vergelijkbare documenten in uw gegevens te vinden. U kunt insluitingen maken voor uw gegevens en documenten opvragen met behulp van Azure OpenAI. Vervolgens kunt u een vectorzoekopdracht uitvoeren om de meest vergelijkbare documenten uit uw gegevensset te vinden. Het uitvoeren van een vectorzoekopdracht in een paar voorbeelden is echter triviaal. Het uitvoeren van dezelfde zoekopdracht op duizenden of miljoenen gegevenspunten wordt lastig. Er zijn ook compromissen tussen uitgebreide zoek- en dichtstbijzijnde buren (ANN) zoekmethoden, waaronder latentie, doorvoer, nauwkeurigheid en kosten, die allemaal afhankelijk zijn van de vereisten van uw toepassing.

Omdat azure SQL Database-insluitingen efficiënt kunnen worden opgeslagen en opgevraagd met behulp van columnstore-indexondersteuning, waardoor exact dichtstbijzijnde buren zoeken met geweldige prestaties mogelijk is, hoeft u niet te beslissen tussen nauwkeurigheid en snelheid: u kunt beide hebben. Het opslaan van vector-insluitingen naast de gegevens in een geïntegreerde oplossing minimaliseert de noodzaak om gegevenssynchronisatie te beheren en versnelt uw time-to-market voor de ontwikkeling van AI-toepassingen.

Azure OpenAI

Insluiten is het proces van het weergeven van de echte wereld als gegevens. Tekst, afbeeldingen of geluiden kunnen worden geconverteerd naar insluitingen. Azure OpenAI-modellen kunnen echte informatie transformeren in insluitingen. De modellen zijn beschikbaar als REST-eindpunten en kunnen dus eenvoudig worden gebruikt vanuit Azure SQL Database met behulp van de door het sp_invoke_external_rest_endpoint systeem opgeslagen procedure:

DECLARE @retval INT, @response NVARCHAR(MAX);
DECLARE @payload NVARCHAR(MAX);

SET @payload = JSON_OBJECT('input': @text);

EXEC @retval = sp_invoke_external_rest_endpoint @url = 'https://<openai-url>/openai/deployments/<model-name>/embeddings?api-version=2023-03-15-preview',
    @method = 'POST',
    @credential = [https://<openai-url>/openai/deployments/<model-name>],
    @payload = @payload,
    @response = @response OUTPUT;

SELECT CAST([key] AS INT) AS [vector_value_id],
    CAST([value] AS FLOAT) AS [vector_value]
FROM OPENJSON(JSON_QUERY(@response, '$.result.data[0].embedding'));

Het gebruik van een aanroep naar een REST-service om insluitingen te krijgen, is slechts een van de integratieopties die u hebt bij het werken met SQL Database en OpenAI. U kunt alle beschikbare modellen toegang geven tot gegevens die zijn opgeslagen in Azure SQL Database om oplossingen te maken waar uw gebruikers met de gegevens kunnen communiceren, zoals in het volgende voorbeeld.

Screenshot of an AI bot answering the question using data stored in Azure SQL Database.

Zie de volgende artikelen voor meer voorbeelden over het gebruik van SQL Database en OpenAI:

Vectoren

Hoewel Azure SQL Database geen systeemeigen vectortype heeft, is een vector niets meer dan een geordende tuple en relationele databases zijn geweldig bij het beheren van tuples. U kunt een tuple beschouwen als de formele term voor een rij in een tabel.

Azure SQL Database biedt ook ondersteuning voor columnstore-indexen en batchmodusuitvoering. Een op vector gebaseerde benadering wordt gebruikt voor batchmodusverwerking, wat betekent dat elke kolom in een batch een eigen geheugenlocatie heeft waar deze als vector wordt opgeslagen. Dit zorgt voor een snellere en efficiëntere verwerking van gegevens in batches.

Hier volgt een voorbeeld van hoe een vector kan worden opgeslagen in SQL Database:

CREATE TABLE [dbo].[wikipedia_articles_embeddings_titles_vector]
(
    [article_id] [int] NOT NULL,
    [vector_value_id] [int] NOT NULL,
    [vector_value] [float] NOT NULL
)
GO

CREATE CLUSTERED COLUMNSTORE INDEX ixc
    ON dbo.wikipedia_articles_embeddings_titles_vector
    ORDER (article_id);
GO

Zie Vector-overeenkomsten zoeken met Azure SQL Database en OpenAI voor een voorbeeld dat gebruikmaakt van een algemene subset van Wikipedia-artikelen met insluitingen die al zijn gegenereerd met OpenAI.

Een andere optie voor het gebruik van Vector Search in Azure SQL Database is integratie met Azure AI met behulp van de geïntegreerde vectorisatiemogelijkheden: Vector Search met Azure SQL Database en Azure AI Search

RAG-patronen implementeren met Azure SQL Database en Azure AI Search. U kunt ondersteunde chatmodellen uitvoeren op gegevens die zijn opgeslagen in Azure SQL Database, zonder dat u modellen hoeft te trainen of af te stemmen, dankzij de integratie van Azure AI Search met Azure OpenAI en Azure SQL Database. Door modellen op uw gegevens uit te voeren, kunt u chatten en analyseren, uw gegevens met een grotere nauwkeurigheid en snelheid.

Intelligente toepassingen

Azure SQL Database kan worden gebruikt om intelligente toepassingen te bouwen die AI-functies bevatten, zoals aanbevelingen en RAG (Retrieval Augmented Generation), zoals in het volgende diagram wordt gedemonstreert:

Diagram of different AI features to build intelligent applications with Azure SQL Database.

Voor een end-to-end-voorbeeld om een aanbeveelaar te bouwen met behulp van sessieabstrah als voorbeeldgegevensset, raadpleegt u Hoe ik in 1 uur een sessieaanbeveelaar heb gebouwd met behulp van Open AI.

LangChain-integratie

LangChain is een bekend framework voor het ontwikkelen van toepassingen die mogelijk worden gemaakt door taalmodellen.

Zie Uw eigen DB Copilot bouwen voor Azure SQL met Azure OpenAI GPT-4 voor een voorbeeld dat laat zien hoe LangChain kan worden gebruikt om een chatbot te maken op uw eigen gegevens.