Übung – Benutzerabsicht weiterleiten
In dieser Übung erkennen Sie die Absicht des Benutzers und leiten die Unterhaltung an die gewünschten Plug-Ins weiter. Sie können ein bereitgestelltes Plug-In verwenden, um die Absicht des Benutzers abzurufen. Fangen wir an!
Aktualisieren Sie Ihre
Program.cs
Datei mit dem folgenden Code:kernel.ImportPluginFromType<CurrencyConverter>(); var prompts = kernel.ImportPluginFromPromptDirectory("Prompts"); Console.WriteLine("What would you like to do?"); var input = Console.ReadLine(); var intent = await kernel.InvokeAsync<string>( prompts["GetIntent"], new() {{ "input", input }} );
In diesem Code verwenden Sie die
GetIntent
Eingabeaufforderung, um die Absicht des Benutzers zu erkennen. Anschließend speichern Sie die Absicht in einer Variablen namensintent
. Als Nächstes leiten Sie die Absicht an IhrCurrencyConverter
-Plug-In weiter.Fügen Sie ihrer
Program.cs
-Datei den folgenden Code hinzu:switch (intent) { case "ConvertCurrency": var currencyText = await kernel.InvokeAsync<string>( prompts["GetTargetCurrencies"], new() {{ "input", input }} ); var currencyInfo = currencyText!.Split("|"); var result = await kernel.InvokeAsync("CurrencyConverter", "ConvertAmount", new() { {"targetCurrencyCode", currencyInfo[0]}, {"baseCurrencyCode", currencyInfo[1]}, {"amount", currencyInfo[2]}, } ); Console.WriteLine(result); break; default: Console.WriteLine("Other intent detected"); break; }
Das
GetIntent
-Plug-In gibt die folgenden Werte zurück: ConvertCurrency, SuggestDestinations, SuggestActivities, Translate, HelpfulPhrases, Unknown. Sie verwenden eineswitch
-Anweisung, um die Absicht des Benutzers an das entsprechende Plug-In weiterzuleiten.Wenn der Benutzer die Währung umrechnen möchte, verwenden Sie die
GetTargetCurrencies
Eingabeaufforderung, um die Währungsinformationen abzurufen. Anschließend verwenden Sie dasCurrencyConverter
-Plug-In, um den Betrag zu konvertieren.Als Nächstes fügen Sie einige Fälle hinzu, um die anderen Absichten zu behandeln. Verwenden wir nun die automatische Funktionsaufruffunktion des semantischen Kernel-SDK, um die Absicht an die verfügbaren Plug-Ins weiterzuleiten.
Erstellen Sie die Einstellung für den automatischen Funktionsaufruf, indem Sie der datei
Program.cs
den folgenden Code hinzufügen:kernel.ImportPluginFromType<CurrencyConverter>(); var prompts = kernel.ImportPluginFromPromptDirectory("Prompts"); OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }; Console.WriteLine("What would you like to do?"); var input = Console.ReadLine(); var intent = await kernel.InvokeAsync<string>( prompts["GetIntent"], new() {{ "input", input }} );
Als Nächstes fügen Sie der Switch-Anweisung Fälle für die anderen Absichten hinzu.
Aktualisieren Sie Ihre
Program.cs
Datei mit dem folgenden Code:switch (intent) { case "ConvertCurrency": // ...Code you entered previously... break; case "SuggestDestinations": case "SuggestActivities": case "HelpfulPhrases": case "Translate": var autoInvokeResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(autoInvokeResult); break; default: Console.WriteLine("Other intent detected"); break; }
In diesem Code verwenden Sie die einstellung
AutoInvokeKernelFunctions
, um Automatisch Funktionen und Eingabeaufforderungen aufzurufen, auf die im Kernel verwiesen wird. Wenn der Benutzer die Währung umrechnen möchte, führt das plug-InCurrencyConverter
seine Aufgabe aus.Wenn der Benutzer Beabsichtigt ist, Ziel- oder Aktivitätsvorschläge abzurufen, einen Ausdruck zu übersetzen oder hilfreiche Ausdrücke in einer Sprache zu erhalten, ruft die einstellung
AutoInvokeKernelFunctions
automatisch die vorhandenen Plug-Ins auf, die im Projektcode enthalten waren.Sie können auch Code hinzufügen, um die Eingabe des Benutzers als Eingabeaufforderung für das große Sprachmodell (LLM) auszuführen, wenn dies in keinem dieser Absichtsfälle fällt.
Aktualisieren Sie den Standardfall mit dem folgenden Code:
default: Console.WriteLine("Sure, I can help with that."); var otherIntentResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(otherIntentResult); break;
Wenn der Benutzer nun eine andere Absicht hat, kann der LLM die Anforderung des Benutzers verarbeiten. Probieren wir es aus!
Überprüfen Sie Ihre Arbeit
In dieser Aufgabe führen Sie Ihre Anwendung aus und überprüfen, ob der Code ordnungsgemäß funktioniert.
Geben Sie
dotnet run
im Terminal ein. Wenn Sie dazu aufgefordert werden, geben Sie einen Text ein, der der folgenden Eingabeaufforderung ähnelt:What would you like to do? How many TTD is 50 Qatari Riyals?
Sie sollten eine Ausgabe sehen, die der folgenden Antwort ähnelt:
$50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
Geben Sie
dotnet run
im Terminal ein. Wenn Sie dazu aufgefordert werden, geben Sie einen Text ein, der der folgenden Eingabeaufforderung ähnelt:What would you like to do? I want to go somewhere that has lots of warm sunny beaches and delicious, spicy food!
Die Ausgabe sollte ähnlich wie die folgende Antwort aussehen:
Based on your preferences for warm sunny beaches and delicious, spicy food, I have a few destination recommendations for you: 1. Thailand: Known for its stunning beaches, Thailand offers a perfect combination of relaxation and adventure. You can visit popular beach destinations like Phuket, Krabi, or Koh Samui, where you'll find crystal-clear waters and white sandy shores. Thai cuisine is famous for its spiciness, so you'll have plenty of mouthwatering options to try, such as Tom Yum soup, Pad Thai, and Green Curry. 2. Mexico: Mexico is renowned for its beautiful coastal regions and vibrant culture. You can explore destinations like Cancun, Playa del Carmen, or Tulum, which boast stunning beaches along the Caribbean Sea. Mexican cuisine is rich in flavors and spices, offering a wide variety of dishes like tacos, enchiladas, and mole sauces that will satisfy your craving for spicy food. ... These destinations offer a perfect blend of warm sunny beaches and delicious, spicy food, ensuring a memorable trip for you. Let me know if you need any further assistance or if you have any specific preferences for your trip!
Geben Sie
dotnet run
im Terminal ein. Wenn Sie dazu aufgefordert werden, geben Sie einen Text ein, der der folgenden Eingabeaufforderung ähnelt:What would you like to do? Can you give me a recipe for chicken satay?
Sie sollten eine Antwort ähnlich der folgenden Antwort sehen:
Sure, I can help with that. Certainly! Here's a recipe for chicken satay: ...
Die Absicht sollte an Ihren Standardfall weitergeleitet werden und das LLM sollte die Anforderung für ein Hühner-Satay-Rezept verarbeiten, das ist ja lecker!
Anmerkung
Wenn Ihr Code die erwartete Ausgabe nicht erzeugt, können Sie den Code im Ordner Lösung überprüfen.
Als Nächstes passen wir die Routinglogik an, um bestimmten Plugins einen Konversationsverlauf bereitzustellen. Das Bereitstellen des Verlaufs ermöglicht es den Plug-Ins, kontextbezogenere Antworten auf die Anforderungen des Benutzers abzurufen.