다음을 통해 공유


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

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

필수 구성 요소

  • .NET 8.0 SDK 이상 - .NET 8.0 SDK설치하기.
  • 이 샘플을 실행할 수 있도록 OpenAI API 키입니다.

필수 구성 요소

앱 만들기

다음 단계를 완료하여 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 --prerelease
    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 --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  4. Visual Studio Code 또는 선택한 편집기에서 앱 열기

    code .
    

AI 서비스 만들기

  1. Azure OpenAI 서비스 및 모델을 프로비전하려면 Azure OpenAI 서비스 리소스 만들기 및 배포 문서의 단계를 완료합니다.

  2. 터미널 또는 명령 프롬프트에서 프로젝트 디렉터리의 루트로 이동합니다.

  3. 다음 명령을 실행하여 샘플 앱에 대한 Azure OpenAI 엔드포인트 및 모델 이름을 구성합니다.

    dotnet user-secrets init
    dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint>
    dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-Azure-OpenAI-model-name>
    dotnet user-secrets set AZURE_OPENAI_API_KEY <your-Azure-OpenAI-key>
    

앱 구성

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

  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 함수를 호출할 수 있도록 함수 호출을 사용하도록 구성됩니다.

    IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string deployment = config["AZURE_OPENAI_GPT_NAME"];
    string apiKey = config["AZURE_OPENAI_API_KEY"];
    
    IChatClient client =
        new ChatClientBuilder(
            new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(apiKey))
            .GetChatClient(deployment).AsIChatClient())
        .UseFunctionInvocation()
        .Build();
    
    using Microsoft.Extensions.AI;
    using Microsoft.Extensions.Configuration;
    using OpenAI;
    
    IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string? model = config["ModelName"];
    string? key = config["OpenAIKey"];
    
    IChatClient client =
        new ChatClientBuilder(new OpenAIClient(key).GetChatClient(model ?? "gpt-4o").AsIChatClient())
        .UseFunctionInvocation()
        .Build();
    
  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",
        "Gets 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()}");
    
    ChatResponse response = await client.GetResponseAsync(chatHistory, chatOptions);
    Console.WriteLine($"Assistant >>> {response.Text}");
    
  4. dotnet run 명령을 사용하여 앱을 실행합니다.

    dotnet run
    

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

리소스 정리

더 이상 필요하지 않은 경우 Azure OpenAI 리소스 및 GPT-4 모델 배포를 삭제합니다.

  1. Azure PortalAzure OpenAI 리소스로 이동합니다.
  2. Azure OpenAI 리소스를 선택한 다음, 삭제선택합니다.

다음 단계