연습 - 자동으로 함수 호출

완료됨

의미 체계 커널 SDK를 사용하면 커널에서 참조되는 함수와 프롬프트를 자동으로 조정할 수 있습니다. 함수와 프롬프트를 수동으로 호출하는 대신 이 도구를 사용하면 시간을 절약하고 애플리케이션을 더욱 스마트하게 만들 수 있습니다. 시도해 보기:

개발 환경 준비

이러한 연습을 위해 시작 프로젝트를 사용할 수 있습니다. 시작 프로젝트를 설정하려면 다음 단계를 따릅니다.

Important

이 단계를 완료하려면 Visual Studio Code 및 .NET Framework 8.0이 설치되어 있어야 합니다. Visual Studio Code C# 개발 키트 확장을 설치해야 할 수도 있습니다.

  1. Visual Studio Code를 엽니다.

  2. Visual Studio Code 시작 섹션에서 Git 리포지토리 복제를 선택합니다.

  3. URL 표시줄에 https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git를 입력합니다.

  4. 파일 탐색기에서 바탕 화면의 폴더와 같이 쉽게 찾고 기억할 수 있는 위치에 새 폴더를 만듭니다.

  5. 리포지토리 대상으로 선택 단추를 클릭합니다.

    프로젝트를 성공적으로 복제하려면 GitHub에 로그인해야 합니다.

  6. Visual Studio Code에서 프로젝트 열기

  7. 탐색기에서 M05-auto-invoke-functions/M05-Project 폴더를 마우스 오른쪽 단추로 클릭하고 통합 터미널에서 열기를 클릭합니다.

  8. M05-auto-invoke-functions/M05-Project 폴더 확장

    "Program.cs" 파일이 표시됩니다.

  9. Program.cs 파일을 열고 Azure OpenAI Services 배포 이름, API 키, 엔드포인트로 다음 변수를 업데이트합니다.

    string yourDeploymentName = "";
    string yourEndpoint = "";
    string yourAPIKey = "";
    

이제 연습을 시작할 준비가 되었습니다. 행운을 빕니다!

사용자에게 콘서트 제안

  1. 'Plugins' 폴더에 'MusicConcertPlugin.cs'라는 새 파일을 만듭니다.

  2. MusicConcertPlugin' 파일에 다음 코드를 추가합니다.

    using System.ComponentModel;
    using Microsoft.SemanticKernel;
    
    public class MusicConcertPlugin
    {
        [KernelFunction, Description("Get a list of upcoming concerts")]
        public static string GetTours()
        {
            string dir = Directory.GetCurrentDirectory();
            string content = File.ReadAllText($"{dir}/data/concertdates.txt");
            return content;
        }
    }
    

    GetTours 함수는 'concertdates.txt'라는 파일을 읽고 콘텐츠를 반환합니다. 이 함수는 예정된 콘서트 목록을 검색하는 데 사용됩니다.

    다음으로, 사용자가 최근에 연주한 음악을 기반으로 콘서트를 제안하도록 LLM에 요청하는 프롬프트를 만듭니다.

  3. 'Prompts' 폴더에 'SuggestConcert'라는 새 폴더를 만듭니다.

  4. 다음 콘텐츠로 'SuggestConcert' 폴더에 'config.json' 파일을 만듭니다.

    {
        "schema": 1,
        "type": "completion",
        "description": "Suggest a concert to the user",
        "execution_settings": {
            "default": {
                "max_tokens": 4000,
                "temperature": 0
            }
        },
        "input_variables": [
            {
                "name": "upcomingConcerts",
                "description": "A list of artist's upcoming concerts",
                "required": true
            },
            {
                "name": "recentlyPlayedSongs",
                "description": "A list of songs recently played by the user",
                "required": true
            },
            {
                "name": "location",
                "description": "The user's location",
                "required": true
            }
        ]
    }
    
  5. 다음 콘텐츠로 'SuggestConcert' 폴더에 'skprompt.txt' 파일을 만듭니다.

    Based on the user's recently played songs:
    {{$recentlyPlayedSongs}}
    
    And a list of upcoming concerts:
    {{$upcomingConcerts}}
    
    Suggest an upcoming concert. The user lives in {{$location}}, 
    please recommend a relevant concert that is close to their location.
    

    이 프롬프트는 사용자가 최근에 재생한 노래와 위치를 기반으로 콘서트를 제안하도록 LLM에 요청합니다. 다음으로, 자동 함수 호출 설정을 사용하도록 설정합니다.

  6. Program.cs 파일 및 다음 using 문을 엽니다.

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    이 패키지를 사용하면 자동 함수 호출 설정을 사용할 수 있습니다.

  7. Program.cs 파일을 다음 코드로 업데이트합니다.

    kernel.ImportPluginFromType<MusicLibraryPlugin>();
    kernel.ImportPluginFromType<MusicConcertPlugin>();
    kernel.ImportPluginFromPromptDirectory("Prompts");
    
    OpenAIPromptExecutionSettings settings = new()
    {
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
    };
    
    string prompt = @"I live in Portland OR USA. Based on my recently 
        played songs and a list of upcoming concerts, which concert 
        do you recommend?";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    
  8. 터미널에 dotnet run을 입력합니다.

    생성된 제안은 최근 재생된 노래와 위치를 기반으로 콘서트를 권장해야 합니다. 출력은 다음 응답과 유사할 수 있습니다.

    Based on your recently played songs and your location in Portland, OR, I would recommend attending the upcoming concert of Lisa Taylor. She will be performing in Portland on April 16, 2024. This concert would be a great opportunity for you to enjoy live music and experience Lisa Taylor' beautiful songs.
    

    의미론적 커널은 사용할 적절한 플러그인 함수를 자동으로 감지하여 올바른 매개변수를 전달합니다. 위치를 수정하여 권장 사항이 어떻게 변경되는지 확인할 수 있습니다. 프롬프트를 변경하여 LLM에 라이브러리에서 노래를 제안하도록 지시할 수도 있습니다.

AutoInvokeKernelFunctions 설정을 사용하면 의미론적 커널이 커널에 추가된 함수 및 프롬프트를 자동으로 호출할 수 있습니다. 이 도구를 사용하면 더 적은 코드를 사용하여 동적이고 강력한 애플리케이션을 만들 수 있습니다.