Udostępnij za pośrednictwem


Uzyskiwanie szczegółowych informacji o danych z aplikacji do czatu platformy .NET AI

Wprowadzenie do tworzenia sztucznej inteligencji przy użyciu aplikacji konsolowej platformy .NET 8 w celu nawiązania połączenia z modelem OpenAI gpt-3.5-turbo . Połączysz się z modelem sztucznej inteligencji przy użyciu jądra semantycznego, aby analizować dane turystyczne i udostępniać szczegółowe informacje.

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.

Wprowadzenie do tworzenia sztucznej inteligencji przy użyciu aplikacji konsolowej platformy .NET 8 w celu nawiązania połączenia z modelem OpenAI gpt-3.5-turbo wdrożonym na platformie Azure. Połączysz się z modelem sztucznej inteligencji przy użyciu jądra semantycznego, aby analizować dane turystyczne i udostępniać szczegółowe informacje.

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 czatu turystycznego

  1. W terminalu lub wierszu polecenia przejdź do openai\03-ChattingAboutMyHikes 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.

Cała aplikacja znajduje się w pliku Program.cs . Pierwsze kilka wierszy kodu ustawia wartości konfiguracji i pobiera 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);

Po utworzeniu OpenAIChatCompletionService klienta aplikacja odczytuje zawartość pliku hikes.md i używa go do udostępniania większego kontekstu modelowi przez dodanie monitu systemowego. Ma to wpływ na zachowanie modelu i wygenerowane zakończenia podczas konwersacji.

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 ładuje 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);

Po utworzeniu OpenAIChatCompletionService klienta aplikacja odczytuje zawartość pliku hikes.md i używa go do udostępniania większego kontekstu modelowi przez dodanie monitu systemowego. Ma to wpływ na zachowanie modelu i wygenerowane zakończenia podczas konwersacji.

// Provide context for the AI model
ChatHistory chatHistory = new($"""
    You are upbeat and friendly. You introduce yourself when first saying hello. 
    Provide a short answer only based on the user hiking records below:  

    {File.ReadAllText("hikes.md")}
    """);
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Poniższy kod dodaje użytkownikowi monit do modelu przy użyciu AddUserMessage funkcji . Funkcja GetChatMessageContentAsync instruuje model, aby wygenerował odpowiedź na podstawie systemu i monitów użytkownika.

// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(
    await service.GetChatMessageContentAsync(
        chatHistory,
        new OpenAIPromptExecutionSettings()
        { 
            MaxTokens = 400 
        }));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Aplikacja dodaje odpowiedź z modelu do chatHistory elementu , aby zachować historię czatu lub kontekst.

// Continue the conversation with a question.
chatHistory.AddUserMessage(
    "I would like to know the ratio of the hikes I've done in Canada compared to other countries.");

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(await service.GetChatMessageContentAsync(
    chatHistory,
    new OpenAIPromptExecutionSettings()
    { 
        MaxTokens = 400 
    }));

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Dostosuj monity systemowe lub użytkownika o podanie różnych pytań i kontekstu:

  • Ile razy wędrowałem, kiedy padało deszcz?
  • Ile razy w 2021 r. wędrowałem?

Model generuje odpowiednią odpowiedź na każdy monit na podstawie Twoich danych wejściowych.

Czyszczenie zasobów

Jeśli nie potrzebujesz już przykładowej aplikacji lub zasobów, usuń odpowiednie wdrożenie i wszystkie zasoby.

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