[MCP] MCP 샘플링(Sampling)




이번 포스트에서는 MCP(Model Context Protocol)의 강력한 기능 중 하나인 샘플링(Sampling)에 대해 보다 상세히 알아보겠습니다.


샘플링이란 무엇인가?

샘플링은 MCP에서 서버가 클라이언트를 통해 LLM(Large Language Model)에 완료(completion)를 요청하는 과정입니다. 이는 보안과 개인 정보를 유지하면서 고급 AI 에이전트 동작을 가능하게 하는 중요한 기능입니다.

샘플링은 인간 중심적 설계를 바탕으로 하며, 사용자가 LLM의 입력과 결과를 명확하게 관리하고 제어할 수 있도록 보장합니다.


샘플링의 동작 방식

샘플링의 일반적인 흐름은 다음과 같습니다:

1. 요청 생성

  • 서버는 클라이언트에게 sampling/createMessage 요청을 보냅니다.

2. 검토 및 수정

  • 클라이언트는 요청을 검토하고 필요 시 수정하여 LLM에 전달합니다.

3. LLM의 샘플링

  • 클라이언트는 LLM으로부터 결과를 샘플링합니다.

4. 완료 결과 반환

  • 클라이언트는 완료된 결과를 검토 후 서버로 반환합니다.

샘플링 요청 메시지 형식

샘플링 요청은 다음과 같은 표준화된 JSON 형식을 사용합니다:

{
  "messages": [
    {
      "role": "user" | "assistant",
      "content": {
        "type": "text" | "image",
        "text": "optional",
        "data": "optional (base64 encoded)",
        "mimeType": "optional"
      }
    }
  ],
  "modelPreferences": {
    "hints": [{ "name": "optional" }],
    "costPriority": 0-1,
    "speedPriority": 0-1,
    "intelligencePriority": 0-1
  },
  "systemPrompt": "optional",
  "includeContext": "none" | "thisServer" | "allServers",
  "temperature": 0.0-1.0,
  "maxTokens": number,
  "stopSequences": ["optional"],
  "metadata": {}
}

요청 매개변수 상세 설명

  • 메시지(messages): LLM에 전송될 메시지 내역을 포함하며, 텍스트 또는 이미지 데이터를 지원합니다.
  • 모델 선호(modelPreferences): 사용 가능한 LLM 모델의 선호도를 설정하여 비용, 속도, 성능을 관리할 수 있습니다.
  • 시스템 프롬프트(systemPrompt): 서버가 특정 시스템 프롬프트를 요청할 수 있으며, 클라이언트는 이를 수정 또는 무시할 수 있습니다.
  • 컨텍스트 포함(includeContext): 컨텍스트 포함 여부를 제어합니다 (none, thisServer, allServers).
  • 샘플링 매개변수: 결과의 무작위성(temperature), 최대 토큰(maxTokens), 중지 시퀀스(stopSequences) 등 LLM의 응답 생성을 미세 조정할 수 있습니다.

샘플링 응답 형식

클라이언트는 다음과 같은 형식으로 완료된 결과를 반환합니다:

{
  "model": "model name",
  "stopReason": "optional",
  "role": "user" | "assistant",
  "content": {
    "type": "text" | "image",
    "text": "optional",
    "data": "optional",
    "mimeType": "optional"
  }
}

샘플링 요청 예시

{
  "method": "sampling/createMessage",
  "params": {
    "messages": [
      {
        "role": "user",
        "content": {
          "type": "text",
          "text": "What files are in the current directory?"
        }
      }
    ],
    "systemPrompt": "You are a helpful file system assistant.",
    "includeContext": "thisServer",
    "maxTokens": 100
  }
}

샘플링 활용 시나리오

샘플링 기능은 다음과 같은 다양한 에이전트 워크플로에서 사용됩니다:

  • 리소스 데이터 읽기 및 분석
  • 컨텍스트 기반 결정 내리기
  • 구조화된 데이터 생성
  • 다단계 작업 처리
  • 대화형 사용자 지원

효과적인 샘플링 구현을 위한 모범 사례

  • 명확하고 구성된 프롬프트 제공
  • 적절한 텍스트 및 이미지 콘텐츠 처리
  • 합리적인 토큰 제한 설정
  • 관련 컨텍스트의 적절한 포함
  • 응답 데이터의 검증 및 오류 처리
  • 샘플링 비용과 사용량 모니터링

인간 중심 설계

샘플링은 사용자의 감독과 제어를 전제로 합니다:

  • 사용자가 프롬프트 및 완료 결과를 직접 수정하거나 거부 가능
  • 시스템 프롬프트 및 컨텍스트 포함 여부의 최종 제어는 사용자에게 있음

보안 고려 사항

샘플링을 구현할 때 다음과 같은 보안 요소를 고려해야 합니다:

  • 모든 콘텐츠 검증 및 민감 정보 처리
  • 속도 제한 및 비용 제한 설정
  • 전송 중 데이터 암호화
  • 개인정보 보호 및 감사 로깅

결론

샘플링은 MCP가 제공하는 강력한 기능으로, 보안과 개인 정보를 보호하면서 사용자가 AI 응답을 세밀히 관리할 수 있도록 돕습니다. 효과적으로 구현하면 AI 시스템의 성능과 유연성을 크게 높일 수 있습니다. 다음 포스트에서는 MCP의 루트(Roots)에 대해 살펴보겠습니다.


참고 자료

  • https://modelcontextprotocol.io/introduction



Leave a Comment