Search

MCP 샘플링

대분류
인공지능/데이터
소분류
LLM 정리 노트
유형
MCP
부유형
MCP 핵심 개념/기능
주요 레퍼런스
https://modelcontextprotocol.io/docs/concepts/sampling
https://wikidocs.net/268799
최종 편집 일시
2025/04/02 00:59
생성 일시
2025/04/01 00:31
13 more properties

샘플링(Sampling)

샘플링은 서버가 클라이언트를 통해 LLM 완료를 요청할 수 있도록 하는 기능
보안과 개인 정보 보호를 유지

특징

서버의 에이전트 동작 구현 가능
클라이언트 중심의 모델 제어
사용자 승인 기반의 안전한 실행
텍스트 및 이미지 기반 상호작용 지원

기본 프로세스

1.
서버가 클라이언트에 sampling/createMessage 요청을 보낸다.
2.
클라이언트가 요청을 검토하고 수정할 수 있다.
3.
클라이언트가 LLM에서 샘플링한다.
4.
클라이언트가 완료를 검토.
5.
클라이언트가 결과를 서버에 반환된다.
이러한 human-in-the-loop design는 사용자가 LLM이 보고 생성하는 내용을 제어할 수 있도록 보장한다.

프로토콜 지원 선언

Sampling을 지원하는 클라이언트는 초기화 시 반드시 다음과 같이 sampling 기능을 선언해야 한다.
{ "capabilities": { "sampling": {} } }
JSON
복사

메시지 형식(Format)

샘플링 요청은 표준화된 메시지 형식을 사용한다.
{ messages: [ { role: "user" | "assistant", content: { type: "text" | "image", // For text: text?: string, // For images: data?: string, // base64 encoded mimeType?: string } } ], modelPreferences?: { hints?: [{ name?: string // Suggested model name/family }], costPriority?: number, // 0-1, importance of minimizing cost speedPriority?: number, // 0-1, importance of low latency intelligencePriority?: number // 0-1, importance of capabilities }, systemPrompt?: string, includeContext?: "none" | "thisServer" | "allServers", temperature?: number, maxTokens: number, stopSequences?: string[], metadata?: Record<string, unknown> }
TypeScript
복사

요청 매개변수

예시
{ "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 } }
TypeScript
복사

메시지(Messages)

배열 messages에는 LLM에 보낼 대화 내역이 들어 있다.
role: “사용자” 또는 “보조자”
content: 메시지 내용은 다음과 같다.
text 필드 가 있는 텍스트 콘텐츠
data (base64) 및 mimeType 필드가 포함된 이미지 콘텐츠

모델 선호도(preferences)

이 modelPreferences객체를 사용하면 서버가 모델 선택 기본 설정을 지정할 수 있다.
hints: 클라이언트가 적절한 모델을 선택하는 데 사용할 수 있는 다양한 모델 이름 제안:
name: 전체 또는 일부 모델 이름과 일치할 수 있는 문자열(예: “claude-3”, “sonnet”)
클라이언트는 다른 공급자의 동등한 모델에 힌트를 매핑할 수 있다.
여러 힌트는 선호도 순서대로 평가된다.
우선 순위 값(0-1 정규화):
costPriority: 비용 최소화의 중요성
speedPriority: 저지연 응답의 중요성
intelligencePriority: 고급 모델 기능의 중요성

System prompt

선택 systemPrompt필드는 서버가 특정 시스템 프롬프트를 요청할 수 있도록 한다.
클라이언트는 이를 수정하거나 무시할 수 있다.

Context inclusion

매개 includeContext변수는 포함할 MCP 컨텍스트를 지정한다.
"none": 추가 컨텍스트 없음
"thisServer": 요청 서버의 컨텍스트를 포함
"allServers": 연결된 모든 MCP 서버의 컨텍스트 포함

샘플링 매개변수

다음을 사용하여 LLM 샘플링을 미세 조정한다.
temperature: 무작위성 제어(0.0~1.0)
maxTokens: 생성할 최대 토큰
stopSequences: 생성을 중지하는 시퀀스 배열
metadata: 추가 공급자별 매개변수

응답 형식

클라이언트는 완료 결과를 반환한다.
{ model: string, // Name of the model used stopReason?: "endTurn" | "stopSequence" | "maxTokens" | string, role: "user" | "assistant", content: { type: "text" | "image", text?: string, data?: string, mimeType?: string } }
TypeScript
복사

Human in the loop controls

프롬프트에 대해

클라이언트는 사용자에게 제안된 프롬프트를 표시해야 한다.
사용자는 프롬프트를 수정하거나 거부할 수 있어야 한다.
시스템 프롬프트를 필터링하거나 수정할 수 있다.
컨텍스트 포함은 클라이언트에 의해 제어된다.

완료를 위해

클라이언트는 사용자에게 완료를 표시해야 한다.
사용자는 완료를 수정하거나 거부할 수 있어야 한다.
클라이언트는 완료를 필터링하거나 수정할 수 있다.
사용자는 어떤 모델을 사용할지 제어한다.

일반적인 패턴

에이전트 워크플로

샘플링을 통해 다음과 같은 에이전트 패턴이 가능해진다.
리소스 읽기 및 분석
맥락에 따른 결정 내리기
구조화된 데이터 생성
여러 단계로 구성된 작업 처리
대화형 지원 제공

컨텍스트 관리

컨텍스트에 대한 모범 사례:
필요한 최소한의 맥락을 요청하세요
구조적 맥락을 명확하게
컨텍스트 크기 제한 처리
필요에 따라 컨텍스트를 업데이트
오래된 컨텍스트 정리

오류 처리

강력한 오류 처리 기능은 다음과 같다.
샘플링 실패를 포착
시간 초과 오류 처리
요금 한도 관리
응답 검증
대체 동작 제공
오류를 적절히 기록