Semantic Kernel Agent Orchestration — 오케스트레이션 개요
Semantic Kernel Agent Orchestration — 오케스트레이션 개요
[!IMPORTANT] Agent Framework의 오케스트레이션 기능은 실험 단계(experimental)예요. 활발히 개발 중이며, preview/RC 단계로 넘어가기 전에 크게 바뀔 수 있어요.
Semantic Kernel의 Agent Orchestration 은 복잡한 에이전트 워크플로를 쉽게 만들고 관리하고 확장할 수 있게 해주는 프레임워크예요.
왜 멀티 에이전트 오케스트레이션인가
전통적인 단일 에이전트 시스템은 복잡하고 다면적인 작업을 다루는 데 한계가 있어요. 각자 특화된 기술이나 역할을 가진 여러 에이전트를 조율하면, 더 견고하고 적응력 있으며 현실 문제를 협력적으로 푸는 시스템을 만들 수 있어요. Semantic Kernel의 멀티 에이전트 오케스트레이션은 다양한 조정 패턴을 지원하면서 그런 시스템을 만들 수 있는 유연한 기반을 제공합니다.
오케스트레이션 패턴
잘 알려진 클라우드 설계 패턴처럼, 에이전트 오케스트레이션 패턴은 "여러 에이전트가 공통 목표를 향해 협력하도록 조율하는 기술 비종속적 접근"이에요. 패턴 자체에 대한 더 자세한 내용은 AI 에이전트 설계 패턴 문서를 참고하세요.
Semantic Kernel이 지원하는 오케스트레이션 패턴
Semantic Kernel은 이 패턴들을 SDK에 직접 구현해서 제공해요. 프레임워크의 일부로 제공되며 쉽게 확장하거나 커스터마이즈할 수 있어서, 자신의 에이전트 협업 시나리오에 맞게 다듬을 수 있죠.
| 패턴 | 설명 | 전형적인 사용 사례 |
|---|---|---|
| Concurrent | 작업을 모든 에이전트에 브로드캐스트하고, 결과를 독립적으로 수집 | 병렬 분석, 독립 하위 작업, 앙상블 의사 결정 |
| Sequential | 정의된 순서대로 한 에이전트의 결과를 다음 에이전트로 전달 | 단계별 워크플로, 파이프라인, 다단계 처리 |
| Handoff | 컨텍스트나 규칙에 따라 에이전트 간 제어권을 동적으로 넘김 | 동적 워크플로, 에스컬레이션, 폴백, 전문가 핸드오프 |
| Group Chat | 모든 에이전트가 그룹 매니저의 조율 아래 그룹 대화에 참여 | 브레인스토밍, 협업 문제 해결, 합의 형성 |
| Magentic | MagenticOne에서 영감을 받은 그룹 채팅형 오케스트레이션 | 복잡한 범용 멀티 에이전트 협업 |
단순함과 개발자 친화성
모든 오케스트레이션 패턴은 구성과 호출이 통일된 인터페이스를 공유해요. 어떤 오케스트레이션을 고르든 과정은 같습니다.
- 에이전트와 그 능력을 정의한다.
- 에이전트를(필요하면 매니저도) 넘겨 오케스트레이션을 만든다.
- 선택적으로 커스텀 입력/출력 처리를 위한 콜백이나 트랜스폼을 제공한다.
- 런타임을 시작하고 작업으로 오케스트레이션을 호출한다.
- 일관된 비동기 방식으로 결과를 기다린다.
이 통일된 방식 덕분에, 새 API를 배우거나 에이전트 로직을 다시 쓰지 않고도 오케스트레이션 패턴 사이를 쉽게 전환할 수 있어요. 프레임워크가 에이전트 간 통신·조정·결과 집계의 복잡성을 추상화해서, 애플리케이션의 목표에 집중할 수 있게 해줍니다.
# Choose an orchestration pattern with your agents
orchestration = SequentialOrchestration(members=[agent_a, agent_b])
# or ConcurrentOrchestration, GroupChatOrchestration, HandoffOrchestration, MagenticOrchestration, ...
# Start the runtime
runtime = InProcessRuntime()
runtime.start()
# Invoke the orchestration
result = await orchestration.invoke(task="Your task here", runtime=runtime)
# Get the result
final_output = await result.get()
await runtime.stop_when_idle()
C#에서는 SequentialOrchestration orchestration = new(agentA, agentB) { LoggerFactory = this.LoggerFactory }; 처럼 생성하고, InProcessRuntime runtime = new(); await runtime.StartAsync(); 후 await orchestration.InvokeAsync(task, runtime) 로 호출하고 await result.GetValueAsync() 로 결과를 받아요.
개발 환경 준비 (C#)
진행 전에 다음 패키지를 프로젝트에 추가하세요.
dotnet add package Microsoft.SemanticKernel.Agents.Orchestration --prerelease
dotnet add package Microsoft.SemanticKernel.Agents.Runtime.InProcess --prerelease
사용하는 에이전트 타입에 따라 해당 에이전트 패키지를 추가해야 할 수도 있어요. 자세한 내용은 Agents Overview 를 참고하세요.
[!NOTE] Java SDK에서는 아직 에이전트 오케스트레이션이 제공되지 않아요.
다음 단계
Concurrent Orchestration 문서로 넘어가 보세요.