Delen via


Quickstart: Aan de slag met Azure OpenAI-assistenten (preview)

Met Azure OpenAI-assistenten (preview) kunt u AI-assistenten maken die zijn afgestemd op uw behoeften via aangepaste instructies en uitgebreid met geavanceerde hulpprogramma's zoals code-interpreter en aangepaste functies.

Belangrijk

Sommige van de functies die in dit artikel worden beschreven, zijn mogelijk alleen beschikbaar in de preview-versie. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Vereisten

Ga naar Azure AI Studio (preview)

Notitie

Hoewel u Azure OpenAI Studio kunt gebruiken, raden we u aan de stappen hier te gebruiken om Azure AI Studio te gebruiken. Met AI Studio kunt u Assistenten v2 gebruiken die verschillende upgrades biedt, zoals het hulpprogramma voor het zoeken van bestanden, wat sneller is en meer bestanden ondersteunt.

  1. Meld u aan bij Azure AI Studio.

  2. Ga naar uw project of maak een nieuw project in Azure AI Studio.

  3. Selecteer assistenten in uw projectoverzicht onder Project-speeltuin.

    Met de assistentspeeltuin kunt u AI-assistenten verkennen, prototypen en testen zonder dat u code hoeft uit te voeren. Op deze pagina kunt u snel nieuwe ideeën herhalen en experimenteren.

    De speeltuin biedt verschillende opties om uw assistent te configureren. In de volgende stappen gebruikt u het configuratievenster Assistent om een nieuwe AI-assistent te maken.

    Naam Beschrijving
    Naam assistent Uw implementatienaam die is gekoppeld aan een specifiek model.
    Instructies Instructies zijn vergelijkbaar met systeemberichten. Hier geeft u de modelrichtlijnen over het gedrag en de context waarnaar wordt verwezen bij het genereren van een antwoord. U kunt de persoonlijkheid van de assistent beschrijven, vertellen wat het wel en niet moet beantwoorden en hoe u antwoorden kunt opmaken. U kunt ook voorbeelden geven van de stappen die moeten worden uitgevoerd bij het beantwoorden van antwoorden.
    Implementatie Hier stelt u in welke modelimplementatie u wilt gebruiken met uw assistent.
    Functies Maak aangepaste functiedefinities voor de modellen om API-aanroepen te formuleren en gegevensuitvoer te structuren op basis van uw specificaties. Niet gebruikt in deze quickstart.
    Code-interpreter Code-interpreter biedt toegang tot een Python-omgeving in de sandbox die kan worden gebruikt om het model toe te staan code te testen en uit te voeren.
    Bestanden U kunt maximaal 10.000 bestanden uploaden, met een maximale bestandsgrootte van 512 MB voor gebruik met hulpprogramma's. Niet gebruikt in deze quickstart.

    Schermopname van het configuratiescherm Assistent zonder dat alle waarden zijn ingevuld.

Uw eerste assistent maken

  1. Selecteer uw implementatie in de vervolgkeuzelijst Implementaties .

  2. Selecteer Nieuw in de vervolgkeuzelijst Configuratieassistent.

  3. Geef uw assistent een naam.

  4. Voer de volgende instructies in: 'U bent een AI-assistent die code kan schrijven om wiskundige vragen te beantwoorden'

  5. Selecteer een modelimplementatie. We raden u aan te testen met een van de nieuwste gpt-4-modellen.

  6. Selecteer de wisselknop voor het inschakelen van de code-interpreter.

  7. Selecteer Opslaan.

    Schermopname van de assistent met configuratiegegevens ingevoerd.

  8. Voer een vraag in voor de assistent die moet worden beantwoord: "Ik moet de vergelijking 3x + 11 = 14oplossen. Kun je me helpen?"

  9. Selecteer de knop Toevoegen en uitvoeren

    The solution to the equation (3x + 11 = 14) is (x = 1).
    

    Hoewel we kunnen zien dat het antwoord juist is, om te bevestigen dat het model code-interpreter heeft gebruikt om dit antwoord te bereiken en dat de code die het heeft geschreven, geldig is in plaats van alleen een antwoord te herhalen op basis van de trainingsgegevens van het model, stellen we een andere vraag.

  10. Voer de vervolgvraag in: 'Toon de code die u hebt uitgevoerd om deze oplossing op te halen'.

    Sure. The code is very straightforward
    
    # calculation
    x = (14 - 11) / 3
    x
    
    
    First, we subtract 11 from 14, then divide the result by 3. This gives us the value of x which is 1.0.
    

    Schermopname van gesprekssessie in de speeltuin Assistent.

U kunt ook de logboeken in het rechterdeelvenster raadplegen om te bevestigen dat de code-interpreter is gebruikt en om de code te valideren die is uitgevoerd om het antwoord te genereren. Het is belangrijk te onthouden dat terwijl code-interpreter het model de mogelijkheid biedt om te reageren op complexere wiskundige vragen door de vragen te converteren naar code en uit te voeren in een Python-omgeving in een sandbox, moet u nog steeds het antwoord valideren om te bevestigen dat het model uw vraag correct heeft vertaald in een geldige weergave in code.

Belangrijke concepten

Houd bij het gebruik van de assistentspeeltuin rekening met de volgende concepten.

Hulpprogramma's

Een individuele assistent heeft toegang tot maximaal 128 hulpprogramma's, waaronder code interpreter, evenals eventuele aangepaste hulpprogramma's die u maakt via functies.

Chatsessie

Chatsessie ook wel een thread genoemd in de API van de assistent is waar het gesprek tussen de gebruiker en assistent plaatsvindt. In tegenstelling tot traditionele chat-voltooiingsgesprekken is er geen limiet voor het aantal berichten in een thread. De assistent comprimeert automatisch aanvragen om aan de limiet voor het invoertoken van het model te voldoen.

Dit betekent ook dat u niet controleert hoeveel tokens tijdens elke keer van het gesprek aan het model worden doorgegeven. Het beheren van tokens wordt weggeabstraheerd en volledig afgehandeld door de Assistants-API.

Selecteer de knop Chat wissen om de huidige gespreksgeschiedenis te verwijderen.

Onder het tekstvak voor tekstinvoer bevinden zich twee knoppen:

  • Voeg een bericht toe zonder uitvoering.
  • Toevoegen en uitvoeren.

Logboeken

Logboeken bieden een gedetailleerde momentopname van wat de API-activiteit van de assistent is.

Panelen weergeven

Standaard zijn er drie panelen: configuratie van assistent, chatsessie en logboeken. Met deelvensters kunt u de panelen toevoegen, verwijderen en opnieuw rangschikken. Als u ooit een paneel sluit en het terug moet krijgen, gebruikt u Deelvensters weergeven om het verloren paneel te herstellen.

Resources opschonen

Als u een Azure OpenAI-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

U kunt de assistent of thread ook verwijderen via de API van de assistent.

Zie ook

Referentiedocumentatiebibliotheek | broncodepakket | (PyPi) |

Vereisten

Voor verificatie zonder wachtwoord moet u

  1. Gebruik het azure-identity-pakket .
  2. Wijs de Cognitive Services User rol toe aan uw gebruikersaccount. Dit kan worden gedaan in Azure Portal onder Toegangsbeheer (IAM)>Roltoewijzing toevoegen.
  3. Meld u aan met de Azure CLI, zoals az login.

Instellingen

  1. Installeer de OpenAI Python-clientbibliotheek met:
pip install openai
  1. Voor de aanbevolen verificatie zonder wachtwoord:
pip install azure-identity

Notitie

  • Bestanden zoeken kan maximaal 10.000 bestanden per assistent opnemen - 500 keer meer dan voorheen. Het is snel, ondersteunt parallelle query's via zoekopdrachten met meerdere threads en biedt uitgebreide herrankering en herschrijven van query's.
    • Vectoropslag is een nieuw object in de API. Zodra een bestand is toegevoegd aan een vectoropslag, wordt het automatisch geparseerd, gesegmenteerd en ingesloten, zodat het kan worden doorzocht. Vectoropslag kunnen worden gebruikt voor assistenten en threads, waardoor bestandsbeheer en facturering worden vereenvoudigd.
  • We hebben ondersteuning toegevoegd voor de tool_choice parameter die kan worden gebruikt om het gebruik van een specifiek hulpprogramma (zoals het zoeken van bestanden, code-interpreter of een functie) in een bepaalde uitvoering af te dwingen.

Notitie

Deze bibliotheek wordt onderhouden door OpenAI. Raadpleeg de releasegeschiedenis om de meest recente updates voor de bibliotheek bij te houden.

Sleutel en eindpunt ophalen

Als u een aanroep wilt maken op basis van de Azure OpenAI-service, hebt u het volgende nodig:

Naam van de variabele Weergegeven als
ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het controleren van uw resource vanuit Azure Portal. U kunt ook de waarde vinden in azure OpenAI Studio>Playground>View-code. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com/.
API-KEY Deze waarde vindt u in de sectie Sleutels en eindpunt bij het controleren van uw resource vanuit Azure Portal. U kunt KEY1 of KEY2 gebruiken.
DEPLOYMENT-NAME Deze waarde komt overeen met de aangepaste naam die u hebt gekozen voor uw implementatie toen u een model hebt geïmplementeerd. Deze waarde vindt u onder Resource Management>Model Deployments in Azure Portal of ook onder Beheerimplementaties> in Azure OpenAI Studio.

Ga naar uw resource in Azure Portal. De sleutels en het eindpunt vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel, omdat u beide nodig hebt voor het verifiëren van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Schermopname van de overzichtsblade voor een Azure OpenAI-resource in De Azure-portal met de locatie met eindpunt- en toegangssleutels in rood omcirkeld.

Omgevingsvariabelen

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

Belangrijk

Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.

Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Een assistent maken

In onze code gaan we de volgende waarden opgeven:

Naam Beschrijving
Naam assistent Uw implementatienaam die is gekoppeld aan een specifiek model.
Instructies Instructies zijn vergelijkbaar met systeemberichten. Hier geeft u de modelrichtlijnen over het gedrag en de context waarnaar wordt verwezen bij het genereren van een antwoord. U kunt de persoonlijkheid van de assistent beschrijven, vertellen wat het wel en niet moet beantwoorden en hoe u antwoorden kunt opmaken. U kunt ook voorbeelden geven van de stappen die moeten worden uitgevoerd bij het beantwoorden van antwoorden.
Model Hier stelt u in welke modelimplementatienaam u wilt gebruiken met uw assistent. Het hulpprogramma voor ophalen vereist gpt-35-turbo (1106) of gpt-4 (1106-preview) model. Stel deze waarde in op uw implementatienaam, niet op de naam van het model, tenzij deze hetzelfde is.
Code-interpreter Code-interpreter biedt toegang tot een Python-omgeving in de sandbox die kan worden gebruikt om het model toe te staan code te testen en uit te voeren.

Hulpprogramma's

Een individuele assistent heeft toegang tot maximaal 128 hulpprogramma's, waaronder code interpreter, evenals eventuele aangepaste hulpprogramma's die u maakt via functies.

De Python-app maken

Meld u aan bij Azure en az login maak en voer een assistent uit met het volgende aanbevolen python-voorbeeld zonder wachtwoord:

import os
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI

token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")

client = AzureOpenAI(
    azure_ad_token_provider=token_provider,
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version="2024-05-01-preview",
)

# Create an assistant
assistant = client.beta.assistants.create(
    name="Math Assist",
    instructions="You are an AI assistant that can write code to help answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview" # You must replace this value with the deployment name for your model.
)

# Create a thread
thread = client.beta.threads.create()

# Add a user question to the thread
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# Run the thread and poll for the result
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="Please address the user as Jane Doe. The user has a premium account.",
)

print("Run completed with status: " + run.status)

if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    print(messages.to_json(indent=2))

Als u de service-API-sleutel voor verificatie wilt gebruiken, kunt u een assistent maken en uitvoeren met het volgende Python-voorbeeld:

import os
from openai import AzureOpenAI

client = AzureOpenAI(
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version="2024-05-01-preview",
)

# Create an assistant
assistant = client.beta.assistants.create(
    name="Math Assist",
    instructions="You are an AI assistant that can write code to help answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview" # You must replace this value with the deployment name for your model.
)

# Create a thread
thread = client.beta.threads.create()

# Add a user question to the thread
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# Run the thread and poll for the result
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="Please address the user as Jane Doe. The user has a premium account.",
)

print("Run completed with status: " + run.status)

if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    print(messages.to_json(indent=2))

Uitvoer

Uitvoeren voltooid met status: voltooid

{
  "data": [
    {
      "id": "msg_4SuWxTubHsHpt5IlBTO5Hyw9",
      "assistant_id": "asst_cYqL1RuwLyFV3HU1gkaE2k0K",
      "attachments": [],
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
          },
          "type": "text"
        }
      ],
      "created_at": 1716397091,
      "metadata": {},
      "object": "thread.message",
      "role": "assistant",
      "run_id": "run_hFgBPbUtO8ZNTnNPC8PgpH1S",
      "thread_id": "thread_isb7spwRycI5ueT9E7357aOm"
    },
    {
      "id": "msg_Z32w2E7kY5wEWhZqQWxIbIUB",
      "assistant_id": null,
      "attachments": [],
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
          },
          "type": "text"
        }
      ],
      "created_at": 1716397025,
      "metadata": {},
      "object": "thread.message",
      "role": "user",
      "run_id": null,
      "thread_id": "thread_isb7spwRycI5ueT9E7357aOm"
    }
  ],
  "object": "list",
  "first_id": "msg_4SuWxTubHsHpt5IlBTO5Hyw9",
  "last_id": "msg_Z32w2E7kY5wEWhZqQWxIbIUB",
  "has_more": false
}

Inzicht in uw resultaten

In dit voorbeeld maken we een assistent waarvoor code-interpreter is ingeschakeld. Wanneer we de assistent een wiskundige vraag stellen, wordt de vraag omgezet in Python-code en wordt de code uitgevoerd in een sandboxomgeving om het antwoord op de vraag te bepalen. De code die het model maakt en test om een antwoord te bereiken, is:

from sympy import symbols, Eq, solve  
  
# Define the variable  
x = symbols('x')  
  
# Define the equation  
equation = Eq(3*x + 11, 14)  
  
# Solve the equation  
solution = solve(equation, x)  
solution  

Het is belangrijk te onthouden dat terwijl code-interpreter het model de mogelijkheid biedt om te reageren op complexere query's door de vragen te converteren naar code en die code iteratief uit te voeren in de Python-sandbox totdat deze een oplossing bereikt, moet u nog steeds het antwoord valideren om te bevestigen dat het model uw vraag correct heeft vertaald in een geldige weergave in code.

Resources opschonen

Als u een Azure OpenAI-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Zie ook

Broncodepakket voor referentiedocumentatie | | (NuGet)

Vereisten

Instellingen

Een nieuwe .NET Core-app maken

  1. Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de dotnet new opdracht om een nieuwe console-app te maken met de naam azure-openai-quickstart:

    dotnet new console -n azure-openai-assistants-quickstart
    
  2. Ga naar de map van de zojuist gemaakte app-map en bouw de app met de dotnet build opdracht:

    dotnet build
    

    De build-uitvoer mag geen waarschuwingen of fouten bevatten.

    ...
    Build succeeded.
     0 Warning(s)
     0 Error(s)
    ...
    
  3. Installeer de OpenAI .NET-clientbibliotheek met de opdracht dotnet add package :

    dotnet add package Azure.AI.OpenAI --prerelease
    

Sleutel en eindpunt ophalen

Als u azure OpenAI wilt aanroepen, hebt u een eindpunt en een sleutel nodig.

Naam van de variabele Waarde
ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt ook de waarde vinden in de codeweergave van Azure OpenAI Studio>Playground>. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com/.
API-KEY Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt KEY1 of KEY2 gebruiken.

Ga naar uw resource in Azure Portal. De sectie Sleutels en eindpunt vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel, omdat u beide nodig hebt voor het verifiëren van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Schermopname van de overzichtsgebruikersinterface voor een Azure OpenAI-resource in Azure Portal met het eindpunt en de locatie van toegangssleutels die rood zijn omcirkeld.

Omgevingsvariabelen

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

Belangrijk

Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.

Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Verificatie zonder wachtwoord is veiliger dan alternatieven op basis van sleutels en is de aanbevolen methode voor het maken van verbinding met Azure-services. Als u verificatie zonder wachtwoord kiest, moet u het volgende voltooien:

  1. Voeg het pakket Azure.Identity toe.

    dotnet add package Azure.Identity
    
  2. Wijs de Cognitive Services User rol toe aan uw gebruikersaccount. Dit kan worden gedaan in Azure Portal op uw OpenAI-resource onder Toegangsbeheer (IAM)>Roltoewijzing toevoegen.

  3. Meld u via Visual Studio of de Azure CLI az loginaan bij Azure.

De assistent maken

Werk het Program.cs bestand bij met de volgende code om een assistent te maken:

using Azure;
using Azure.AI.OpenAI.Assistants;

// Assistants is a beta API and subject to change
// Acknowledge its experimental status by suppressing the matching warning.
string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");

var openAIClient = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));

// Use for passwordless auth
//var openAIClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()); 

FileClient fileClient = openAIClient.GetFileClient();
AssistantClient assistantClient = openAIClient.GetAssistantClient();

// First, let's contrive a document we'll use retrieval with and upload it.
using Stream document = BinaryData.FromString("""
            {
                "description": "This document contains the sale history data for Contoso products.",
                "sales": [
                    {
                        "month": "January",
                        "by_product": {
                            "113043": 15,
                            "113045": 12,
                            "113049": 2
                        }
                    },
                    {
                        "month": "February",
                        "by_product": {
                            "113045": 22
                        }
                    },
                    {
                        "month": "March",
                        "by_product": {
                            "113045": 16,
                            "113055": 5
                        }
                    }
                ]
            }
            """).ToStream();

OpenAIFileInfo salesFile = await fileClient.UploadFileAsync(
    document,
    "monthly_sales.json",
    FileUploadPurpose.Assistants);

// Now, we'll create a client intended to help with that data
AssistantCreationOptions assistantOptions = new()
{
    Name = "Example: Contoso sales RAG",
    Instructions =
        "You are an assistant that looks up sales data and helps visualize the information based"
        + " on user queries. When asked to generate a graph, chart, or other visualization, use"
        + " the code interpreter tool to do so.",
    Tools =
            {
                new FileSearchToolDefinition(),
                new CodeInterpreterToolDefinition(),
            },
    ToolResources = new()
    {
        FileSearch = new()
        {
            NewVectorStores =
                    {
                        new VectorStoreCreationHelper([salesFile.Id]),
                    }
        }
    },
};

Assistant assistant = await assistantClient.CreateAssistantAsync(deploymentName, assistantOptions);

// Create and run a thread with a user query about the data already associated with the assistant
ThreadCreationOptions threadOptions = new()
{
    InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." }
};

ThreadRun threadRun = await assistantClient.CreateThreadAndRunAsync(assistant.Id, threadOptions);

// Check back to see when the run is done
do
{
    Thread.Sleep(TimeSpan.FromSeconds(1));
    threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id);
} while (!threadRun.Status.IsTerminal);

// Finally, we'll print out the full history for the thread that includes the augmented generation
AsyncCollectionResult<ThreadMessage> messages
    = assistantClient.GetMessagesAsync(
        threadRun.ThreadId,
        new MessageCollectionOptions() { Order = MessageCollectionOrder.Ascending });

await foreach (ThreadMessage message in messages)
{
    Console.Write($"[{message.Role.ToString().ToUpper()}]: ");
    foreach (MessageContent contentItem in message.Content)
    {
        if (!string.IsNullOrEmpty(contentItem.Text))
        {
            Console.WriteLine($"{contentItem.Text}");

            if (contentItem.TextAnnotations.Count > 0)
            {
                Console.WriteLine();
            }

            // Include annotations, if any.
            foreach (TextAnnotation annotation in contentItem.TextAnnotations)
            {
                if (!string.IsNullOrEmpty(annotation.InputFileId))
                {
                    Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}");
                }
                if (!string.IsNullOrEmpty(annotation.OutputFileId))
                {
                    Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}");
                }
            }
        }
        if (!string.IsNullOrEmpty(contentItem.ImageFileId))
        {
            OpenAIFileInfo imageInfo = await fileClient.GetFileAsync(contentItem.ImageFileId);
            BinaryData imageBytes = await fileClient.DownloadFileAsync(contentItem.ImageFileId);
            using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png");
            imageBytes.ToStream().CopyTo(stream);

            Console.WriteLine($"<image: {imageInfo.Filename}.png>");
        }
    }
    Console.WriteLine();
}

Voer de app uit met behulp van de dotnet run opdracht:

dotnet run

De console-uitvoer moet er ongeveer als volgt uitzien:

[USER]: How well did product 113045 sell in February? Graph its trend over time.

[ASSISTANT]: Product 113045 sold 22 units in February. Let's visualize its sales trend over the given months (January through March).

I'll create a graph to depict this trend.

[ASSISTANT]: <image: 553380b7-fdb6-49cf-9df6-e8e6700d69f4.png>
The graph above visualizes the sales trend for product 113045 from January to March. As seen, the sales peaked in February with 22 units sold, and fluctuated over the period from January (12 units) to March (16 units).

If you need further analysis or more details, feel free to ask!

Resources opschonen

Als u een Azure OpenAI-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Zie ook

Referentiedocumentatiebibliotheek | broncodepakket | (npm) |

Vereisten

Voor verificatie zonder wachtwoord moet u

  1. Gebruik het @azure/identity pakket.
  2. Wijs de Cognitive Services User rol toe aan uw gebruikersaccount. Dit kan worden gedaan in Azure Portal onder Toegangsbeheer (IAM)>Roltoewijzing toevoegen.
  3. Meld u aan met de Azure CLI, zoals az login.

Instellingen

  1. Installeer de OpenAI Assistant-clientbibliotheek voor JavaScript met:

    npm install openai
    
  2. Voor de aanbevolen verificatie zonder wachtwoord:

    npm install @azure/identity
    

Sleutel en eindpunt ophalen

Als u een aanroep wilt maken op basis van de Azure OpenAI-service, hebt u het volgende nodig:

Naam van de variabele Weergegeven als
ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het controleren van uw resource vanuit Azure Portal. U kunt ook de waarde vinden in azure OpenAI Studio>Playground>View-code. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com/.
API-KEY Deze waarde vindt u in de sectie Sleutels en eindpunt bij het controleren van uw resource vanuit Azure Portal. U kunt KEY1 of KEY2 gebruiken.
DEPLOYMENT-NAME Deze waarde komt overeen met de aangepaste naam die u hebt gekozen voor uw implementatie toen u een model hebt geïmplementeerd. Deze waarde vindt u onder Resource Management>Model Deployments in Azure Portal of ook onder Beheerimplementaties> in Azure OpenAI Studio.

Ga naar uw resource in Azure Portal. De sleutels en het eindpunt vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel, omdat u beide nodig hebt voor het verifiëren van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Schermopname van de overzichtsblade voor een OpenAI-resource in Azure Portal met de locatie voor eindpunt- en toegangssleutels die rood zijn omcirkeld.

Omgevingsvariabelen

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

Belangrijk

Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.

Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Voeg aanvullende omgevingsvariabelen toe voor de implementatienaam en API-versie:

  • AZURE_OPENAI_DEPLOYMENT_NAME: de naam van uw implementatie, zoals wordt weergegeven in Azure Portal.
  • OPENAI_API_VERSION: Meer informatie over API-versies.
setx AZURE_OPENAI_DEPLOYMENT_NAME "REPLACE_WITH_YOUR_DEPLOYMENT_NAME" 
setx OPENAI_API_VERSION "REPLACE_WITH_YOUR_API_VERSION" 

Een assistent maken

In onze code gaan we de volgende waarden opgeven:

Naam Beschrijving
Naam assistent Uw implementatienaam die is gekoppeld aan een specifiek model.
Instructies Instructies zijn vergelijkbaar met systeemberichten. Hier geeft u de modelrichtlijnen over het gedrag en de context waarnaar wordt verwezen bij het genereren van een antwoord. U kunt de persoonlijkheid van de assistent beschrijven, vertellen wat het wel en niet moet beantwoorden en hoe u antwoorden kunt opmaken. U kunt ook voorbeelden geven van de stappen die moeten worden uitgevoerd bij het beantwoorden van antwoorden.
Model Dit is de implementatienaam.
Code-interpreter Code-interpreter biedt toegang tot een Python-omgeving in de sandbox die kan worden gebruikt om het model toe te staan code te testen en uit te voeren.

Hulpprogramma's

Een individuele assistent heeft toegang tot maximaal 128 hulpprogramma's, waaronder code interpreter, evenals eventuele aangepaste hulpprogramma's die u maakt via functies.

Meld u aan bij Azure en az login maak en voer een assistent uit met de volgende aanbevolen TypeScript-module zonder wachtwoord (index.ts):

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Add `Cognitive Services User` to identity for Azure OpenAI resource
import {
  DefaultAzureCredential,
  getBearerTokenProvider,
} from "@azure/identity";

// Get environment variables
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;
const openAIVersion = process.env.OPENAI_API_VERSION as string;

// Check env variables
if (!azureOpenAIEndpoint || !azureOpenAIDeployment || !openAIVersion) {
  throw new Error(
    "Please ensure to set AZURE_OPENAI_DEPLOYMENT_NAME and AZURE_OPENAI_ENDPOINT in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const credential = new DefaultAzureCredential();
  const scope = "https://cognitiveservices.azure.com/.default";
  const azureADTokenProvider = getBearerTokenProvider(credential, scope);
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    apiVersion: openAIVersion,
    azureADTokenProvider,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

Als u de servicesleutel voor verificatie wilt gebruiken, kunt u een assistent maken en uitvoeren met de volgende TypeScript-module (index.ts):

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Get environment variables
const azureOpenAIKey = process.env.AZURE_OPENAI_KEY as string;
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;
const openAIVersion = process.env.OPENAI_API_VERSION as string;

// Check env variables
if (!azureOpenAIKey || !azureOpenAIEndpoint || !azureOpenAIDeployment || !openAIVersion) {
  throw new Error(
    "Please set AZURE_OPENAI_KEY and AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_DEPLOYMENT_NAME in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    apiVersion: openAIVersion,
    apiKey: azureOpenAIKey,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

Uitvoer

Assistant created: {"id":"asst_zXaZ5usTjdD0JGcNViJM2M6N","createdAt":"2024-04-08T19:26:38.000Z","name":"Math Tutor","description":null,"model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"fileIds":[],"metadata":{}}
Thread created: {"id":"thread_KJuyrB7hynun4rvxWdfKLIqy","createdAt":"2024-04-08T19:26:38.000Z","metadata":{}}
Message created:  {"id":"msg_o0VkXnQj3juOXXRCnlZ686ff","createdAt":"2024-04-08T19:26:38.000Z","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","role":"user","content":[{"type":"text","text":{"value":"I need to solve the equation `3x + 11 = 14`. Can you help me?","annotations":[]},"imageFile":{}}],"assistantId":null,"runId":null,"fileIds":[],"metadata":{}}
Created run
Run created:  {"id":"run_P8CvlouB8V9ZWxYiiVdL0FND","object":"thread.run","status":"queued","model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"metadata":{},"usage":null,"assistantId":"asst_zXaZ5usTjdD0JGcNViJM2M6N","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","fileIds":[],"createdAt":"2024-04-08T19:26:39.000Z","expiresAt":"2024-04-08T19:36:39.000Z","startedAt":null,"completedAt":null,"cancelledAt":null,"failedAt":null}
Message content: "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
Message content: "Yes, of course! To solve the equation \\( 3x + 11 = 14 \\), we can follow these steps:\n\n1. Subtract 11 from both sides of the equation to isolate the term with x.\n2. Then, divide by 3 to find the value of x.\n\nLet me calculate that for you."
Message content: "I need to solve the equation `3x + 11 = 14`. Can you help me?"

Het is belangrijk te onthouden dat terwijl de code-interpreter het model de mogelijkheid biedt om te reageren op complexere query's door de vragen te converteren naar code en die code iteratief uit te voeren in JavaScript totdat deze een oplossing bereikt, moet u nog steeds het antwoord valideren om te bevestigen dat het model uw vraag correct heeft vertaald in een geldige weergave in code.

Resources opschonen

Als u een Azure OpenAI-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Voorbeeldcode

Zie ook

Vereisten

Instellingen

Sleutel en eindpunt ophalen

Als u azure OpenAI wilt aanroepen, hebt u het volgende nodig:

Naam van de variabele Waarde
ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt de waarde ook vinden in Azure OpenAI Studio>Playground>Codeweergave. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com/.
API-KEY Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt KEY1 of KEY2 gebruiken.
DEPLOYMENT-NAME Deze waarde komt overeen met de aangepaste naam die u hebt gekozen voor uw implementatie toen u een model hebt geïmplementeerd. Deze waarde vindt u onderResourcebeheerimplementaties> in de Azure Portal of onderBeheerimplementaties> in Azure OpenAI Studio.

Ga naar uw resource in Azure Portal. Het eindpunt en de sleutels vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel, omdat u beide nodig hebt voor het verifiëren van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Schermopname van de overzichtsblade voor een Azure OpenAI-resource in De Azure-portal met de locatie met eindpunt- en toegangssleutels in rood omcirkeld.

Omgevingsvariabelen

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

Belangrijk

Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.

Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

REST-API

Een assistent maken

Notitie

Bij Azure OpenAI is voor de parameter de naam van de model modelimplementatie vereist. Als de naam van uw modelimplementatie anders is dan de naam van het onderliggende model, past u de code aan. "model": "{your-custom-model-deployment-name}"

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/assistants?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": "You are an AI assistant that can write code to help answer math questions.",
    "name": "Math Assist",
    "tools": [{"type": "code_interpreter"}],
    "model": "gpt-4-1106-preview"
  }'

Hulpprogramma's

Een individuele assistent heeft toegang tot maximaal 128 hulpprogramma's, waaronder code interpreter, evenals eventuele aangepaste hulpprogramma's die u maakt via functies.

Een thread maken

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d ''

Een gebruikersvraag toevoegen aan de thread

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
      "role": "user",
      "content": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
    }'

De thread uitvoeren

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assistant_id": "asst_abc123",
  }'

De status van de uitvoering ophalen

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs/run_abc123 \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

Antwoord van assistent

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

Inzicht in uw resultaten

In dit voorbeeld maken we een assistent waarvoor code-interpreter is ingeschakeld. Wanneer we de assistent een wiskundige vraag stellen, wordt de vraag omgezet in Python-code en wordt de code uitgevoerd in een sandboxomgeving om het antwoord op de vraag te bepalen. De code die het model maakt en test om een antwoord te bereiken, is:

    from sympy import symbols, Eq, solve  
      
    # Define the variable  
    x = symbols('x')  
      
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
      
    # Solve the equation  
    solution = solve(equation, x)  
    solution  

Het is belangrijk te onthouden dat terwijl code-interpreter het model de mogelijkheid biedt om te reageren op complexere query's door de vragen te converteren naar code en die code iteratief uit te voeren in de Python-sandbox totdat deze een oplossing bereikt, moet u nog steeds het antwoord valideren om te bevestigen dat het model uw vraag correct heeft vertaald in een geldige weergave in code.

Resources opschonen

Als u een Azure OpenAI-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Zie ook