from dotenv import load_dotenv
load_dotenv(".env", override=True)
%load_ext autoreload
%autoreload 2The autoreload extension is already loaded. To reload it, use:
%reload_ext autoreload
컨텍스트 격리: 하위 에이전트
에이전트의 컨텍스트는 대화가 진행됨에 따라 빠르게 증가할 수 있으며, 이는 여러 장기 컨텍스트 관련 문제로 이어집니다. 주요 문제는 컨텍스트 충돌 또는 혼동으로, 같은 컨텍스트 윈도우 내에서 혼합된 목표들이 최적이 아닌 성능으로 이어질 수 있습니다. 컨텍스트 격리는 각각 자신의 격리된 컨텍스트 윈도우 내에서 작동하는 전문화된 하위 에이전트에게 작업을 위임함으로써 효과적인 해결책을 제공합니다. 이 접근 방식은 컨텍스트 충돌, 혼동, 오염 및 희석을 방지하면서도 집중되고 전문화된 작업 실행을 가능하게 합니다.
하위 에이전트 위임

핵심 개념은 특정 작업에 맞춤화된 다른 도구 세트를 가진 하위 에이전트를 생성할 수 있다는 것입니다. 각 하위 에이전트는 subagent_type을 키로 하는 레지스트리 딕셔너리에 저장되며, 주 에이전트는 task(description, subagent_type) 도구 호출을 통해 작업을 위임할 수 있습니다. 하위 에이전트는 부모의 컨텍스트와 완전히 격리된 상태에서 작동하며, 그 결과는 부모 에이전트에게 ToolMessage로 반환되어 깔끔한 관심사 분리를 유지합니다.
단계 1: 하위 에이전트 생성
사용자가 하위 에이전트를 지정하는 방법을 정의해봅시다.
from typing_extensions import TypedDict
class SubAgent(TypedDict):
"""전문화된 하위 에이전트를 위한 구성."""
name: str
description: str
prompt: str
tools: NotRequired[list[str]]우리는 이러한 객체들의 리스트를 사용하여 접근 가능한 모든 하위 에이전트를 생성할 것입니다.
agents: list[SubAgent] = ...
subagents = {
agent['name']: create_agent(
model=model,
system_prompt=agent['prompt'],
tools = get_tools(agent['tools']),
...
)
}단계 2: 하위 에이전트를 사용하는 도구 생성
논리적으로 다음과 같이 보여야 합니다:
def task(
description: str, # 하위 에이전트가 수행해야 할 작업
subagent_type: str # 사용할 하위 에이전트
):
# 하위 에이전트에게 전달할 새 메시지 생성 - 설명만 있어야 함
# 하위 에이전트 호출
# 하위 에이전트의 응답과 파일시스템에 대한 변경 사항으로 상태 업데이트전체적으로 다음과 같이 끝나게 됩니다:
@tool(description=TASK_DESCRIPTION_PREFIX.format(other_agents=other_agents_string))
def task(
description: str,
subagent_type: str,
state: Annotated[DeepAgentState, InjectedState],
tool_call_id: Annotated[str, InjectedToolCallId],
):
"""격리된 컨텍스트를 가진 전문화된 하위 에이전트에 작업을 위임합니다.
이것은 작업 설명만 포함하는 하위 에이전트를 위한 새로운 컨텍스트를 생성하며,
부모 에이전트의 대화 기록으로 인한 컨텍스트 오염을 방지합니다.
"""
# 요청된 에이전트 유형이 존재하는지 검증
if subagent_type not in agents:
return f"에러: {subagent_type} 유형의 에이전트를 호출했습니다. 허용된 유형은 {[f'`{k}`' for k in agents]}입니다"
# 요청된 하위 에이전트 가져오기
sub_agent = agents[subagent_type]
# 작업 설명만 포함하는 격리된 컨텍스트 생성
# 이것이 컨텍스트 격리의 핵심 - 부모 에이전트의 대화 히스토리 없음
state["messages"] = [{"role": "user", "content": description}]
# 격리된 상태에서 하위 에이전트 실행
result = sub_agent.invoke(state)
# Command 상태 업데이트를 통해 부모 에이전트에게 결과 반환
return Command(
update={
"files": result.get("files", {}), # 파일 변경 사항 병합
"messages": [
# 하위 에이전트 결과가 부모 컨텍스트의 ToolMessage가 됨
ToolMessage(
result["messages"][-1].content, tool_call_id=tool_call_id
)
],
}
)
return task%%writefile ./src/deep_agents_from_scratch/task_tool.py
"""하위 에이전트를 통한 컨텍스트 격리를 위한 작업 위임 도구.
이 모듈은 격리된 컨텍스트를 가진 하위 에이전트를 생성하고 관리하기 위한
핵심 인프라를 제공합니다. 하위 에이전트는 특정 작업 설명만 포함하는
깨끗한 컨텍스트 윈도우 내에서 작동하여 컨텍스트 충돌을 방지합니다.
"""
from typing import Annotated, NotRequired
from typing_extensions import TypedDict
from langchain_core.messages import ToolMessage
from langchain_core.tools import BaseTool, InjectedToolCallId, tool
from langgraph.prebuilt import InjectedState
from langgraph.types import Command
from langchain.agents import create_agent
from .prompts import TASK_DESCRIPTION_PREFIX
from .state import DeepAgentState
class SubAgent(TypedDict):
"""전문화된 하위 에이전트를 위한 구성."""
name: str
description: str
prompt: str
tools: NotRequired[list[str]]
def _create_task_tool(tools, subagents: list[SubAgent], model, state_schema):
"""하위 에이전트를 통한 컨텍스트 격리를 가능하게 하는 작업 위임 도구를 생성합니다.
이 함수는 격리된 컨텍스트를 가진 전문화된 하위 에이전트를 생성하는 핵심 패턴을 구현하며,
복잡한 다단계 작업에서 컨텍스트 충돌과 혼동을 방지합니다.
Args:
tools: 하위 에이전트에 할당할 수 있는 사용 가능한 도구 목록
subagents: 전문화된 하위 에이전트 구성 목록
model: 모든 에이전트에 사용할 언어 모델
state_schema: 상태 스키마 (일반적으로 DeepAgentState)
Returns:
전문화된 하위 에이전트에 작업을 위임할 수 있는 'task' 도구
"""
# 에이전트 레지스트리 생성
agents = {}
# 선택적 도구 할당을 위한 도구 이름 매핑 구축
tools_by_name = {}
for tool_ in tools:
if not isinstance(tool_, BaseTool):
tool_ = tool(tool_)
tools_by_name[tool_.name] = tool_
# 구성에 따라 전문화된 하위 에이전트 생성
for _agent in subagents:
if "tools" in _agent:
# 지정된 경우 특정 도구 사용
_tools = [tools_by_name[t] for t in _agent["tools"]]
else:
# 기본값으로 모든 도구 사용
_tools = tools
agents[_agent["name"]] = create_agent(
model,
system_prompt=_agent["prompt"],
tools=_tools,
state_schema=state_schema,
)
# 도구 설명을 위한 사용 가능한 하위 에이전트 설명 생성
other_agents_string = [
f"- {_agent['name']}: {_agent['description']}" for _agent in subagents
]
@tool(description=TASK_DESCRIPTION_PREFIX.format(other_agents=other_agents_string))
def task(
description: str,
subagent_type: str,
state: Annotated[DeepAgentState, InjectedState],
tool_call_id: Annotated[str, InjectedToolCallId],
):
"""격리된 컨텍스트를 가진 전문화된 하위 에이전트에 작업을 위임합니다.
이것은 작업 설명만 포함하는 하위 에이전트를 위한 새로운 컨텍스트를 생성하며,
부모 에이전트의 대화 기록으로 인한 컨텍스트 오염을 방지합니다.
"""
# 요청된 에이전트 유형이 존재하는지 검증
if subagent_type not in agents:
return f"에러: {subagent_type} 유형의 에이전트를 호출했습니다. 허용된 유형은 {[f'`{k}`' for k in agents]}입니다"
# 요청된 하위 에이전트 가져오기
sub_agent = agents[subagent_type]
# 작업 설명만 포함하는 격리된 컨텍스트 생성
# 이것이 컨텍스트 격리의 핵심 - 부모 에이전트의 대화 히스토리 없음
state["messages"] = [{"role": "user", "content": description}]
# 격리된 상태에서 하위 에이전트 실행
result = sub_agent.invoke(state)
# Command 상태 업데이트를 통해 부모 에이전트에게 결과 반환
return Command(
update={
"files": result.get("files", {}), # 파일 변경 사항 병합
"messages": [
# 하위 에이전트 결과가 부모 컨텍스트의 ToolMessage가 됨
ToolMessage(
result["messages"][-1].content, tool_call_id=tool_call_id
)
],
}
)
return taskOverwriting ./src/deep_agents_from_scratch/task_tool.py
이제 서브 에이전트를 도구로 생성하는 루틴이 있으므로, 특정 서브 에이전트를 정의하고 시스템이 task 도구로 이들을 호출하도록 할 수 있습니다.
위에서 _create_task_tool은 SubAgent 타입의 리스트를 받습니다. 이 리스트는 생성될 에이전트의 설명을 포함합니다.
class SubAgent(TypedDict):
"""전문화된 하위 에이전트를 위한 구성."""
name: str
description: str
prompt: str
tools: NotRequired[list[str]]
def _create_task_tool(tools, subagents: list[SubAgent], model, state_schema):
"""하위 에이전트를 통한 컨텍스트 격리를 가능하게 하는 작업 위임 도구를 생성합니다.SubAgent 클래스는 하위 에이전트의 이중 역할을 충족하기 위해 필요한 고유한 정보를 정의합니다. 하위 에이전트는 도구이면서 동시에 에이전트입니다.
- 도구로서, 감독 에이전트에게 자신의 기능과 호출 방법에 대한 정보를 제공합니다.
- 에이전트로서, 자신의 작업을 수행하는 방법을 설명하는 프롬프트와 해당 작업을 위한 도구 세트가 필요합니다.
아래에서 연구 하위 에이전트를 생성할 것입니다. 그 description은 감독 에이전트에게 단일 작업이 이 하위 에이전트에게 위임되어야 함을 알립니다. SIMPLE_RESEARCH_INSTRUCTIONS는 하위 에이전트가 자신의 연구를 지시하기 위해 사용하는 프롬프트입니다. 이 예에서는 간단하지만, 범용 연구자의 경우 훨씬 더 상세할 수 있습니다. 하위 에이전트는 연구 중에 사용할 web_search 도구도 제공받습니다.
# 연구 하위 에이전트 생성
research_sub_agent = {
"name": "research-agent",
"description": "연구를 하위 에이전트 연구자에게 위임합니다. 한 번에 이 연구자에게 하나의 주제만 제공하세요.",
"prompt": SIMPLE_RESEARCH_INSTRUCTIONS,
"tools": ["web_search"],
}하위 에이전트는 특정 작업과 함께 그것을 완료하기 위해 필요한 도구들을 받습니다. 이것은 단일 작업 설명으로 제한된 자신의 컨텍스트 내에서 작동합니다. 이러한 컨텍스트 엔지니어링 접근 방식은 하위 에이전트의 작업 컨텍스트가 컨텍스트 충돌, 혼동, 오염 및 희석으로부터 자유로운 상태를 유지하도록 보장합니다.
감독 에이전트 프롬프트는 이제 이러한 하위 에이전트를 호출하고 사용하는 방법에 대한 설명을 포함해야 합니다. 이것은 아래에 나와 있습니다. 사용 가능한 도구 설명과 해당하는 경우 병렬 연구를 사용하라는 지침에 주목하세요.
from src.deep_agents_from_scratch.prompts import SUBAGENT_USAGE_INSTRUCTIONS
from utils import show_prompt
show_prompt(SUBAGENT_USAGE_INSTRUCTIONS)╭──────────────────────────────────────────────────── Prompt ─────────────────────────────────────────────────────╮ │ │ │ You can delegate tasks to sub-agents. │ │ │ │ <Task> │ │ Your role is to coordinate research by delegating specific research tasks to sub-agents. │ │ </Task> │ │ │ │ <Available Tools> │ │ 1. **task(description, subagent_type)**: Delegate research tasks to specialized sub-agents │ │ - description: Clear, specific research question or task │ │ - subagent_type: Type of agent to use (e.g., "research-agent") │ │ 2. **think_tool(reflection)**: Reflect on the results of each delegated task and plan next steps. │ │ - reflection: Your detailed reflection on the results of the task and next steps. │ │ │ │ **PARALLEL RESEARCH**: When you identify multiple independent research directions, make multiple **task** │ │ tool calls in a single response to enable parallel execution. Use at most {max_concurrent_research_units} │ │ parallel agents per iteration. │ │ </Available Tools> │ │ │ │ <Hard Limits> │ │ **Task Delegation Budgets** (Prevent excessive delegation): │ │ - **Bias towards focused research** - Use single agent for simple questions, multiple only when clearly │ │ beneficial or when you have multiple independent research directions based on the user's request. │ │ - **Stop when adequate** - Don't over-research; stop when you have sufficient information │ │ - **Limit iterations** - Stop after {max_researcher_iterations} task delegations if you haven't found │ │ adequate sources │ │ </Hard Limits> │ │ │ │ <Scaling Rules> │ │ **Simple fact-finding, lists, and rankings** can use a single sub-agent: │ │ - *Example*: "List the top 10 coffee shops in San Francisco" → Use 1 sub-agent, store in │ │ `findings_coffee_shops.md` │ │ │ │ **Comparisons** can use a sub-agent for each element of the comparison: │ │ - *Example*: "Compare OpenAI vs. Anthropic vs. DeepMind approaches to AI safety" → Use 3 sub-agents │ │ - Store findings in separate files: `findings_openai_safety.md`, `findings_anthropic_safety.md`, │ │ `findings_deepmind_safety.md` │ │ │ │ **Multi-faceted research** can use parallel agents for different aspects: │ │ - *Example*: "Research renewable energy: costs, environmental impact, and adoption rates" → Use 3 sub-agents │ │ - Organize findings by aspect in separate files │ │ │ │ **Important Reminders:** │ │ - Each **task** call creates a dedicated research agent with isolated context │ │ - Sub-agents can't see each other's work - provide complete standalone instructions │ │ - Use clear, specific language - avoid acronyms or abbreviations in task descriptions │ │ </Scaling Rules> │ │ │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
이제 감독 에이전트와 하위 에이전트로 연구 시스템을 구축해봅시다. 이것은 부분들이 어떻게 함께 작동하는지 보여주기 위해 미리 정의된 검색 결과를 포함한 모의 버전일 뿐입니다. 다음 수업에서 완전한 연구 시스템을 구축하게 됩니다.
from datetime import datetime
from IPython.display import Image
from langchain_core.tools import tool
from src.deep_agents_from_scratch.prompts import SUBAGENT_USAGE_INSTRUCTIONS
from src.deep_agents_from_scratch.state import DeepAgentState
from src.deep_agents_from_scratch.task_tool import SubAgent, _create_task_tool
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
# 제한
max_concurrent_research_units = 3
max_researcher_iterations = 3
# 모의 검색 결과
search_result = """Model Context Protocol(MCP)는 Anthropic에서 개발한 공개 표준 프로토콜로,
AI 모델과 도구, 데이터베이스 및 기타 서비스와 같은 외부 시스템 간의 원활한 통합을 가능하게 합니다.
표준화된 통신 계층 역할을 하며, AI 모델이 다양한 소스의 데이터에 일관되고 효율적인 방식으로
접근하고 활용할 수 있도록 합니다. 기본적으로 MCP는 데이터 교환을 위한 통일된 언어를 제공하여
AI 어시스턴트를 외부 서비스에 연결하는 프로세스를 단순화합니다. """
# 모의 검색 도구
@tool(parse_docstring=True)
def web_search(
query: str,
):
"""특정 주제에 대해 웹을 검색합니다.
이 도구는 웹 검색을 수행하고 주어진 쿼리에 대한
관련 결과를 반환합니다. 인터넷에서 어떤 주제에 대한 정보를 수집해야 할 때
사용합니다.
Args:
query: 검색 쿼리 문자열입니다. 찾고 있는 정보에 대해 구체적이고 명확하게 작성하세요.
Returns:
검색 엔진의 검색 결과입니다.
Example:
web_search("의료 분야의 머신러닝 애플리케이션")
"""
return search_result
# 간단한 연구 지침 추가
SIMPLE_RESEARCH_INSTRUCTIONS = """당신은 연구자입니다. 제공된 주제를 연구하세요. 중요: web_search 도구에 대해 단 한 번만 호출하고 도구에서 제공한 결과를 사용하여 제공된 주제에 답변하세요."""
# 연구 하위 에이전트 생성
research_sub_agent: dict[str, SubAgent] = {
"name": "research-agent",
"description": "연구를 하위 에이전트 연구자에게 위임합니다. 한 번에 이 연구자에게 하나의 주제만 제공하세요.",
"prompt": SIMPLE_RESEARCH_INSTRUCTIONS,
"tools": ["web_search"],
}
# create_react_agent를 직접 사용하여 에이전트 생성
model = init_chat_model(model="anthropic:claude-sonnet-4-20250514", temperature=0.0)
# 하위 에이전트를 위한 도구
sub_agent_tools = [web_search]
# 하위 에이전트에 작업을 위임할 task 도구 생성
task_tool = _create_task_tool(
model=model,
tools=sub_agent_tools,
subagents=[research_sub_agent],
state_schema=DeepAgentState,
)
# 도구
delegation_tools = [task_tool]
# 시스템 프롬프트로 에이전트 생성
agent = create_agent(
model,
delegation_tools,
system_prompt=SUBAGENT_USAGE_INSTRUCTIONS.format(
max_concurrent_research_units=max_concurrent_research_units,
max_researcher_iterations=max_researcher_iterations,
date=datetime.now().strftime("%a %b %-d, %Y"),
),
state_schema=DeepAgentState,
)
# 에이전트 표시
display(Image(agent.get_graph(xray=True).draw_mermaid_png()))
from utils import format_messages
result = agent.invoke(
{
"messages": [
{
"role": "user",
"content": "Model Context Protocol (MCP)에 대한 개요를 제시해주세요.",
}
],
}
)
format_messages(result["messages"])╭─────────────────────────────────────────────────── 🧑 Human ────────────────────────────────────────────────────╮ │ Model Context Protocol (MCP)에 대한 개요를 제시해주세요. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮ │ Model Context Protocol (MCP)에 대한 포괄적인 개요를 제공하기 위해 연구를 진행하겠습니다. │ │ │ │ 🔧 Tool Call: task │ │ Args: { │ │ "description": "Model Context Protocol (MCP)에 대한 전반적인 개요를 연구해주세요. MCP가 무엇인지, 어떤 │ │ 목적으로 개발되었는지, 주요 특징과 기능, 작동 원리, 그리고 현재 상태와 활용 사례에 대해 조사해주세요.", │ │ "subagent_type": "research-agent" │ │ } │ │ ID: toolu_01LdoGEbCCk6NnGLUN8gsurS │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────── 🔧 Tool Output ─────────────────────────────────────────────────╮ │ # Model Context Protocol (MCP) 연구 보고서 │ │ │ │ ## 1. MCP란 무엇인가? │ │ │ │ Model Context Protocol(MCP)는 **Anthropic에서 개발한 공개 표준 프로토콜**입니다. 이는 AI 모델과 외부 │ │ 시스템(도구, 데이터베이스, 서비스 등) 간의 원활한 통합을 가능하게 하는 표준화된 통신 계층 역할을 합니다. │ │ │ │ ## 2. 개발 목적 │ │ │ │ MCP의 주요 개발 목적은 다음과 같습니다: │ │ │ │ - **표준화된 통신**: AI 모델이 다양한 외부 소스의 데이터에 일관되고 효율적인 방식으로 접근할 수 있도록 함 │ │ - **통합 단순화**: AI 어시스턴트를 외부 서비스에 연결하는 복잡한 프로세스를 단순화 │ │ - **데이터 교환 통일**: 다양한 시스템 간 데이터 교환을 위한 통일된 언어 제공 │ │ - **상호 운용성 향상**: 서로 다른 AI 시스템과 외부 도구 간의 호환성 증대 │ │ │ │ ## 3. 주요 특징과 기능 │ │ │ │ ### 핵심 특징: │ │ - **공개 표준**: 오픈 소스 프로토콜로 누구나 사용 가능 │ │ - **표준화된 인터페이스**: 일관된 방식으로 외부 시스템과 통신 │ │ - **확장성**: 다양한 유형의 도구와 서비스에 적용 가능 │ │ - **효율성**: 최적화된 데이터 교환 메커니즘 │ │ │ │ ### 주요 기능: │ │ - 외부 데이터베이스 연결 │ │ - 다양한 도구 및 서비스 통합 │ │ - 실시간 데이터 접근 │ │ - 표준화된 API 인터페이스 제공 │ │ │ │ ## 4. 작동 원리 │ │ │ │ MCP는 다음과 같은 방식으로 작동합니다: │ │ │ │ 1. **통신 계층 역할**: AI 모델과 외부 시스템 사이의 중간 계층으로 작동 │ │ 2. **프로토콜 표준화**: 모든 통신이 MCP 표준을 따라 이루어짐 │ │ 3. **데이터 변환**: 서로 다른 시스템 간의 데이터 형식을 표준화된 형태로 변환 │ │ 4. **요청-응답 처리**: AI 모델의 요청을 외부 시스템이 이해할 수 있는 형태로 변환하고, 응답을 다시 AI 모델이 │ │ 처리할 수 있는 형태로 변환 │ │ │ │ ## 5. 현재 상태와 활용 사례 │ │ │ │ ### 현재 상태: │ │ - **공개 표준**: 현재 공개되어 있어 개발자들이 활용 가능 │ │ - **초기 단계**: 비교적 새로운 프로토콜로 지속적인 발전 중 │ │ - **커뮤니티 지원**: 오픈 소스 특성으로 인한 커뮤니티 기여 활발 │ │ │ │ ### 주요 활용 사례: │ │ - **데이터베이스 통합**: AI 모델이 다양한 데이터베이스에 직접 접근 │ │ - **외부 도구 연결**: 계산기, 날씨 서비스, 번역 도구 등과의 통합 │ │ - **API 서비스 연동**: 다양한 웹 서비스와의 표준화된 연결 │ │ - **엔터프라이즈 시스템 통합**: 기업 내부 시스템과 AI 모델 간의 연결 │ │ │ │ ## 6. 의의와 전망 │ │ │ │ MCP는 AI 생태계에서 중요한 역할을 할 것으로 예상됩니다: │ │ │ │ - **생태계 표준화**: AI 도구 통합의 표준을 제시 │ │ - **개발 효율성**: 개발자들이 더 쉽게 AI 통합 솔루션을 구축 가능 │ │ - **상호 운용성**: 다양한 AI 시스템 간의 호환성 향상 │ │ - **혁신 촉진**: 표준화를 통한 새로운 AI 애플리케이션 개발 촉진 │ │ │ │ MCP는 AI 모델과 외부 시스템 간의 통합을 표준화함으로써, 더욱 강력하고 유연한 AI 애플리케이션 개발을 가능하게 │ │ 하는 중요한 기술적 기반을 제공하고 있습니다. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮ │ ## Model Context Protocol (MCP) 개요 │ │ │ │ 연구 결과를 바탕으로 Model Context Protocol (MCP)에 대한 포괄적인 개요를 제시해드리겠습니다. │ │ │ │ ### 🔍 **MCP란?** │ │ Model Context Protocol(MCP)는 **Anthropic에서 개발한 공개 표준 프로토콜**로, AI 모델과 외부 시스템(도구, │ │ 데이터베이스, 서비스 등) 간의 원활한 통합을 위한 표준화된 통신 계층입니다. │ │ │ │ ### 🎯 **개발 목적** │ │ - **표준화된 통신**: AI 모델이 다양한 외부 데이터 소스에 일관되게 접근 │ │ - **통합 단순화**: 복잡한 AI-외부 서비스 연결 프로세스 간소화 │ │ - **데이터 교환 통일**: 시스템 간 데이터 교환을 위한 통일된 언어 제공 │ │ - **상호 운용성 향상**: 서로 다른 AI 시스템과 외부 도구 간 호환성 증대 │ │ │ │ ### ⚡ **주요 특징** │ │ - **공개 표준**: 오픈 소스로 누구나 사용 가능 │ │ - **표준화된 인터페이스**: 일관된 외부 시스템 통신 방식 │ │ - **확장성**: 다양한 도구와 서비스에 적용 가능 │ │ - **효율성**: 최적화된 데이터 교환 메커니즘 │ │ │ │ ### 🔧 **작동 원리** │ │ 1. **통신 계층**: AI 모델과 외부 시스템 사이의 중간 계층 역할 │ │ 2. **프로토콜 표준화**: 모든 통신이 MCP 표준을 따름 │ │ 3. **데이터 변환**: 서로 다른 시스템 간 데이터 형식을 표준화 │ │ 4. **요청-응답 처리**: 양방향 데이터 변환 및 처리 │ │ │ │ ### 💼 **활용 사례** │ │ - **데이터베이스 통합**: AI 모델의 직접적인 데이터베이스 접근 │ │ - **외부 도구 연결**: 계산기, 날씨 서비스, 번역 도구 등과의 통합 │ │ - **API 서비스 연동**: 다양한 웹 서비스와의 표준화된 연결 │ │ - **엔터프라이즈 시스템**: 기업 내부 시스템과 AI 모델 간 연결 │ │ │ │ ### 🚀 **의의와 전망** │ │ MCP는 AI 생태계에서 다음과 같은 중요한 역할을 할 것으로 예상됩니다: │ │ │ │ - **생태계 표준화**: AI 도구 통합의 표준 제시 │ │ - **개발 효율성**: 더 쉬운 AI 통합 솔루션 구축 │ │ - **상호 운용성**: 다양한 AI 시스템 간 호환성 향상 │ │ - **혁신 촉진**: 표준화를 통한 새로운 AI 애플리케이션 개발 가속화 │ │ │ │ MCP는 AI 모델과 외부 시스템 간의 통합을 표준화함으로써, 더욱 강력하고 유연한 AI 애플리케이션 개발을 가능하게 │ │ 하는 중요한 기술적 기반을 제공하고 있습니다. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯