본문 바로가기

AI 소식

Windows Agent Framework 오픈소스 완전 가이드 — MIT 라이선스 에이전트 런타임, LangGraph 대신 쓸 수 있나?

반응형

에이전트를 만들 때마다 생기는 문제가 있어요.

"로컬에서 잘 되는데 Azure에 올리면 구조를 다 뜯어고쳐야 한다."

프레임워크가 런타임에 묶여 있기 때문이에요. LangGraph는 Python 환경에, AutoGen은 자체 오케스트레이터에 의존해요.

Microsoft가 Build 2026에서 오픈소스로 공개한 **Windows Agent Framework(WAF)**는 이 문제를 런타임 독립 설계로 해결하려 해요. 로컬 Windows, Windows 365, Azure Arc — 어디서 실행하든 같은 매니페스트 정의를 쓰는 구조예요.


🔑 핵심 요약

Windows Agent Framework란? → Microsoft Agent Framework v1.0 기반, Build 2026에서 MIT 라이선스 오픈소스 공개 → .NET + Python 동시 지원, 프로덕션 안정 API → Semantic Kernel(엔터프라이즈 기반) + AutoGen(오케스트레이션) 통합 → A2A(Agent-to-Agent) + MCP 프로토콜 네이티브 지원 → 런타임 독립: 로컬 → Windows 365 → Azure 재아키텍처 없이 이동 → 앰비언트 에이전트(백그라운드 상시 실행) 패턴 지원 → Copilot Studio 노코드 에이전트 컴포지션과 연동


실전 1 — 5줄로 첫 에이전트 만들기

공식 devblog 기준 실제 작동 코드예요.

# pip install agent-framework
# az login 으로 Azure CLI 인증 필요

import asyncio
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

agent = Agent(
    client=FoundryChatClient(
        project_endpoint="https://your-project.services.ai.azure.com",
        model="gpt-5.3",  # → Project Polaris로 교체 가능 (8월 이후)
        credential=AzureCliCredential(),
    ),
    name="MyAgent",
    instructions="You are a helpful assistant."
)

print(asyncio.run(agent.run("태스크를 입력하세요")))
// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;
using Azure.Identity;

var agent = new AIProjectClient(
        endpoint: "https://your-project.services.ai.azure.com")
    .GetResponsesClient("gpt-5.3")
    .AsAIAgent(
        name: "MyBot",
        instructions: "You are a helpful assistant."
    );

Console.WriteLine(await agent.RunAsync("태스크를 입력하세요"));

모델 교체 자유도: FoundryChatClient의 model 파라미터만 바꾸면 GPT, Claude, Mistral, Llama 등 Azure AI Foundry 카탈로그 전체 모델 전환 가능해요. 8월 이후엔 Project Polaris도 여기서 지정해요.


실전 2 — WAF 핵심 아키텍처 4가지

① Agent Registration Service

→ 로컬 데몬으로 실행
→ 에이전트 생존 상태 모니터링 + 버전 관리
→ 에이전트가 죽으면 자동 재시작

② Declarative Agent Manifest (agent.json)

런타임에 묶이지 않는 핵심 설계예요. 에이전트 정의를 JSON/YAML로 선언하면 어느 환경에서든 같은 매니페스트로 실행돼요.

{
  "name": "EmailTriageAgent",
  "version": "1.0",
  "capabilities": ["email.read", "calendar.read"],
  "data_contracts": {
    "input": "EmailMessage",
    "output": "TriageResult"
  },
  "runtime": "auto"  // → 로컬, Windows 365, Azure 자동 선택
}

"runtime": "auto" 가 핵심: 태스크 복잡도에 따라 로컬 프로세스 → Windows 365 GPU 노드 → Azure 서비스로 자동 에스컬레이션해요. 개발자가 배포 환경별 코드를 따로 안 써도 돼요.

③ Cross-Agent Communication Bus

# gRPC 기반 pub/sub, 에이전트 간 하드 의존성 없음
from agent_framework import AgentBus

bus = AgentBus()

# ResearchAgent가 완료 신호 발행
await bus.publish("research.completed", payload=result)

# WriterAgent가 구독해서 자동 실행
@bus.subscribe("research.completed")
async def on_research_done(payload):
    await writer_agent.run(f"다음 리서치 결과로 초안 작성: {payload}")

LangGraph와 차이점: LangGraph는 노드-엣지 그래프로 플로우를 명시적으로 정의해요. WAF는 pub/sub 버스로 에이전트 간 느슨한 결합을 만들어요. 플로우보다 이벤트 기반 패턴에 적합해요.

④ Memory Service

# 대화 컨텍스트, 사용자 선호, 학습 패턴을 암호화 저장
agent = Agent(
    client=client,
    name="PersonalAssistant",
    memory=MemoryService(
        storage="local",       # 로컬 암호화 저장소
        user_controlled=True   # 사용자가 직접 삭제/열람 가능
    )
)

실전 3 — 앰비언트 에이전트 패턴 (핵심 실전 패턴)

WAF의 차별화 포인트는 앰비언트 에이전트예요. 유저 요청을 기다리지 않고 백그라운드에서 상시 실행하는 에이전트예요.

from agent_framework import AmbientAgent, Schedule

# 이메일 트리아지 에이전트 — 매일 오전 9시 자동 실행
email_triage = AmbientAgent(
    name="EmailTriageAgent",
    instructions="""
    수신 이메일을 분류하세요:
    - 긴급: 즉시 알림
    - 일반: 요약해서 일일 보고서에 추가
    - 스팸: 아카이브
    """,
    schedule=Schedule.daily(hour=9),
    capabilities=["email.read", "notification.send"]
)

# CI/CD 설정 드리프트 감지 에이전트 — 커밋마다 실행
drift_detector = AmbientAgent(
    name="ConfigDriftDetector",
    instructions="기대 설정값과 실제 배포 상태를 비교해서 차이가 있으면 리포트",
    trigger="git.push",  # 커밋 이벤트에 반응
    capabilities=["repo.read", "deploy.read"]
)

기존 에이전트 프레임워크와 다른 점: LangGraph, AutoGen, CrewAI는 모두 "유저가 태스크를 주면 실행"하는 모델이에요. 앰비언트 에이전트는 스케줄이나 시스템 이벤트에 반응해서 백그라운드에서 독립 실행해요. 모니터링, 알림, 정기 보고서 자동화에 적합한 패턴이에요.


실전 4 — LangGraph vs WAF 선택 기준

WAF가 유리한 상황:
→ Windows 환경 중심 엔터프라이즈 (온프레미스 + Azure 혼합)
→ 이벤트 기반 백그라운드 자동화 (앰비언트 에이전트)
→ .NET/C# 팀
→ Azure AI Foundry + Azure Agent Mesh 파이프라인 구축
→ MIT 라이선스 오픈소스로 온프레미스 배포 필요

LangGraph가 유리한 상황:
→ Python 중심, 복잡한 멀티스텝 플로우 명시적 제어 필요
→ 기존 LangChain 코드베이스 재활용
→ 조건 분기/루프가 많은 에이전트 그래프
→ AWS / GCP 클라우드 배포 (Azure 아님)

둘 다 쓰는 상황:
→ WAF로 에이전트 생명주기·통신 버스 관리
→ 내부 에이전트 로직은 LangGraph 플로우로 구현
→ Azure Agent Mesh로 멀티사이트 배포

✅ 결론

WAF가 진짜 유용한 이유는 런타임 독립 설계예요. 로컬에서 테스트한 에이전트를 재작성 없이 Azure로 올릴 수 있고, MIT 라이선스라 Azure 없이 온프레미스 배포도 가능해요.

앰비언트 에이전트 패턴은 기존 프레임워크에 없는 것이에요. 스케줄 기반 백그라운드 에이전트가 필요한 운영 자동화 시나리오에서 즉시 쓸 수 있어요.

복잡한 조건 분기 플로우는 LangGraph가 더 직관적이에요. WAF의 pub/sub 버스는 이벤트 기반 설계에 적합하고, 명시적 그래프 제어에는 약해요.

Azure/Windows 환경 밖에선 LangGraph·CrewAI 대비 생태계가 아직 작아요. v1.0 출시가 2026년 4월이라 커뮤니티 자료가 아직 부족해요.


 

반응형