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