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 poleceniepwsh
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
- Zestaw .NET 8 SDK — zainstaluj zestaw .NET 8 SDK.
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Interfejs wiersza polecenia dla deweloperów platformy Azure — instalowanie lub aktualizowanie interfejsu wiersza polecenia dla deweloperów platformy Azure.
- Dostęp do usługi Azure OpenAI.
- W systemie Windows wymagany jest program PowerShell
v7+
. Aby zweryfikować wersję, uruchom poleceniepwsh
w terminalu. Powinna zwrócić bieżącą wersję. Jeśli zwraca błąd, wykonaj następujące polecenie:dotnet tool update --global PowerShell
.
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
- Interfejs wiersza polecenia dla deweloperów platformy Azure
- Interfejs wiersza polecenia platformy Azure
- Azure Portal
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.
W terminalu lub wierszu polecenia przejdź do katalogu src\quickstarts\azure-openai przykładowego repozytorium.
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
W terminalu lub wierszu polecenia przejdź do
openai\02-HikerAI
katalogu.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>
Użyj polecenia ,
dotnet run
aby uruchomić aplikację:dotnet run
W terminalu lub wierszu polecenia przejdź do
azure-openai\02-HikerAI
katalogu.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 up
programu 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ć.