Udostępnij za pośrednictwem


Szybki start: rozpoczynanie pracy z asystentami usługi Azure OpenAI (wersja zapoznawcza)

Asystenci usługi Azure OpenAI (wersja zapoznawcza) umożliwiają tworzenie opartych na sztucznej inteligencji asystentów dostosowanych do potrzeb za pomocą niestandardowych instrukcji i wspomaganych przez zaawansowane narzędzia, takie jak interpreter kodu i funkcje niestandardowe.

Ważne

Elementy oznaczone (wersja zapoznawcza) w tym artykule są obecnie dostępne w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Wymagania wstępne

Przejdź do usługi Azure AI Studio (wersja zapoznawcza)

Usługa Azure AI Studio umożliwia korzystanie z asystentów w wersji 2, które udostępnia kilka uaktualnień, takich jak narzędzie do wyszukiwania plików, które jest szybsze i obsługuje więcej plików.

  1. Zaloguj się do usługi Azure AI Studio.

  2. Przejdź do projektu lub utwórz nowy projekt w usłudze Azure AI Studio.

  3. Z przeglądu projektu wybierz pozycję Asystenci znajdujący się w obszarze place zabaw.

    Plac zabaw Asystentów umożliwia eksplorowanie, tworzenie prototypów i testowanie asystentów sztucznej inteligencji bez konieczności uruchamiania kodu. Na tej stronie można szybko iterować i eksperymentować z nowymi pomysłami.

    Plac zabaw oferuje kilka opcji konfigurowania Asystenta. W poniższych krokach użyjesz okienka konfiguracji , aby utworzyć nowego asystenta sztucznej inteligencji.

    Nazwa/nazwisko Opis
    Nazwa asystenta Nazwa wdrożenia skojarzona z określonym modelem.
    Instrukcje Instrukcje są podobne do komunikatów systemowych, w których podajesz wskazówki dotyczące tego, jak powinien zachowywać się model i do jakiego kontekstu powinien się odwoływać podczas generowania odpowiedzi. Możesz opisać osobowość asystenta, określić na jakie pytania powinien lub nie powinien odpowiadać i określić, w jaki sposób ma formatować odpowiedzi. Możesz również podać przykłady kroków, które ma wykonywać podczas udzielania odpowiedzi.
    Wdrożenie W tym miejscu można ustawić wdrożenie modelu do użycia z asystentem.
    Funkcje Tworzenie niestandardowych definicji funkcji dla modeli w celu formułowania wywołań interfejsu API i struktur danych wyjściowych danych na podstawie specyfikacji. Nie jest używany w tym przewodniku Szybki start.
    Interpreter kodu Interpreter kodu zapewnia dostęp do środowiska języka Python w trybie piaskownicy, umożliwiając modelowi testowanie i wykonywania kodu.
    Pliki Do użycia z narzędziami można przekazać maksymalnie 10 000 plików o maksymalnym rozmiarze 512 MB. Nie jest używany w tym przewodniku Szybki start.

    Zrzut ekranu przedstawiający ekran konfiguracji Asystenta bez wszystkich wypełnionych wartości.

Tworzenie pierwszego asystenta

  1. Wybierz wdrożenie z listy rozwijanej Wdrożenia .

  2. Z listy rozwijanej Konfiguracja Asystenta wybierz pozycję Nowy asystent.

  3. Nadaj asystentowi nazwę.

  4. Wprowadź następujące instrukcje: "Jesteś asystentem sztucznej inteligencji, który może napisać kod, aby pomóc w odpowiadaniu na pytania matematyczne"

  5. Wybierz wdrożenie modelu. Zalecamy przetestowanie jednego z najnowszych modeli gpt-4.

  6. Wybierz przełącznik włączania interpretera kodu.

  7. Wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający asystenta ze wprowadzonymi szczegółami konfiguracji.

  8. Wprowadź pytanie dotyczące asystenta, aby odpowiedzieć: "Muszę rozwiązać równanie 3x + 11 = 14. Czy możesz mi pomóc?"

  9. Wybierz przycisk Dodaj i uruchom

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

    Chociaż widzimy, że odpowiedź jest poprawna, aby potwierdzić, że model użył interpretera kodu, aby uzyskać tę odpowiedź, i że napisany przez nią kod jest prawidłowy, a nie tylko powtarzając odpowiedź z danych treningowych modelu, zadajemy kolejne pytanie.

  10. Wprowadź następujące pytanie: "Pokaż mi kod, który został uruchomiony, aby uzyskać to rozwiązanie".

    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.
    

    Zrzut ekranu przedstawiający sesję konwersacji na placu zabaw asystenta.

Możesz również zapoznać się z dziennikami w panelu po prawej stronie, aby potwierdzić, że użyto interpretera kodu i zweryfikować kod, który został uruchomiony w celu wygenerowania odpowiedzi. Należy pamiętać, że podczas gdy interpreter kodu daje modelowi możliwość odpowiadania na bardziej złożone pytania matematyczne, konwertując pytania na kod i uruchamiając je w środowisku języka Python w trybie piaskownicy, nadal trzeba zweryfikować odpowiedź, aby potwierdzić, że model poprawnie przetłumaczył pytanie na prawidłową reprezentację w kodzie.

Najważniejsze pojęcia

Podczas korzystania z placu zabaw Asystentów należy pamiętać o następujących pojęciach.

Narzędzia

Indywidualny asystent może uzyskać dostęp do maksymalnie 128 narzędzi, w tym code interpreter, a także dowolnych niestandardowych narzędzi tworzonych za pośrednictwem funkcji.

Sesja rozmowy

Sesja czatu znana również jako wątek w interfejsie API Asystenta to miejsce, w którym odbywa się rozmowa między użytkownikiem a asystentem. W przeciwieństwie do tradycyjnych wywołań uzupełniania czatu nie ma limitu liczby wiadomości w wątku. Asystent automatycznie kompresuje żądania w celu dopasowania do limitu tokenu wejściowego modelu.

Oznacza to również, że nie kontrolujesz liczby tokenów przekazywanych do modelu podczas każdej rozmowy. Zarządzanie tokenami jest abstrahowane i obsługiwane w całości przez interfejs API Asystentów.

Wybierz przycisk Wyczyść czat, aby usunąć bieżącą historię konwersacji.

Poniżej pola wprowadzania tekstu znajdują się dwa przyciski:

  • Dodaj komunikat bez uruchomienia.
  • Dodaj i uruchom polecenie .

Dzienniki

Dzienniki zawierają szczegółową migawkę działania asystenta interfejsu API.

Pokaż panele

Domyślnie istnieją trzy panele: asystent konfiguracji, sesja czatu i dzienniki. Pokaż panele umożliwiają dodawanie, usuwanie i rozmieszczanie paneli. Jeśli kiedykolwiek zamkniesz panel i musisz go odzyskać, użyj opcji Pokaż panele , aby przywrócić utracony panel.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Alternatywnie możesz usunąć asystenta lub wątku za pośrednictwem interfejsu API Asystenta.

Zobacz też

Dokumentacja pakietu kodu | źródłowego biblioteki referencyjnej | (PyPi) |

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Środowisko Python w wersji 3.8 lub nowszej
  • Następujące biblioteki języka Python: system operacyjny, openai (wymagana jest wersja 1.x)
  • Interfejs wiersza polecenia platformy Azure używany do uwierzytelniania bez hasła w lokalnym środowisku projektowym, utwórz niezbędny kontekst, logując się przy użyciu interfejsu wiersza polecenia platformy Azure.
  • Zasób usługi Azure OpenAI z zgodnym modelem w obsługiwanym regionie.
  • Zalecamy zapoznanie się z notatką o przejrzystości odpowiedzialnej sztucznej inteligencji i innymi zasobami odpowiedzialnej sztucznej inteligencji, aby zapoznać się z możliwościami i ograniczeniami usługi Azure OpenAI.
  • Zasób usługi Azure OpenAI z wdrożonym modelem gpt-4 (1106-preview) został użyty do testowania tego przykładu.

W przypadku uwierzytelniania bez hasła należy wykonać następujące kroki:

  1. Użyj pakietu azure-identity.
  2. Cognitive Services User Przypisz rolę do konta użytkownika. Można to zrobić w witrynie Azure Portal w obszarze Kontrola dostępu (IAM)>Dodawanie przypisania roli.
  3. Zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure, takiego jak az login.

Konfiguruj

  1. Zainstaluj bibliotekę klienta języka Python openAI za pomocą następujących elementów:
pip install openai
  1. W przypadku zalecanego uwierzytelniania bez hasła:
pip install azure-identity

Uwaga

  • Wyszukiwanie plików może pozyskiwać maksymalnie 10 000 plików na asystenta — 500 razy więcej niż wcześniej. Jest szybkie, obsługuje zapytania równoległe za pośrednictwem wyszukiwania wielowątkowego i oferuje ulepszone ponowne klasyfikowanie praz ponowne zapisywanie zapytań.
    • Magazyn wektorów to nowy obiekt w interfejsie API. Po dodaniu pliku do magazynu wektorów jest on automatycznie analizowany, fragmentowany i osadzany oraz przygotowywany do wyszukiwania. Magazyny wektorów mogą być używane między asystentami i wątkami, upraszczając zarządzanie plikami i rozliczenia.
  • Dodaliśmy obsługę parametru tool_choice , który może służyć do wymuszenia użycia określonego narzędzia (takiego jak wyszukiwanie plików, interpreter kodu lub funkcja) w określonym uruchomieniu.

Uwaga

Ta biblioteka jest utrzymywana przez interfejs OpenAI. Zapoznaj się z historią wydania, aby śledzić najnowsze aktualizacje biblioteki.

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Azure OpenAI, potrzebne są następujące elementy:

Nazwa zmiennej Wartość
ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Punkt końcowy można również znaleźć na stronie Wdrożenia w usłudze Azure AI Studio. Przykładowy punkt końcowy to: https://docs-test-001.openai.azure.com/.
API-KEY Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DEPLOYMENT-NAME Ta wartość będzie odpowiadać nazwie niestandardowej wybranej dla wdrożenia podczas wdrażania modelu. Tę wartość można znaleźć w obszarze Wdrożenia modelu zarządzania>zasobami w witrynie Azure Portal lub za pośrednictwem strony Wdrożenia w usłudze Azure AI Studio.

Przejdź do zasobu w witrynie Azure Portal. Klucze i punkt końcowy można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Zrzut ekranu przedstawiający blok przeglądu zasobu usługi Azure OpenAI w witrynie Azure Portal z lokalizacją punktu końcowego i kluczy dostępu w kolorze czerwonym.

Zmienne środowiskowe

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

Ważne

Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w innym miejscu, na przykład w usłudze Azure Key Vault. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach Azure AI.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Tworzenie asystenta

W naszym kodzie określimy następujące wartości:

Nazwa/nazwisko Opis
Nazwa asystenta Nazwa wdrożenia skojarzona z określonym modelem.
Instrukcje Instrukcje są podobne do komunikatów systemowych, w których podajesz wskazówki dotyczące tego, jak powinien zachowywać się model i do jakiego kontekstu powinien się odwoływać podczas generowania odpowiedzi. Możesz opisać osobowość asystenta, określić na jakie pytania powinien lub nie powinien odpowiadać i określić, w jaki sposób ma formatować odpowiedzi. Możesz również podać przykłady kroków, które ma wykonywać podczas udzielania odpowiedzi.
Model W tym miejscu należy ustawić nazwę wdrożenia modelu, która ma być używana z asystentem. Narzędzie pobierania wymaga gpt-35-turbo (1106) lub gpt-4 (1106-preview) modelu. Ustaw tę wartość na nazwę wdrożenia, a nie nazwę modelu, chyba że jest taka sama.
Interpreter kodu Interpreter kodu zapewnia dostęp do środowiska języka Python w trybie piaskownicy, umożliwiając modelowi testowanie i wykonywania kodu.

Narzędzia

Indywidualny asystent może uzyskać dostęp do maksymalnie 128 narzędzi, w tym code interpreter, a także dowolnych niestandardowych narzędzi tworzonych za pośrednictwem funkcji.

Tworzenie aplikacji w języku Python

Zaloguj się do platformy Azure za pomocą polecenia az login , a następnie utwórz i uruchom asystenta przy użyciu następującego zalecanego przykładu języka Python bez hasła:

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))

Aby użyć klucza interfejsu API usługi do uwierzytelniania, możesz utworzyć i uruchomić asystenta przy użyciu następującego przykładu języka Python:

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))

Wyjście

Przebieg ukończony ze stanem: ukończono

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

Informacje o wynikach

W tym przykładzie utworzymy asystenta z włączonym interpreterem kodu. Gdy zadajemy asystentowi pytanie matematyczne, tłumaczy to pytanie na kod języka Python i wykonuje kod w środowisku w trybie piaskownicy, aby określić odpowiedź na pytanie. Kod, który model tworzy i testuje, aby uzyskać odpowiedź, to:

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  

Należy pamiętać, że podczas gdy interpreter kodu daje modelowi możliwość reagowania na bardziej złożone zapytania, konwertując pytania na kod i uruchamiając ten kod iteracyjnie w piaskownicy języka Python, dopóki nie osiągnie rozwiązania, nadal trzeba zweryfikować odpowiedź, aby potwierdzić, że model poprawnie przetłumaczył pytanie na prawidłową reprezentację w kodzie.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Zobacz też

Dokumentacja dotycząca | pakietu kodu | źródłowego (NuGet)

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Zestaw SDK platformy .NET 8
  • Zasób usługi Azure OpenAI z zgodnym modelem w obsługiwanym regionie.
  • Zalecamy zapoznanie się z notatką o przejrzystości odpowiedzialnej sztucznej inteligencji i innymi zasobami odpowiedzialnej sztucznej inteligencji, aby zapoznać się z możliwościami i ograniczeniami usługi Azure OpenAI.
  • Zasób usługi Azure OpenAI z wdrożonym modelem gpt-4 (1106-preview) został użyty do testowania tego przykładu.

Konfiguruj

Tworzenie nowej aplikacji .NET Core

  1. W oknie konsoli (takim jak cmd, PowerShell lub Bash) użyj dotnet new polecenia , aby utworzyć nową aplikację konsolową o nazwie azure-openai-quickstart:

    dotnet new console -n azure-openai-assistants-quickstart
    
  2. Przejdź do katalogu nowo utworzonego folderu aplikacji i skompiluj aplikację za dotnet build pomocą polecenia :

    dotnet build
    

    Dane wyjściowe kompilacji nie powinny zawierać żadnych ostrzeżeń ani błędów.

    ...
    Build succeeded.
     0 Warning(s)
     0 Error(s)
    ...
    
  3. Zainstaluj bibliotekę klienta platformy .NET openAI za pomocą polecenia dotnet add package :

    dotnet add package Azure.AI.OpenAI --prerelease
    

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Azure OpenAI, potrzebujesz punktu końcowego i klucza.

Nazwa zmiennej Wartość
ENDPOINT Punkt końcowy usługi można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz też znaleźć punkt końcowy za pośrednictwem strony Wdrożenia w usłudze Azure AI Studio. Przykładowy punkt końcowy to: https://docs-test-001.openai.azure.com/.
API-KEY Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Możesz użyć wartości KEY1 lub KEY2.

Przejdź do zasobu w witrynie Azure Portal. Sekcję Klucze i punkt końcowy można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Zrzut ekranu przedstawiający interfejs użytkownika przeglądu zasobu usługi Azure OpenAI w witrynie Azure Portal z lokalizacją punktu końcowego i kluczy dostępu w kolorze czerwonym.

Zmienne środowiskowe

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

Ważne

Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w innym miejscu, na przykład w usłudze Azure Key Vault. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach Azure AI.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Uwierzytelnianie bez hasła jest bezpieczniejsze niż alternatywy oparte na kluczach i jest zalecanym podejściem do nawiązywania połączenia z usługami platformy Azure. W przypadku wybrania opcji Uwierzytelnianie bez hasła należy wykonać następujące czynności:

  1. Dodaj pakiet Azure.Identity.

    dotnet add package Azure.Identity
    
  2. Cognitive Services User Przypisz rolę do konta użytkownika. Można to zrobić w witrynie Azure Portal w zasobie OpenAI w obszarze Kontrola dostępu (IAM)>Dodawanie przypisania roli.

  3. Zaloguj się do platformy Azure przy użyciu programu Visual Studio lub interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login.

Tworzenie asystenta

Zaktualizuj plik przy Program.cs użyciu następującego kodu, aby utworzyć asystenta:

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();
}

Uruchom aplikację przy użyciu dotnet run polecenia :

dotnet run

Dane wyjściowe konsoli powinny wyglądać podobnie do następujących:

[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!

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Zobacz też

Dokumentacja pakietu kodu | źródłowego biblioteki referencyjnej | (npm) |

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • obsługa Node.js LTS lub ESM.
  • Interfejs wiersza polecenia platformy Azure używany do uwierzytelniania bez hasła w lokalnym środowisku projektowym, utwórz niezbędny kontekst, logując się przy użyciu interfejsu wiersza polecenia platformy Azure.
  • Zasób usługi Azure OpenAI z zgodnym modelem w obsługiwanym regionie.
  • Zalecamy zapoznanie się z notatką o przejrzystości odpowiedzialnej sztucznej inteligencji i innymi zasobami odpowiedzialnej sztucznej inteligencji, aby zapoznać się z możliwościami i ograniczeniami usługi Azure OpenAI.
  • Zasób usługi Azure OpenAI z wdrożonym modelem gpt-4 (1106-preview) został użyty do testowania tego przykładu.

W przypadku uwierzytelniania bez klucza należy wykonać następujące kroki:

  1. @azure/identity Użyj pakietu.
  2. Cognitive Services User Przypisz rolę do konta użytkownika. Można to zrobić w witrynie Azure Portal w obszarze Kontrola dostępu (IAM)>Dodawanie przypisania roli.
  3. Zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure, takiego jak az login.

Konfiguruj

  1. Utwórz nowy folder assistants-quickstart zawierający aplikację i otwórz program Visual Studio Code w tym folderze za pomocą następującego polecenia:

    mkdir assistants-quickstart && code assistants-quickstart
    
  2. Utwórz element package.json za pomocą następującego polecenia:

    npm init -y
    
  3. Zaktualizuj element do ecMAScript package.json za pomocą następującego polecenia:

    npm pkg set type=module
    
  4. Zainstaluj bibliotekę klienta Asystentów OpenAI dla języka JavaScript za pomocą następujących narzędzi:

    npm install openai
    
  5. W przypadku zalecanego uwierzytelniania bez hasła:

    npm install @azure/identity
    

Pobieranie informacji o zasobie

Nazwa zmiennej Wartość
AZURE_OPENAI_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal.
AZURE_OPENAI_DEPLOYMENT_NAME Ta wartość będzie odpowiadać nazwie niestandardowej wybranej dla wdrożenia podczas wdrażania modelu. Tę wartość można znaleźć w obszarze Wdrożenia modelu zarządzania>zasobami w witrynie Azure Portal.
OPENAI_API_VERSION Dowiedz się więcej o wersjach interfejsu API.

Dowiedz się więcej na temat uwierzytelniania bez klucza i ustawiania zmiennych środowiskowych.

Uwaga

Aby użyć zalecanego uwierzytelniania bez klucza z zestawem SDK, upewnij się, że zmienna AZURE_OPENAI_API_KEY środowiskowa nie jest ustawiona.

Tworzenie asystenta

W naszym kodzie określimy następujące wartości:

Nazwa/nazwisko Opis
Nazwa asystenta Nazwa wdrożenia skojarzona z określonym modelem.
Instrukcje Instrukcje są podobne do komunikatów systemowych, w których podajesz wskazówki dotyczące tego, jak powinien zachowywać się model i do jakiego kontekstu powinien się odwoływać podczas generowania odpowiedzi. Możesz opisać osobowość asystenta, określić na jakie pytania powinien lub nie powinien odpowiadać i określić, w jaki sposób ma formatować odpowiedzi. Możesz również podać przykłady kroków, które ma wykonywać podczas udzielania odpowiedzi.
Model Jest to nazwa wdrożenia.
Interpreter kodu Interpreter kodu zapewnia dostęp do środowiska języka Python w trybie piaskownicy, umożliwiając modelowi testowanie i wykonywania kodu.

Narzędzia

Pojedynczy asystent może uzyskiwać dostęp do maksymalnie 128 narzędzi, w tym code interpreternarzędzi , i dowolnych narzędzi niestandardowych tworzonych za pośrednictwem funkcji.

Tworzenie nowej aplikacji JavaScript

  1. index.js Utwórz plik przy użyciu następującego kodu:

    const { AzureOpenAI } = require("openai");
    const {
      DefaultAzureCredential,
      getBearerTokenProvider,
    } = require("@azure/identity");
    
    // Get environment variables
    const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT;
    const azureOpenAIDeployment = process.env.AZURE_OPENAI_DEPLOYMENT_NAME;
    const azureOpenAIVersion = process.env.OPENAI_API_VERSION;
    
    // Check env variables
    if (!azureOpenAIEndpoint || !azureOpenAIDeployment || !azureOpenAIVersion) {
      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 = () => {
      const credential = new DefaultAzureCredential();
      const scope = "https://cognitiveservices.azure.com/.default";
      const azureADTokenProvider = getBearerTokenProvider(credential, scope);
    
      const assistantsClient = new AzureOpenAI({
        endpoint: azureOpenAIEndpoint,
        apiVersion: azureOpenAIVersion,
        azureADTokenProvider,
      });
      return assistantsClient;
    };
    
    const assistantsClient = getClient();
    
    const options = {
      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" }],
    };
    const role = "user";
    const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";
    
    // Create an assistant
    const assistantResponse = await assistantsClient.beta.assistants.create(
      options
    );
    console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);
    
    // Create a thread
    const assistantThread = await assistantsClient.beta.threads.create({});
    console.log(`Thread created: ${JSON.stringify(assistantThread)}`);
    
    // Add a user question to the thread
    const threadResponse = 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 = 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 = 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)}`);
        }
      }
    }
    
  2. Zaloguj się do platformy Azure przy użyciu następującego polecenia:

    az login
    
  3. Uruchom plik JavaScript.

    node index.js
    

Wyjście

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

Należy pamiętać, że podczas gdy interpreter kodu daje modelowi możliwość reagowania na bardziej złożone zapytania, konwertując pytania na kod i uruchamiając ten kod iteracyjnie w języku JavaScript, dopóki nie osiągnie rozwiązania, nadal trzeba zweryfikować odpowiedź, aby potwierdzić, że model poprawnie przetłumaczył pytanie na prawidłową reprezentację w kodzie.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Przykładowy kod

Zobacz też

Dokumentacja pakietu kodu | źródłowego biblioteki referencyjnej | (npm) |

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • obsługa Node.js LTS lub ESM.
  • Język TypeScript zainstalowany globalnie
  • Interfejs wiersza polecenia platformy Azure używany do uwierzytelniania bez hasła w lokalnym środowisku projektowym, utwórz niezbędny kontekst, logując się przy użyciu interfejsu wiersza polecenia platformy Azure.
  • Zasób usługi Azure OpenAI z zgodnym modelem w obsługiwanym regionie.
  • Zalecamy zapoznanie się z notatką o przejrzystości odpowiedzialnej sztucznej inteligencji i innymi zasobami odpowiedzialnej sztucznej inteligencji, aby zapoznać się z możliwościami i ograniczeniami usługi Azure OpenAI.
  • Zasób usługi Azure OpenAI z wdrożonym modelem gpt-4 (1106-preview) został użyty do testowania tego przykładu.

W przypadku uwierzytelniania bez hasła należy wykonać następujące kroki:

  1. @azure/identity Użyj pakietu.
  2. Cognitive Services User Przypisz rolę do konta użytkownika. Można to zrobić w witrynie Azure Portal w obszarze Kontrola dostępu (IAM)>Dodawanie przypisania roli.
  3. Zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure, takiego jak az login.

Konfiguruj

  1. Utwórz nowy folder assistants-quickstart zawierający aplikację i otwórz program Visual Studio Code w tym folderze za pomocą następującego polecenia:

    mkdir assistants-quickstart && code assistants-quickstart
    
  2. Utwórz element package.json za pomocą następującego polecenia:

    npm init -y
    
  3. Zaktualizuj element do ecMAScript package.json za pomocą następującego polecenia:

    npm pkg set type=module
    
  4. Zainstaluj bibliotekę klienta Asystentów OpenAI dla języka JavaScript za pomocą następujących narzędzi:

    npm install openai
    
  5. W przypadku zalecanego uwierzytelniania bez hasła:

    npm install @azure/identity
    

Pobieranie informacji o zasobie

Nazwa zmiennej Wartość
AZURE_OPENAI_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal.
AZURE_OPENAI_DEPLOYMENT_NAME Ta wartość będzie odpowiadać nazwie niestandardowej wybranej dla wdrożenia podczas wdrażania modelu. Tę wartość można znaleźć w obszarze Wdrożenia modelu zarządzania>zasobami w witrynie Azure Portal.
OPENAI_API_VERSION Dowiedz się więcej o wersjach interfejsu API.

Dowiedz się więcej na temat uwierzytelniania bez klucza i ustawiania zmiennych środowiskowych.

Uwaga

Aby użyć zalecanego uwierzytelniania bez klucza z zestawem SDK, upewnij się, że zmienna AZURE_OPENAI_API_KEY środowiskowa nie jest ustawiona.

Tworzenie asystenta

W naszym kodzie określimy następujące wartości:

Nazwa/nazwisko Opis
Nazwa asystenta Nazwa wdrożenia skojarzona z określonym modelem.
Instrukcje Instrukcje są podobne do komunikatów systemowych, w których podajesz wskazówki dotyczące tego, jak powinien zachowywać się model i do jakiego kontekstu powinien się odwoływać podczas generowania odpowiedzi. Możesz opisać osobowość asystenta, określić na jakie pytania powinien lub nie powinien odpowiadać i określić, w jaki sposób ma formatować odpowiedzi. Możesz również podać przykłady kroków, które ma wykonywać podczas udzielania odpowiedzi.
Model Jest to nazwa wdrożenia.
Interpreter kodu Interpreter kodu zapewnia dostęp do środowiska języka Python w trybie piaskownicy, umożliwiając modelowi testowanie i wykonywania kodu.

Narzędzia

Pojedynczy asystent może uzyskiwać dostęp do maksymalnie 128 narzędzi, w tym code interpreternarzędzi , i dowolnych narzędzi niestandardowych tworzonych za pośrednictwem funkcji.

Tworzenie nowej aplikacji TypeScript

  1. index.ts Utwórz plik przy użyciu następującego kodu:

    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)}`);
        }
      }
    }
    
  2. Utwórz plik do tsconfig.json transpilowania kodu TypeScript i skopiuj następujący kod dla języka ECMAScript.

    {
        "compilerOptions": {
          "module": "NodeNext",
          "target": "ES2022", // Supports top-level await
          "moduleResolution": "NodeNext",
          "skipLibCheck": true, // Avoid type errors from node_modules
          "strict": true // Enable strict type-checking options
        },
        "include": ["*.ts"]
    }
    
  3. Transpiluj z języka TypeScript do języka JavaScript.

    tsc
    
  4. Zaloguj się do platformy Azure przy użyciu następującego polecenia:

    az login
    
  5. Uruchom kod za pomocą następującego polecenia:

    node index.js
    

Wyjście

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

Należy pamiętać, że podczas gdy interpreter kodu daje modelowi możliwość reagowania na bardziej złożone zapytania, konwertując pytania na kod i uruchamiając ten kod iteracyjnie w języku JavaScript, dopóki nie osiągnie rozwiązania, nadal trzeba zweryfikować odpowiedź, aby potwierdzić, że model poprawnie przetłumaczył pytanie na prawidłową reprezentację w kodzie.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Przykładowy kod

Zobacz też

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Środowisko Python w wersji 3.8 lub nowszej
  • Zasób usługi Azure OpenAI z zgodnym modelem w obsługiwanym regionie.
  • Zalecamy zapoznanie się z notatką o przejrzystości odpowiedzialnej sztucznej inteligencji i innymi zasobami odpowiedzialnej sztucznej inteligencji, aby zapoznać się z możliwościami i ograniczeniami usługi Azure OpenAI.
  • Zasób usługi Azure OpenAI z wdrożonym modelem gpt-4 (1106-preview) został użyty do testowania tego przykładu.

Konfiguruj

Pobieranie klucza i punktu końcowego

Aby pomyślnie nawiązać połączenie z usługą Azure OpenAI, potrzebne są następujące elementy:

Nazwa zmiennej Wartość
ENDPOINT Punkt końcowy usługi można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz też znaleźć punkt końcowy za pośrednictwem strony Wdrożenia w usłudze Azure AI Studio. Przykładowy punkt końcowy to: https://docs-test-001.openai.azure.com/.
API-KEY Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DEPLOYMENT-NAME Ta wartość będzie odpowiadać nazwie niestandardowej wybranej dla wdrożenia podczas wdrażania modelu. Tę wartość można znaleźć w obszarze Wdrożenia zarządzania>zasobami w witrynie Azure Portal lub za pośrednictwem strony Wdrożenia w usłudze Azure AI Studio.

Przejdź do zasobu w witrynie Azure Portal. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Zrzut ekranu przedstawiający blok przeglądu zasobu usługi Azure OpenAI w witrynie Azure Portal z lokalizacją punktu końcowego i kluczy dostępu w kolorze czerwonym.

Zmienne środowiskowe

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

Ważne

Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w innym miejscu, na przykład w usłudze Azure Key Vault. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach Azure AI.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Interfejs API REST

Tworzenie asystenta

Uwaga

W przypadku usługi Azure OpenAI model parametr wymaga nazwy wdrożenia modelu. Jeśli nazwa wdrożenia modelu jest inna niż nazwa modelu bazowego, należy dostosować kod do "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"
  }'

Narzędzia

Indywidualny asystent może uzyskać dostęp do maksymalnie 128 narzędzi, w tym code interpreter, a także dowolnych niestandardowych narzędzi tworzonych za pośrednictwem funkcji.

Tworzenie wątku

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

Dodawanie pytania użytkownika do wątku

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

Uruchamianie wątku

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

Pobieranie stanu przebiegu

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

Odpowiedź asystenta

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

Informacje o wynikach

W tym przykładzie utworzymy asystenta z włączonym interpreterem kodu. Gdy zadajemy asystentowi pytanie matematyczne, tłumaczy to pytanie na kod języka Python i wykonuje kod w środowisku w trybie piaskownicy, aby określić odpowiedź na pytanie. Kod, który model tworzy i testuje, aby uzyskać odpowiedź, to:

    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  

Należy pamiętać, że podczas gdy interpreter kodu daje modelowi możliwość reagowania na bardziej złożone zapytania, konwertując pytania na kod i uruchamiając ten kod iteracyjnie w piaskownicy języka Python, dopóki nie osiągnie rozwiązania, nadal trzeba zweryfikować odpowiedź, aby potwierdzić, że model poprawnie przetłumaczył pytanie na prawidłową reprezentację w kodzie.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób usługi Azure OpenAI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Zobacz też