Microsoft AutoGen & Semantic Kernel
Microsoft의 두 가지 접근법
섹션 제목: “Microsoft의 두 가지 접근법”Microsoft는 에이전트 시스템을 위해 서로 다른 철학의 두 프레임워크를 제공합니다.
| 프레임워크 | 철학 | 강점 |
|---|---|---|
| AutoGen | 에이전트 간 대화로 문제 해결 | 동적 멀티에이전트 협업 |
| Semantic Kernel | 플러그인 + 플래너로 작업 분해 | 엔터프라이즈 통합, .NET 지원 |
AutoGen
섹션 제목: “AutoGen”핵심 개념
섹션 제목: “핵심 개념”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 — 멀티에이전트 협업
섹션 제목: “GroupChat — 멀티에이전트 협업”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
섹션 제목: “Semantic Kernel”핵심 개념
섹션 제목: “핵심 개념”Semantic Kernel은 플러그인(Plugin) + 플래너(Planner) 아키텍처를 기반으로 합니다. 플러그인은 에이전트가 사용할 수 있는 기능 단위이고, 플래너는 사용자 목표를 달성하기 위해 플러그인을 조합하는 방법을 결정합니다.
from semantic_kernel import Kernelfrom semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletionfrom 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번 결과>)AutoGen vs Semantic Kernel 비교
섹션 제목: “AutoGen vs Semantic Kernel 비교”| 항목 | AutoGen | Semantic Kernel |
|---|---|---|
| 실행 모델 | 에이전트 간 대화 | 플러그인 조합 |
| 언어 지원 | Python | Python, C#, Java |
| 강점 | 동적 협업, 코드 실행 | 엔터프라이즈, 계획 수립 |
| 진입 장벽 | 낮음 | 중간 |
| 적합한 팀 | 스타트업, 연구 | 엔터프라이즈, .NET 팀 |
| Human-in-the-Loop | human_input_mode | 플래너 단계 중단 |
AutoGen은 에이전트 간 자연스러운 대화와 GroupChat을 통한 멀티에이전트 협업에 강점이 있습니다. Semantic Kernel은 플러그인과 플래너를 통한 구조적 작업 분해와 엔터프라이즈 환경 통합에 강점이 있습니다. 두 프레임워크 모두 Microsoft의 공식 지원을 받으며 프로덕션 환경에서 활발히 사용됩니다.