다음을 통해 공유


AI 모델을 사용하여 .NET 함수 호출

이 빠른 시작에서는 로컬 함수 호출을 사용하도록 설정된 AI 모델에 연결하는 .NET 콘솔 AI 채팅 앱을 만듭니다. 앱은 라이브러리를 Microsoft.Extensions.AI 사용하므로 특정 SDK가 아닌 AI 추상화로 코드를 작성할 수 있습니다. AI 추상화는 최소한의 코드 변경으로 기본 AI 모델을 변경할 수 있습니다.

참고 항목

라이브러리는 Microsoft.Extensions.AI 현재 미리 보기로 제공됩니다.

필수 조건

  • .NET 8.0 SDK - .NET 8.0 SDK를 설치합니다.
  • 이 샘플을 실행할 수 있는 OpenAI의 API 키입니다.
  • Windows에서는 PowerShell v7+이 필요합니다. 버전의 유효성을 검사하려면 터미널에서 pwsh(을)를 실행합니다. 현재 버전을 반환해야 합니다. 오류가 반환되면 다음 명령을 실행합니다. dotnet tool update --global PowerShell.

필수 조건

참고 항목

의미 체계 커널을 사용하여 이 문서의 작업을 수행할 수도 있습니다. 의미 체계 커널은 AI 에이전트를 빌드하고 최신 AI 모델을 .NET 앱에 통합할 수 있는 간단한 오픈 소스 SDK입니다.

샘플 리포지토리 복제

앞의 섹션의 단계를 사용하여 고유한 앱을 만들거나 모든 빠른 시작에 대해 완료된 샘플 앱이 포함된 GitHub 리포지토리를 복제할 수 있습니다. Azure OpenAI를 사용하려는 경우 샘플 리포지토리는 Azure OpenAI 리소스를 프로비전할 수 있는 Azure 개발자 CLI 템플릿으로도 구성됩니다.

git clone https://github.com/dotnet/ai-samples.git

앱 만들기

다음 단계를 완료하여 AI 모델에 연결할 .NET 콘솔 앱을 만듭니다.

  1. 컴퓨터의 빈 디렉터리에서 명령을 사용하여 dotnet new 새 콘솔 앱을 만듭니다.

    dotnet new console -o FunctionCallingAI
    
  2. 디렉터리를 앱 폴더로 변경합니다.

    cd FunctionCallingAI
    
  3. 필요한 패키지를 설치합니다.

    dotnet add package Azure.Identity
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  4. Visual Studio 코드 또는 선택한 편집기에서 앱 열기

    code .
    

AI 서비스 만들기

샘플 GitHub 리포지토리는 Azure OpenAI 서비스 및 모델을 프로비전하는 데 사용할 수 있는 azd Azure 개발자 CLI(azd) 템플릿으로 구성됩니다.

  1. 터미널 또는 명령 프롬프트에서 샘플 리포지토리의 디렉터리로 이동합니다 src\quickstarts\azure-openai .

  2. 명령을 azd up 실행하여 Azure OpenAI 리소스를 프로비전합니다. Azure OpenAI 서비스를 만들고 모델을 배포하는 데 몇 분 정도 걸릴 수 있습니다.

    azd up
    

    azd 또한 Azure OpenAI 엔드포인트 및 모델 이름과 같은 샘플 앱에 필요한 사용자 비밀을 구성합니다.

앱 구성

  1. 터미널 또는 명령 프롬프트에서 .NET projet의 루트로 이동합니다.

  2. 다음 명령을 실행하여 OpenAI API 키를 샘플 앱의 암호로 구성합니다.

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    dotnet user-secrets set ModelName <your-openai-model-name>
    

앱 코드 추가

앱은 패키지를 사용하여 Microsoft.Extensions.AI AI 모델에 요청을 보내고 받습니다.

  1. Program.cs 파일에서 다음 코드를 추가하여 AI 모델에 연결하고 인증합니다. ChatClient 또한 함수 호출을 사용하도록 구성되므로 AI 모델에서 코드의 .NET 함수를 호출할 수 있습니다.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.AI;
    using Azure.AI.OpenAI;
    using Azure.Identity;
    
    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string deployment = config["AZURE_OPENAI_GPT_NAME"];
    
    IChatClient client =
        new ChatClientBuilder()
            .UseFunctionInvocation()
            .Use(
                new AzureOpenAIClient(new Uri(endpoint),
                new DefaultAzureCredential())
                    .AsChatClient(deployment));
    

    참고 항목

    DefaultAzureCredential 는 로컬 도구에서 인증 자격 증명을 검색합니다. 템플릿을 azd 사용하여 Azure OpenAI 리소스를 프로비전하지 않는 경우 Visual Studio 또는 Azure CLI에 로그인하는 데 사용한 계정에 역할을 할당 Azure AI Developer 해야 합니다. 자세한 내용은 .NET을 사용하여 Azure AI 서비스에 인증을 참조하세요.

    using Microsoft.Extensions.AI;
    using Microsoft.Extensions.Configuration;
    using OpenAI;
    
    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string model = config["ModelName"];
    string key = config["OpenAIKey"];
    
    IChatClient client =
        new ChatClientBuilder()
            .UseFunctionInvocation()
            .Use(
                new OpenAIClient(key)
                    .AsChatClient(model));
    
  2. AI 모델이 현재 날씨를 가져오기 위해 호출할 수 있는 인라인 함수를 포함하는 새 ChatOptions 개체를 만듭니다. 함수 선언에는 AI 모델에 대한 함수의 용도를 설명하는 논리 및 이름 및 설명 매개 변수를 실행하는 대리자가 포함됩니다.

    // Add a new plugin with a local .NET function that should be available to the AI model
    var chatOptions = new ChatOptions
    {
        Tools = [AIFunctionFactory.Create((string location, string unit) =>
        {
            // Here you would call a weather API to get the weather for the location
            return "Periods of rain or drizzle, 15 C";
        },
        "get_current_weather",
        "Get the current weather in a given location")]
    };
    
  3. 모델에 컨텍스트 및 지침을 제공하기 위해 시스템 프롬프트 chatHistory 를 추가합니다. AI 모델이 질문에 제대로 대답하기 위해 등록된 함수를 호출해야 하는 질문과 함께 사용자 프롬프트를 보냅니다.

    // System prompt to provide context
    List<ChatMessage> chatHistory = [new(ChatRole.System, """
        You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly.
        """)];
    
    // Weather conversation relevant to the registered function
    chatHistory.Add(new ChatMessage(ChatRole.User,
        "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like? "));
    Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
    
    var response = await client.CompleteAsync(chatHistory, chatOptions);
    chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents));
    Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
    
  4. dotnet run 명령을 사용하여 앱을 실행합니다.

    dotnet run
    

    앱은 .NET 함수에서 제공하는 데이터를 포함하는 AI 모델의 완료 응답을 출력합니다. AI 모델은 등록된 함수를 사용할 수 있다는 것을 이해하고 적절한 응답을 생성하기 위해 자동으로 호출했습니다.

리소스 정리

샘플 애플리케이션이나 리소스가 더 이상 필요하지 않으면 해당 배포와 모든 리소스를 제거합니다.

azd down

다음 단계