연습 - 사용자 의도 라우팅
이 연습에서는 사용자의 의도를 검색하고 대화를 원하는 플러그 인으로 라우팅합니다. 제공된 플러그 인을 사용하여 사용자의 의도를 검색할 수 있습니다. 그럼 시작하겠습니다.
다음 코드를 사용하여
Program.cs
파일을 업데이트합니다.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 }} );
이 코드에서는
GetIntent
프롬프트를 사용하여 사용자의 의도를 검색합니다. 그런 다음intent
라는 변수에 의도를 저장합니다. 다음으로 의도를CurrencyConverter
플러그 인으로 라우팅합니다.Program.cs
파일에 다음 코드를 추가합니다.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; }
GetIntent
플러그 인은 다음 값을 반환합니다. ConvertCurrency, SuggestDestinations, SuggestActivities, Translate, HelpfulPhrases, Unknown.switch
문을 사용하여 사용자의 의도를 적절한 플러그 인으로 라우팅합니다.사용자의 의도가 통화를 환산하는 것이라면
GetTargetCurrencies
프롬프트를 사용하여 통화 정보를 검색합니다. 그런 다음CurrencyConverter
플러그 인을 사용하여 금액을 변환합니다.다음으로 다른 의도를 처리하기 위해 몇 가지 사례를 추가합니다. 지금은 의미 체계 커널 SDK의 자동 함수 호출 기능을 사용하여 의도를 사용 가능한 플러그 인으로 라우팅해 보겠습니다.
Program.cs
파일에 다음 코드를 추가하여 자동 함수 호출 설정을 만듭니다.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 }} );
다음으로 다른 의도에 대한 스위치 문에 사례를 추가합니다.
다음 코드를 사용하여
Program.cs
파일을 업데이트합니다.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; }
이 코드에서는
AutoInvokeKernelFunctions
설정을 사용하여 커널에서 참조되는 함수와 프롬프트를 자동으로 호출합니다. 사용자의 의도가 통화 환산이라면CurrencyConverter
플러그 인이 해당 작업을 수행합니다.사용자의 의도가 대상 또는 작업 제안을 가져오거나, 구를 번역하거나, 특정 언어로 유용한 구를 가져오는 것인 경우,
AutoInvokeKernelFunctions
설정은 프로젝트 코드에 포함된 기존 플러그 인을 자동으로 호출합니다.이러한 의도 사례에 속하지 않는 경우 사용자 입력을 LLM(대규모 언어 모델)에 대한 프롬프트로 실행하는 코드를 추가할 수도 있습니다.
다음 코드를 사용하여 기본 사례를 업데이트합니다.
default: Console.WriteLine("Sure, I can help with that."); var otherIntentResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(otherIntentResult); break;
이제 사용자가 다른 의도를 갖고 있는 경우 LLM이 사용자의 요청을 처리할 수 있습니다. 시도해 보기:
작업 확인
이 작업에서는 애플리케이션을 실행하고 코드가 올바르게 작동하는지 확인합니다.
터미널에
dotnet run
을 입력합니다. 메시지가 표시되면 다음 프롬프트와 유사한 텍스트를 입력합니다.What would you like to do? How many TTD is 50 Qatari Riyals?
다음 응답과 유사한 출력이 표시됩니다.
$50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
터미널에
dotnet run
을 입력합니다. 메시지가 표시되면 다음 프롬프트와 유사한 텍스트를 입력합니다.What would you like to do? I want to go somewhere that has lots of warm sunny beaches and delicious, spicy food!
다음 응답과 유사한 출력이 표시됩니다.
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!
터미널에
dotnet run
을 입력합니다. 메시지가 표시되면 다음 프롬프트와 유사한 텍스트를 입력합니다.What would you like to do? Can you give me a recipe for chicken satay?
다음 응답과 유사한 응답이 표시됩니다.
Sure, I can help with that. Certainly! Here's a recipe for chicken satay: ...
의도는 기본 사례로 라우팅되어야 하며 LLM은 치킨 사테 레시피 요청을 처리해야 합니다. 정말 맛있습니다!
참고 항목
코드가 예상한 결과를 생성하지 못하는 경우 Solution 폴더에서 코드를 검토할 수 있습니다.
다음으로 특정 플러그 인에 일부 대화 기록을 제공하도록 라우팅 논리를 수정해 보겠습니다. 기록을 제공하면 플러그 인이 사용자 요청에 대해 보다 상황에 맞는 응답을 검색할 수 있습니다.