Udostępnij za pośrednictwem


Tworzenie aplikacji do czatu sztucznej inteligencji przy użyciu platformy .NET

Rozpocznij pracę z interfejsem OpenAI i jądrem semantycznym, tworząc prostą aplikację do czatu konsolowego platformy .NET 8. Aplikacja zostanie uruchomiona lokalnie i będzie używać modelu OpenAI gpt-3.5-turbo . Wykonaj następujące kroki, aby uzyskać dostęp do interfejsu OpenAI i dowiedzieć się, jak używać jądra semantycznego.

Wymagania wstępne

  • Zestaw .NET 8.0 SDK — zainstaluj zestaw .NET 8.0 SDK.
  • Klucz interfejsu API z interfejsu OpenAI , aby można było uruchomić ten przykład.
  • W systemie Windows wymagany jest program PowerShell v7+ . Aby zweryfikować wersję, uruchom polecenie pwsh w terminalu. Powinna zwrócić bieżącą wersję. Jeśli zwraca błąd, wykonaj następujące polecenie: dotnet tool update --global PowerShell.

Rozpocznij pracę z interfejsem OpenAI i jądrem semantycznym, tworząc prostą aplikację do czatu konsolowego platformy .NET 8. Aplikacja zostanie uruchomiona lokalnie i połączy się z modelem OpenAI gpt-35-turbo wdrożonym w usłudze Azure OpenAI. Wykonaj następujące kroki, aby aprowizować usługę Azure OpenAI i dowiedzieć się, jak używać jądra semantycznego.

Wymagania wstępne

Pobieranie przykładowego projektu

Sklonuj repozytorium GitHub zawierające przykładowe aplikacje dla wszystkich przewodników Szybki start:

git clone https://github.com/dotnet/ai-samples.git

Tworzenie usługi Azure OpenAI

Przykładowe repozytorium GitHub jest ustrukturyzowane jako szablon interfejsu wiersza polecenia dla deweloperów platformy Azure (azd), którego azd można użyć do aprowizacji usługi Azure OpenAI i modelu.

  1. W terminalu lub wierszu polecenia przejdź do katalogu src\quickstarts\azure-openai przykładowego repozytorium.

  2. Uruchom polecenie , azd up aby aprowizować zasoby usługi Azure OpenAI. Utworzenie usługi Azure OpenAI i wdrożenie modelu może potrwać kilka minut.

    azd up
    

    azd Konfiguruje również wymagane wpisy tajne użytkownika dla przykładowej aplikacji, takie jak klucz dostępu OpenAI.

    Uwaga

    Jeśli podczas wdrażania wystąpi błąd azd up , odwiedź sekcję rozwiązywania problemów.

Wypróbuj przykład HikerAI

  1. W terminalu lub wierszu polecenia przejdź do openai\02-HikerAI katalogu.

  2. Uruchom następujące polecenia, aby skonfigurować klucz interfejsu API OpenAI jako wpis tajny dla przykładowej aplikacji:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Użyj polecenia , dotnet run aby uruchomić aplikację:

    dotnet run
    
  1. W terminalu lub wierszu polecenia przejdź do azure-openai\02-HikerAI katalogu.

  2. Użyj polecenia , dotnet run aby uruchomić aplikację:

    dotnet run
    

    Napiwek

    Jeśli zostanie wyświetlony komunikat o błędzie, zasoby usługi Azure OpenAI mogą nie zakończyć wdrażania. Poczekaj kilka minut i spróbuj ponownie.

Eksplorowanie kodu

Aplikacja używa Microsoft.SemanticKernel pakietu do wysyłania i odbierania żądań do usługi OpenAI.

Kod aplikacji znajduje się w pliku Program.cs . Pierwsze kilka wierszy kodu ustawia wartości konfiguracji i pobierz klucz OpenAI, który został wcześniej ustawiony przy użyciu dotnet user-secrets polecenia .

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];

Usługa OpenAIChatCompletionService ułatwia żądania i odpowiedzi.

// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);

Eksplorowanie kodu

Aplikacja używa Microsoft.SemanticKernel pakietu do wysyłania i odbierania żądań do usługi Azure OpenAI wdrożonej na platformie Azure.

Cała aplikacja znajduje się w pliku Program.cs . Pierwsze kilka wierszy kodu pobiera wpisy tajne i wartości konfiguracji, które zostały ustawione dla dotnet user-secrets Ciebie podczas aprowizacji aplikacji.

// Retrieve the local secrets saved during the Azure deployment
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

Usługa AzureOpenAIChatCompletionService ułatwia żądania i odpowiedzi.

// Create the Azure OpenAI Chat Completion Service
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);

Dodaj monit systemowy, aby podać więcej kontekstu do modelu, który ma wpływ na zachowanie modelu i wygenerowane uzupełnienia podczas konwersacji.

// Start the conversation with context for the AI model
ChatHistory chatHistory = new("""
    You are a hiking enthusiast who helps people discover fun hikes in their area. 
    You are upbeat and friendly. You introduce yourself when first saying hello.
    When helping people out, you always ask them for this information
    to inform the hiking recommendation you provide:

    1. Where they are located
    2. What hiking intensity they are looking for

    You will then provide three suggestions for nearby hikes that vary in length
    after you get that information. You will also share an interesting fact about
    the local nature on the hikes when making a recommendation.
    """);

Dodaj wiadomość użytkownika do historii czatów AddUserMessage przy użyciu funkcji . GetChatMessageContentAsync Użyj funkcji , aby poinstruować model, aby wygenerował odpowiedź na podstawie monitu systemowego i żądania użytkownika.


// Add user message to chat history
chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?");

// Print User Message to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

// Get response
var response = await service.GetChatMessageContentAsync(
    chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 });

Dodaj odpowiedź z trybu , aby zachować historię czatów.

// Add response to chat history
chatHistory.Add(response);

// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Dostosuj monit systemowy i komunikat użytkownika, aby zobaczyć, jak model reaguje, aby ułatwić znalezienie takiej podwyżki.

Czyszczenie zasobów

Usuń odpowiednie wdrożenie i wszystkie zasoby, gdy nie potrzebujesz już przykładowej aplikacji lub zasobów.

azd down

Rozwiązywanie problemów

W systemie Windows po uruchomieniu azd upprogramu mogą zostać wyświetlone następujące komunikaty o błędach:

postprovision.ps1 nie jest podpisany cyfrowo. Skrypt nie zostanie wykonany w systemie

Skrypt postprovision.ps1 jest wykonywany w celu ustawienia wpisów tajnych użytkownika platformy .NET używanych w aplikacji. Aby uniknąć tego błędu, uruchom następujące polecenie programu PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Następnie uruchom azd up ponownie polecenie.

Inny możliwy błąd:

Polecenie "pwsh" nie jest rozpoznawane jako wewnętrzne lub zewnętrzne polecenie, program operacyjny lub plik wsadowy. OSTRZEŻENIE: hak "postprovision" nie powiódł się z kodem zakończenia: "1", ścieżka: ".\infra\post-script\postprovision.ps1". : kod zakończenia: 1 Wykonanie będzie kontynuowane, ponieważ właściwość ContinueOnError została ustawiona na wartość true.

Skrypt postprovision.ps1 jest wykonywany w celu ustawienia wpisów tajnych użytkownika platformy .NET używanych w aplikacji. Aby uniknąć tego błędu, ręcznie uruchom skrypt przy użyciu następującego polecenia programu PowerShell:

.\infra\post-script\postprovision.ps1

Aplikacje sztucznej inteligencji platformy .NET mają teraz skonfigurowane wpisy tajne użytkownika i można je przetestować.

Następne kroki