C# - Semantic Kernel의 Prompt chaining 예제
지난 글에서,
C# - (OpenAI 기반의) Microsoft Semantic Kernel을 이용한 자연어 처리
; https://www.sysnet.pe.kr/2/0/13345
글의 내용을 요약하라고 지시하는 SemanticFunction을 제작(
Running prompts with input parameters)해 봤습니다.
동일한 REAME.md에 또 다른 예제가 있는데요,
Get Started with Semantic Kernel
; https://github.com/microsoft/semantic-kernel/blob/main/dotnet/README.md
프롬프트를 연결(Prompt chaining), 즉 semantic function을 일종의 파이프라인 처리를 할 수 있는 구조를 만드는 데, 코드를 보면 금방 ^^ 이해하실 수 있습니다.
string translationPrompt = @"{{$input}}
Translate the text to math.";
string summarizePrompt = @"{{$input}}
Give me a TLDR with the fewest words.";
var translator = kernel.CreateSemanticFunction(translationPrompt);
var summarize = kernel.CreateSemanticFunction(summarizePrompt);
string inputText = @"
1st Law of Thermodynamics - Energy cannot be created or destroyed.
2nd Law of Thermodynamics - For a spontaneous process, the entropy of the universe increases.
3rd Law of Thermodynamics - A perfect crystal at zero Kelvin has zero entropy.";
// Run two prompts in sequence (prompt chaining)
var output = await kernel.RunAsync(inputText, translator, summarize);
Console.WriteLine(output);
열역학 법칙의 내용을 수학적 표기로 바꾸고(translationPrompt), 그 결과를 다시 요약(summarizePrompt)하라고 시키고 있습니다. 사실 개별 작업을 따로 하면,
Console.WriteLine(await translator.InvokeAsync(inputText));
/* 출력 결과
1st Law of Thermodynamics: ΔE = 0
2nd Law of Thermodynamics: ΔSuniv > 0
3rd Law of Thermodynamics: S = 0 at T = 0K
*/
Console.WriteLine(await summarize.InvokeAsync(inputText));
/* 출력 결과
Energy can't be created/destroyed; entropy increases in spontaneous processes; zero entropy at 0K.
*/
위와 같은 결과를 얻는데, 따지고 보면 결국 체이닝은 다음과 같이 호출을 나누는 것과 같습니다.
Microsoft.SemanticKernel.Orchestration.SKContext output = await translator.InvokeAsync(inputText);
Console.WriteLine(await summarize.InvokeAsync(output)); // 또는, output.Result 전달
/* 출력 결과
ΔE = 0, ΔSuniv > 0, S = 0 at 0K.
*/
별거 아니죠?!!! ^^
(
첨부 파일은 이 글의 예제 코드를 포함합니다.)
예상할 수 있듯이, 이런 실습을 하는 호출까지도 OpenAI API 사용량에 포함된다는 점, 유의하시면 되겠습니다. ^^
참고로, 위와 같은 예제들을 실습할 수 있는
C# Jupyter notebook도 함께 제공하고 있습니다.
Semantic Kernel Notebooks
; https://github.com/microsoft/semantic-kernel/blob/main/dotnet/README.md#semantic-kernel-notebooks
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]