콘텐츠로 이동

Microsoft AutoGen & Semantic Kernel

Microsoft는 에이전트 시스템을 위해 서로 다른 철학의 두 프레임워크를 제공합니다.

프레임워크철학강점
AutoGen에이전트 간 대화로 문제 해결동적 멀티에이전트 협업
Semantic Kernel플러그인 + 플래너로 작업 분해엔터프라이즈 통합, .NET 지원

AutoGen은 여러 에이전트가 대화를 통해 협력하여 복잡한 문제를 해결하는 프레임워크입니다. 에이전트들은 서로 메시지를 주고받으며 작업을 완성합니다.

import autogen
# LLM 설정
config_list = [{"model": "gpt-4o", "api_key": "..."}]
llm_config = {"config_list": config_list}
# 에이전트 정의
assistant = autogen.AssistantAgent(
name="Assistant",
llm_config=llm_config,
system_message="당신은 시니어 Python 개발자입니다.",
)
# 사용자 프록시 (코드 실행 가능)
user_proxy = autogen.UserProxyAgent(
name="UserProxy",
human_input_mode="TERMINATE", # 완료 키워드 감지 시 종료
max_consecutive_auto_reply=10,
code_execution_config={
"work_dir": "workspace",
"use_docker": True, # Docker 샌드박스 사용
},
)
# 대화 시작
user_proxy.initiate_chat(
assistant,
message="피보나치 수열을 계산하는 함수를 작성하고 테스트해주세요",
)

에이전트 대화 흐름:

UserProxy: "피보나치 수열 함수 작성 요청"
Assistant: "다음 코드를 실행해주세요: [코드 블록]"
UserProxy: [코드 실행] → "실행 결과: [출력]"
Assistant: "테스트 코드도 추가합니다: [테스트 코드]"
UserProxy: [테스트 실행] → "모든 테스트 통과. TERMINATE"

GroupChat은 여러 에이전트가 라운드 테이블 형식으로 대화에 참여하는 구조입니다.

# 전문가 에이전트들
coder = autogen.AssistantAgent(
name="Coder",
llm_config=llm_config,
system_message="코드 작성을 담당합니다.",
)
reviewer = autogen.AssistantAgent(
name="Reviewer",
llm_config=llm_config,
system_message="코드 리뷰와 보안 검토를 담당합니다.",
)
tester = autogen.AssistantAgent(
name="Tester",
llm_config=llm_config,
system_message="테스트 작성과 실행을 담당합니다.",
)
user_proxy = autogen.UserProxyAgent(
name="Manager",
human_input_mode="NEVER",
code_execution_config={"work_dir": "workspace"},
)
# GroupChat 구성
groupchat = autogen.GroupChat(
agents=[user_proxy, coder, reviewer, tester],
messages=[],
max_round=20,
speaker_selection_method="auto", # LLM이 다음 발언자 선택
)
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config,
)
user_proxy.initiate_chat(manager, message="인증 모듈을 구현해주세요")

Semantic Kernel은 플러그인(Plugin) + 플래너(Planner) 아키텍처를 기반으로 합니다. 플러그인은 에이전트가 사용할 수 있는 기능 단위이고, 플래너는 사용자 목표를 달성하기 위해 플러그인을 조합하는 방법을 결정합니다.

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.core_plugins import FileIOPlugin, TextPlugin
kernel = Kernel()
# AI 서비스 등록
kernel.add_service(
OpenAIChatCompletion(
service_id="gpt4o",
ai_model_id="gpt-4o",
)
)
# 플러그인 등록
kernel.add_plugin(FileIOPlugin(), plugin_name="file")
kernel.add_plugin(TextPlugin(), plugin_name="text")
from semantic_kernel.functions import kernel_function
class CodeAnalysisPlugin:
@kernel_function(
name="analyze_complexity",
description="코드의 복잡도를 분석합니다",
)
def analyze_complexity(self, code: str) -> str:
# 순환 복잡도 계산
complexity = calculate_cyclomatic_complexity(code)
return f"복잡도: {complexity} (권장: 10 이하)"
@kernel_function(
name="find_code_smells",
description="코드 스멜을 감지합니다",
)
def find_code_smells(self, code: str) -> str:
smells = detect_smells(code)
return "\n".join(smells) if smells else "코드 스멜 없음"
kernel.add_plugin(CodeAnalysisPlugin(), plugin_name="code_analysis")

플래너는 사용자 목표를 받아 어떤 플러그인을 어떤 순서로 실행할지 자동으로 결정합니다.

from semantic_kernel.planners import SequentialPlanner
planner = SequentialPlanner(kernel, service_id="gpt4o")
# 목표를 주면 플래너가 실행 계획 수립
plan = await planner.create_plan(
"src/auth.py 파일을 읽고 복잡도를 분석한 후 결과를 report.txt에 저장하세요"
)
# 수립된 계획 실행
result = await plan.invoke(kernel)
print(result)
# 플래너가 자동으로 선택한 순서:
# 1. file.read_file(path="src/auth.py")
# 2. code_analysis.analyze_complexity(code=<1번 결과>)
# 3. file.write_file(path="report.txt", content=<2번 결과>)
항목AutoGenSemantic Kernel
실행 모델에이전트 간 대화플러그인 조합
언어 지원PythonPython, C#, Java
강점동적 협업, 코드 실행엔터프라이즈, 계획 수립
진입 장벽낮음중간
적합한 팀스타트업, 연구엔터프라이즈, .NET 팀
Human-in-the-Loophuman_input_mode플래너 단계 중단

AutoGen은 에이전트 간 자연스러운 대화와 GroupChat을 통한 멀티에이전트 협업에 강점이 있습니다. Semantic Kernel은 플러그인과 플래너를 통한 구조적 작업 분해와 엔터프라이즈 환경 통합에 강점이 있습니다. 두 프레임워크 모두 Microsoft의 공식 지원을 받으며 프로덕션 환경에서 활발히 사용됩니다.