OpenAI integreren in een app

Voltooid

Azure OpenAI biedt zowel taalspecifieke SDK's als een REST API die ontwikkelaars kunnen gebruiken om AI-functionaliteit toe te voegen aan hun toepassingen. Generatieve AI-mogelijkheden in Azure OpenAI worden geleverd via modellen. De modellen die beschikbaar zijn in de Azure OpenAI-service horen bij verschillende families, elk met hun eigen focus. Als u een van deze modellen wilt gebruiken, moet u implementeren via de Azure OpenAI-service.

Nadat u een Azure OpenAI-resource hebt gemaakt en een model hebt geïmplementeerd, kunt u uw app configureren.

Beschikbare eindpunten

Azure OpenAI kan worden geopend via een REST API of een SDK die beschikbaar is voor Python, C#, JavaScript en meer. De eindpunten die beschikbaar zijn voor interactie met een geïmplementeerd model, worden anders gebruikt en bepaalde eindpunten kunnen alleen bepaalde modellen gebruiken. De beschikbare eindpunten zijn:

  • Voltooiing : het model neemt een invoerprompt en genereert een of meer voorspelde voltooiingen. U ziet deze speeltuin in de studio, maar wordt niet uitgebreid behandeld in deze module.
  • ChatCompletion : het model neemt invoer in de vorm van een chatgesprek (waarbij rollen worden opgegeven met het bericht dat ze verzenden) en de volgende voltooiing van de chat wordt gegenereerd.
  • Insluitingen : het model neemt invoer en retourneert een vectorweergave van die invoer.

De invoer voor ChatCompletion is bijvoorbeeld een gesprek met duidelijk gedefinieerde rollen voor elk bericht:

{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}

Wanneer u het AI-model een echt gesprek geeft, kan het een beter antwoord genereren met een nauwkeurigere toon, formulering en context. Met ChatCompletion het eindpunt kan het model een realistischer gesprek voeren door de geschiedenis van de chat te verzenden met het volgende gebruikersbericht.

ChatCompletion maakt ook niet-chatscenario's mogelijk, zoals samenvatting of extractie van entiteiten. Dit kan worden bereikt door een kort gesprek te geven, de systeeminformatie en de gewenste informatie op te geven, samen met de gebruikersinvoer. Als u bijvoorbeeld een functiebeschrijving wilt genereren, geeft u ChatCompletion iets op zoals de volgende gespreksinvoer.

{"role": "system", "content": "You are an assistant designed to write intriguing job descriptions."},
{"role": "user", "content": "Write a job description for the following job title: 'Business Intelligence Analyst'. It should include responsibilities, required qualifications, and highlight benefits like time off and flexible hours."}

Notitie

Completion is beschikbaar voor eerdere gpt-3 generatiemodellen, terwijl ChatCompletion dit de enige ondersteunde optie is voor gpt-4 modellen en het voorkeurseindpunt is wanneer u het gpt-35-turbo model gebruikt.

De Azure OpenAI REST API gebruiken

Azure OpenAI biedt een REST API voor interactie en het genereren van antwoorden die ontwikkelaars kunnen gebruiken om AI-functionaliteit toe te voegen aan hun toepassingen. In deze les wordt het voorbeeldgebruik, de invoer en uitvoer van de API behandeld.

Voor elke aanroep naar de REST API hebt u het eindpunt en een sleutel uit uw Azure OpenAI-resource nodig en de naam die u hebt opgegeven voor uw geïmplementeerde model. In de volgende voorbeelden worden de volgende tijdelijke aanduidingen gebruikt:

Naam van tijdelijke aanduiding Weergegeven als
YOUR_ENDPOINT_NAME Dit basiseindpunt vindt u in de sectie Sleutels en eindpunten in Azure Portal. Dit is het basiseindpunt van uw resource, zoals https://sample.openai.azure.com/.
YOUR_API_KEY Sleutels vindt u in de sectie Sleutels en eindpunt in Azure Portal. U kunt een van beide sleutels voor uw resource gebruiken.
YOUR_DEPLOYMENT_NAME Deze implementatienaam is de naam die wordt opgegeven bij het implementeren van uw model in Azure AI Foundry.

Chatvoltooiingen

Zodra u een model in uw Azure OpenAI-resource hebt geïmplementeerd, kunt u een prompt naar de service verzenden met behulp van een POST aanvraag.

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-03-15-preview \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}]}'

Het antwoord van de API is vergelijkbaar met de volgende JSON:

{
    "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9",
    "object": "chat.completion",
    "created": 1679001781,
    "model": "gpt-35-turbo",
    "usage": {
        "prompt_tokens": 95,
        "completion_tokens": 84,
        "total_tokens": 179
    },
    "choices": [
        {
            "message":
                {
                    "role": "assistant",
                    "content": "Yes, other Azure AI Services also support translation. Azure AI Services offer translation between multiple languages for text, documents, or custom translation through Azure AI Services Translator."
                },
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

MET REST-eindpunten kunt u andere optionele invoerparameters opgeven, zoals temperatureen max_tokens meer. Als u een van deze parameters in uw aanvraag wilt opnemen, voegt u deze toe aan de invoergegevens met de aanvraag.

Insluitingen

Insluitingen zijn handig voor specifieke indelingen die eenvoudig worden gebruikt door machine learning-modellen. Een aanvraag voor het embeddings eindpunt om insluitingen te genereren op basis van de invoertekstPOST.

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/embeddings?api-version=2022-12-01 \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d "{\"input\": \"The food was delicious and the waiter...\"}"

Wanneer u insluitingen genereert, moet u een model in Azure OpenAI gebruiken dat is bedoeld voor insluitingen. Deze modellen beginnen met text-embedding of text-similarity, afhankelijk van de functionaliteit die u zoekt.

Het antwoord van de API is vergelijkbaar met de volgende JSON:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0172990688066482523,
        -0.0291879814639389515,
        ....
        0.0134544348834753042,
      ],
      "index": 0
    }
  ],
  "model": "text-embedding-ada:002"
}

Azure OpenAI gebruiken met SDK's

Naast REST API's hebben gebruikers ook toegang tot Azure OpenAI-modellen via C# en Python SDK's. Dezelfde functionaliteit is beschikbaar via zowel REST als deze SDK's.

Voor beide SDK's die in deze les worden behandeld, hebt u het eindpunt en een sleutel uit uw Azure OpenAI-resource nodig en de naam die u hebt opgegeven voor uw geïmplementeerde model. In de volgende codefragmenten worden de volgende tijdelijke aanduidingen gebruikt:

Naam van tijdelijke aanduiding Weergegeven als
YOUR_ENDPOINT_NAME Dit basiseindpunt vindt u in de sectie Sleutels en eindpunten in Azure Portal. Dit is het basiseindpunt van uw resource, zoals https://sample.openai.azure.com/.
YOUR_API_KEY Sleutels vindt u in de sectie Sleutels en eindpunt in Azure Portal. U kunt een van beide sleutels voor uw resource gebruiken.
YOUR_DEPLOYMENT_NAME Deze implementatienaam is de naam die wordt opgegeven bij het implementeren van uw model.

Bibliotheken installeren

Installeer eerst de clientbibliotheek voor uw voorkeurstaal. De C#SDK is een .NET-aanpassing van de REST API's en speciaal gebouwd voor Azure OpenAI, maar kan worden gebruikt om verbinding te maken met Azure OpenAI-resources of niet-Azure OpenAI-eindpunten. De Python SDK wordt gebouwd en onderhouden door OpenAI.

dotnet add package Azure.AI.OpenAI --version <insert preferred version>
pip install openai

App configureren voor toegang tot Azure OpenAI-resource

De configuratie voor elke taal varieert enigszins, maar beide vereisen dat dezelfde parameters worden ingesteld. De benodigde parameters zijn endpoint, keyen deployment name.

Voeg de bibliotheek toe aan uw app en stel de vereiste parameters voor uw client in.

// Add Azure OpenAI packages
using Azure.AI.OpenAI;
using OpenAI.Chat;

// Define parameters and initialize the client
string endpoint = "<YOUR_ENDPOINT_NAME>";
string key = "<YOUR_API_KEY>";
string deploymentName = "<YOUR_DEPLOYMENT_NAME>"; 

AzureOpenAIClient azureClient = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
# Add OpenAI library
from openai import AzureOpenAI

deployment_name = '<YOUR_DEPLOYMENT_NAME>' 

# Initialize the Azure OpenAI client
client = AzureOpenAI(
        azure_endpoint = '<YOUR_ENDPOINT_NAME>', 
        api_key='<YOUR_API_KEY>',  
        api_version="20xx-xx-xx" #  Target version of the API, such as 2024-02-15-preview
        )

Azure OpenAI-resource aanroepen

Nadat u de verbinding met Azure OpenAI hebt geconfigureerd, stuurt u uw prompt naar het model.

// Get chat completion
ChatCompletion completion = chatClient.CompleteChat(
    [
        new SystemChatMessage(systemMessage),
        new UserChatMessage(userMessage),
    ]);

// Print the response
Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}");
response = client.chat.completions.create(
    model=deployment_name,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Azure OpenAI?"}
    ]
)
generated_text = response.choices[0].message.content

# Print the response
print("Response: " + generated_text + "\n")

Het antwoordobject bevat verschillende waarden, zoals total_tokens en finish_reason. De voltooiing van het antwoordobject is vergelijkbaar met de volgende voltooiing:

"Azure OpenAI is a cloud-based artificial intelligence (AI) service that offers a range of tools and services for developing and deploying AI applications. Azure OpenAI provides a variety of services for training and deploying machine learning models, including a managed service for training and deploying deep learning models, a managed service for deploying machine learning models, and a managed service for managing and deploying machine learning models."

In zowel C# als Python kan uw aanroep optionele parameters bevatten, waaronder temperature en max_tokens.