Semantic Kernel은 수년 동안 기본 .NET 에이전트 툴킷으로 사용되어 왔습니다. Microsoft는 2026년 4월에 Semantic Kernel의 엔터프라이즈 기능과 AutoGen의 오케스트레이션 패턴을 통합한 Microsoft Agent Framework (MAF) 1.0을 출시했습니다. 2026년 10월 기준으로 이 패키지는 1.26 버전에 있으며, Semantic Kernel은 유지보수 모드(critical fixes만 가능)에 진입했고, 그래프 워크플로우, 네이티브 MCP/A2A, Durable Execution, 개선된 미들웨어 등 모든 새로운 기능들은 MAF에서만 출시됩니다.
이미 작동하는 Semantic Kernel 에이전트를 보유한 팀이라도 하룻밤 사이에 전부 재작성해야 하는 것은 아니지만, 기다리는 시간이 길어질수록 격차는 더 커집니다. 이 문서는 현재 패키지 이름과 API를 사용하여 도구를 사용하는 에이전트를 ASP.NET Core 애플리케이션으로 점진적으로 마이그레이션하는 구체적인 방법을 보여줍니다.
실제로 변경되는 것들
가장 큰 변화는 아키텍처적 측면입니다. Semantic Kernel은 채팅 서비스, 플러그인(plugins), 필터(filters), 메모리(memory)를 소유하는 Kernel 객체를 중심으로 모든 것을 구성했습니다. MAF는 이러한 책임들을 분리합니다:
- 모델 접근은
IChatClient(Microsoft.Extensions.AI에서 제공)에 존재합니다.
- 에이전트 동작은
AIAgent(가장 흔하게는 ChatClientAgent)에 존재합니다.
- 호출 가능한 기능(Callable capabilities)은
AIFunctionFactory.Create를 사용하여 생성된 일반적인 AIFunction입니다.
- 대화 연속성은 에이전트 자체에 의해 생성되는
AgentSession입니다.
- 횡단 관심사(Cross-cutting concerns)는 미들웨어로 이동합니다.
더 이상 필수적인 Kernel은 없습니다. 제공업체용 채팅 클라이언트를 생성한 다음, 확장 메서드인 .AsAIAgent(...)를 호출하면 됩니다.
패키지
일반적인 ASP.NET Core 마이그레이션을 위해:
dotnet add package Microsoft.Agents.AI
dotnet add package Microsoft.Extensions.AI
# 제공업체별 (예시)
...
Microsoft.Agents.AI 1.26은 현재 안정화된 릴리스입니다. 미리 보기 기능이 필요하지 않다면, 프리릴리즈(prerelease) 패키지보다는 일반 패키지를 사용하는 것이 좋습니다.
이전 방식: 도구를 가진 Semantic Kernel 에이전트
날씨를 조회할 수 있는 전형적인 SK 에이전트:
using System.ComponentModel;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
...
커널(Kernel)이 필요하고, 플러그인(plugin)은 여기에 등록되어야 하며, 스레드 유형은 호출자 생성(caller-created)이고, 호출(invocation)은 IAsyncEnumerable를 반환합니다.
이후: Microsoft Agent Framework
동일한 에이전트는 다음과 같이 변경됩니다:
using System.ComponentModel;
using Azure.AI.OpenAI;
using Azure.Identity;
...
커널(Kernel)이나 플러그인 클래스 등록이 필요 없으며 (정적 메서드 또는 인스턴스 메서드 사용 가능), [KernelFunction] 속성도 필요하지 않습니다. 세션은 에이전트가 소유합니다. 스트리밍은 RunStreamingAsync를 사용하며 AgentResponseUpdate 객체를 반환합니다.
로컬 모델의 경우 클라이언트 생성 방식만 변경되고 나머지 API는 동일하게 유지됩니다:
using OllamaSharp;
var ollama = new OllamaApiClient(new Uri("http://localhost:11434"), "llama3.2");
...
도구 호출(tool calling)을 지원하는 모델(llama3.2, qwen2.5 등)을 사용하십시오.
ASP.NET Core에서의 의존성 주입 (Dependency Injection)
채팅 클라이언트와 에이전트를 서비스로 등록합니다. 에이전트 구성이 정적(static)인 경우 키가 지정된 싱글톤(keyed singleton)을 사용하는 것이 좋습니다:
// Program.cs
builder.Services.AddSingleton<IChatClient>(sp =>
{
...
필요한 곳에 주입합니다:
public class WeatherController : ControllerBase
{
private readonly AIAgent _agent;
...
요청별 상태(per-request state)나 다른 도구 인스턴스(예: 스코프된 DbContext에 의존하는 도구)가 필요한 경우, 에이전트를 대신 스코프(scoped)로 등록하십시오.
세션(Sessions), 스트리밍(Streaming), 및 옵션(Options)
대화당 한 번 세션을 생성하고 다중 턴 채팅(multi-turn chats)에 재사용합니다. 대화 삭제를 지원하는 호스팅 제공자(hosted providers)의 경우, 여전히 필요할 때 기본 클라이언트를 통해 정리 작업을 관리해야 합니다.
스트리밍은 간단합니다:
await foreach (var update in agent.RunStreamingAsync(question, session))
{
if (!string.IsNullOrEmpty(update.Text))
...
토큰 제한 및 기타 추론 옵션은 ChatClientAgentRunOptions으로 이동합니다:
var options = new ChatClientAgentRunOptions(
new ChatOptions { MaxOutputTokens = 800 });
var response = await agent.RunAsync(question, session, options);
점진적 마이그레이션 체크리스트
- MAF 패키지와 제공업체(provider)용 Microsoft.Extensions.AI 클라이언트를 추가합니다.
- 이전에
[KernelFunction] 메서드였던 순수 함수(pure functions)를 추출합니다. 보통은 [Description] 속성만 필요합니다.
- Kernel + ChatCompletionAgent 구성을
IChatClient.AsAIAgent(...)로 대체하고, 함수들을 AIFunctionFactory.Create를 통해 전달합니다.
- 스레드 생성을
await agent.CreateSessionAsync()로 변경합니다.
InvokeAsync / InvokeStreamingAsync를 RunAsync / RunStreamingAsync로 전환합니다.
- DI 등록을
AddKernel + 키가 지정된 Agent에서 키가 지정된 AIAgent로 업데이트합니다.
- SK 코드를 제거하기 전에 기존 평가 스위트(evaluation suite)를 실행하거나 새로 추가하여 새로운 에이전트에 대한 테스트를 진행합니다.
- 에이전트 계층이 안정화된 후에만, 다중 에이전트 오케스트레이션(multi-agent orchestration)에 MAF 워크플로우 채택을 고려합니다.
에이전트가 아닌 Semantic Kernel 사용(프롬프트 템플릿, Microsoft.Extensions.AI를 통한 순수 함수 호출)은 전환 기간 동안 병렬로 유지할 수 있습니다. 모델 접근 계층은 이미 공유되기 때문입니다. 기존 시스템의 어떤 AI 계층을 표준화할지 고민하고 있다면, 이는 제가 닷넷 팀을 위한 AI 통합 작업에서 다루는 종류의 결정입니다.
Semantic Kernel에 더 오래 머무르는 경우
기존 SK 에이전트가 안정적이고, 새로운 오케스트레이션 기능이 필요하지 않으며, 팀이 릴리스 중간 단계라면 급할 것이 없습니다. Semantic Kernel은 여전히 중요한 수정 사항과 보안 패치를 받으므로, Microsoft의 현재 지원 문서를 확인하고 그에 맞춰 계획을 세우십시오. 핫픽스 기간에 강제로 마이그레이션하기보다는 다음 기능 주기(feature cycle)를 위해 계획하십시오.
결론
Semantic Kernel 에이전트를 Microsoft Agent Framework로 마이그레이션하면, Kernel을 중심축에서 제거하고, 도구 등록 과정을 단순화하며, 모든 새로운 투자가 집중되는 패키지를 사용하게 됩니다. 필요한 작업 범위는 많은 팀들이 예상하는 것보다 작습니다. 채팅 클라이언트가 준비되면 대부분의 작업은 기계적인(mechanical) 수준입니다. 하나의 에이전트부터 시작하세요 (저의 오픈 소스 SupportAgent.NET 프로젝트에 있는 지원 응답(support-reply) 에이전트가 좋은 후보입니다). 필요하다면 이전 경로를 기능 플래그(feature flag) 뒤에 유지하고, 첫 마이그레이션이 프로덕션 환경에서 입증되면 나머지 부분을 옮기세요.
Rahmat Afridi는 파키스탄 이슬라마바드에 거주하는 AI 통합 개발자 및 시니어 .NET 개발자입니다. 그는 2016년부터 프로덕션 .NET 시스템을 구축해 왔으며, ASP.NET Core, Azure, 로컬 모델을 사용한 실용적인 AI 통합에 중점을 두고 있습니다.
rahmatafridi.com · GitHub