본문 바로가기
AI2025년 12월 20일7분 읽기

Semantic Kernel — C#/.NET에서 AI 에이전트 구축

YS
김영삼
조회 310
Semantic Kernel — C#/.NET에서 AI 에이전트 구축

Semantic Kernel로 AI 에이전트 구축하기

Semantic Kernel은 Microsoft가 개발한 오픈소스 SDK로, LLM을 기존 애플리케이션에 통합하는 것을 쉽게 만들어줍니다. 플러그인 기반 아키텍처로 AI 에이전트를 구성할 수 있습니다.

프로젝트 설정

// NuGet 패키지 설치
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Core

// Program.cs - Kernel 초기화
using Microsoft.SemanticKernel;

var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4",
    endpoint: "https://my-resource.openai.azure.com/",
    apiKey: Environment.GetEnvironmentVariable("AZURE_OPENAI_KEY")!
);
var kernel = builder.Build();

네이티브 플러그인 작성

using Microsoft.SemanticKernel;
using System.ComponentModel;

public class WeatherPlugin
{
    [KernelFunction, Description("현재 날씨 정보를 가져옵니다")]
    public async Task<string> GetWeather(
        [Description("도시 이름")] string city)
    {
        var client = new HttpClient();
        var response = await client.GetStringAsync(
            $"https://api.weather.com/v1/current?city={city}");
        return response;
    }

    [KernelFunction, Description("일기 예보를 가져옵니다")]
    public async Task<string> GetForecast(
        [Description("도시 이름")] string city,
        [Description("예보 일수")] int days = 5)
    {
        return $"{city}의 {days}일 예보: 맑음 → 흐림 → 비";
    }
}

프롬프트 플러그인

// Plugins/SummaryPlugin/Summarize/config.json
{
  "schema": 1,
  "description": "텍스트를 요약합니다",
  "execution_settings": {
    "default": {
      "max_tokens": 500,
      "temperature": 0.3
    }
  },
  "input_variables": [
    {
      "name": "input",
      "description": "요약할 텍스트",
      "required": true
    }
  ]
}

자동 함수 호출 (AI 에이전트)

using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;

kernel.Plugins.AddFromType<WeatherPlugin>();
kernel.Plugins.AddFromType<CalendarPlugin>();

var settings = new OpenAIPromptExecutionSettings
{
    ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};

var chatService = kernel.GetRequiredService<IChatCompletionService>();
var history = new ChatHistory();
history.AddSystemMessage("당신은 일정과 날씨를 관리하는 비서입니다.");

while (true)
{
    Console.Write("You: ");
    var input = Console.ReadLine()!;
    history.AddUserMessage(input);

    var response = await chatService.GetChatMessageContentAsync(
        history, settings, kernel);

    Console.WriteLine($"AI: {response.Content}");
    history.AddAssistantMessage(response.Content!);
}

메모리와 벡터 검색

using Microsoft.SemanticKernel.Memory;

var memoryBuilder = new MemoryBuilder();
memoryBuilder.WithAzureOpenAITextEmbeddingGeneration(
    "text-embedding-ada-002", endpoint, apiKey);
memoryBuilder.WithQdrantMemoryStore("http://localhost:6333", 1536);
var memory = memoryBuilder.Build();

await memory.SaveInformationAsync("docs",
    "Semantic Kernel은 AI 오케스트레이션 SDK입니다", "sk-intro");

var results = memory.SearchAsync("docs", "SK란 무엇인가?", limit: 3);
await foreach (var result in results)
{
    Console.WriteLine($"관련도: {result.Relevance:P} - {result.Metadata.Text}");
}

Semantic Kernel vs LangChain

항목Semantic KernelLangChain
언어C#, Python, JavaPython, JS
아키텍처플러그인 기반체인 기반
기업 지원Microsoft (Azure 통합)커뮤니티 중심
타입 안전성강력 (C#)보통
  • 엔터프라이즈 .NET 환경에서는 Semantic Kernel이 자연스러운 선택
  • 플러그인 아키텍처 덕분에 기존 비즈니스 로직 재활용 용이
  • Azure 서비스와의 깊은 통합이 강점
  • Planner를 통한 자동 작업 분해 및 실행 가능

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록