본문으로 건너뛰기

SageMaker AI 엔드포인트에 호스팅된 LLM을 위한 Strands 에이전트용 커스텀 모델 공급자 구축

SageMaker AI 엔드포인트의 다양한 LLM 응답 형식을 Strands 에이전트가 요구하는 Bedrock Messages API 형식으로 변환하는 커스텀 모델 파서 구현 방법을 다룹니다.

섹션별 상세

01
SGLang이나 vLLM 같은 커스텀 서빙 프레임워크는 범용성을 위해 OpenAI 호환 형식을 사용하지만, Strands 에이전트는 Bedrock Messages API 형식을 기대한다. 이러한 데이터 구조의 불일치는 기본 SageMakerAIModel 클래스를 사용할 때 필드 접근 오류인 TypeError를 유발하며 시스템 통합을 방해한다.
02
AWS Labs의 오픈소스 도구인 ml-container-creator를 활용하여 SageMaker BYOC 프로젝트를 자동 생성한다. 이 도구는 Dockerfile, CodeBuild 설정, 배포 스크립트를 포함한 전체 프로젝트 구조를 생성하여 Llama 3.1 모델을 SGLang 서버와 함께 배포하는 과정을 표준화하고 간소화한다.
bash
# Install Yeoman globally
npm install -g yo
# Clone and install ml-container-creator
git clone https://github.com/awslabs/ml-container-creator
cd ml-container-creator
npm install && npm link

# Run the generator
yo ml-container-creator
# Configuration: Framework=transformers, Model Server=sglang, Model=meta-llama/Llama-3.1-8B-Instruct

ml-container-creator를 설치하고 SGLang 기반의 Llama 3.1 배포 프로젝트를 생성하는 과정

03
SageMakerAIModel을 상속받는 LlamaModelProvider 클래스를 생성하고 stream() 메서드를 오버라이드하여 파싱 로직을 구현한다. 이 메서드는 Strands의 요청을 모델 서버 형식으로 변환하여 전달하고, 모델의 스트리밍 응답(SSE)을 다시 Strands가 이해할 수 있는 contentBlockDelta 및 messageStop 형식으로 변환하여 반환한다.
python
def stream(self, messages: List[Dict[str, Any]], tool_specs: list, system_prompt: Optional[str], **kwargs):
    # ... (중략)
    payload = {
        "messages": payload_messages,
        "stream": True
    }
    response = self.runtime_client.invoke_endpoint_with_response_stream(
        EndpointName=self.endpoint_name,
        Body=json.dumps(payload)
    )
    for event in response['Body']:
        chunk = event['PayloadPart']['Bytes'].decode('utf-8')
        # SSE 포맷 파싱 및 Strands 포맷으로 yield
        if 'content' in delta:
            yield {
                "type": "contentBlockDelta",
                "delta": {"text": delta['content']},
                "contentBlockIndex": 0
            }

SageMakerAIModel을 확장하여 OpenAI 호환 스트리밍 응답을 Strands 포맷으로 변환하는 핵심 로직

에이전트 레이어, 파서 레이어, 모델 배포 레이어로 구성된 시스템 아키텍처 다이어그램이다.
DiagramStrands 에이전트가 커스텀 파서(LlamaModelProvider)를 거쳐 SageMaker 엔드포인트에 도달하는 흐름을 보여준다. 각 레이어의 역할과 데이터 변환 과정을 시각화하여 본문의 구현 구조를 명확히 설명한다.
04
구현된 커스텀 공급자를 Strands Agent 초기화 시 model 파라미터로 전달하여 통합을 완료한다. 이를 통해 에이전트는 내부 파싱 로직에 구애받지 않고 일관된 인터페이스로 커스텀 호스팅된 Llama 3.1 모델과 대화할 수 있으며, 시스템 프롬프트 및 컨텍스트 관리가 정상적으로 작동한다.
python
from strands.agent import Agent

provider = LlamaModelProvider(
    endpoint_name="llama-31-deployment-endpoint",
    region_name="us-east-1"
)

agent = Agent(
    name="llama-assistant",
    model=provider,
    system_prompt="You are a helpful AI assistant powered by Llama 3.1."
)

response = agent("What are the key benefits of deploying LLMs on SageMaker?")

구현된 커스텀 공급자를 사용하여 Strands 에이전트를 초기화하고 실행하는 예시

용어 해설

Bedrock 메시지 API(Bedrock Messages API)
Amazon Bedrock에서 사용하는 표준 메시지 통신 형식이다. Strands 에이전트 SDK가 모델과 데이터를 주고받을 때 기본적으로 기대하는 구조이며, 시스템 프롬프트와 사용자 메시지를 특정 스키마에 맞춰 전달한다.
SGLang
대형 언어 모델의 추론 속도를 높이기 위해 설계된 고성능 서빙 프레임워크이다. 복잡한 프롬프트 구조를 효율적으로 처리하며, 주로 OpenAI와 호환되는 API 엔드포인트를 제공하여 다양한 환경에서 쉽게 통합할 수 있도록 돕는다.
자체 컨테이너 사용(BYOC)
Bring Your Own Container의 약자로, 사용자가 직접 빌드한 Docker 이미지를 클라우드 서비스(SageMaker 등)에 배포하는 방식이다. 기본 제공 환경에서 지원하지 않는 특정 라이브러리나 커스텀 추론 엔진을 사용할 때 필수적이다.
서버 전송 이벤트(SSE)
Server-Sent Events의 약자로, 서버가 클라이언트에 실시간으로 데이터를 스트리밍하는 기술이다. LLM 추론 시 전체 텍스트가 완성될 때까지 기다리지 않고 생성되는 토큰을 즉시 화면에 표시하기 위해 널리 사용된다.
ML 컨테이너 크리에이터(ml-container-creator)
AWS Labs에서 제공하는 오픈소스 도구로, SageMaker 배포를 위한 Dockerfile, 빌드 스크립트, 인프라 코드를 자동으로 생성한다. 복잡한 BYOC 배포 과정을 표준화된 템플릿으로 간소화해준다.

기술

  • Amazon SageMaker
  • Strands Agents SDK
  • SGLang
  • Llama 3.1
  • ml-container-creator
  • Python
  • Docker

활용 사례

  • 커스텀 호스팅된 LLM 기반 AI 비서 구축
  • 특수 추론 엔진을 사용한 에이전트 성능 최적화
  • 다양한 모델 서버 응답 형식의 표준화
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 03. 06.수집 2026. 03. 06.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.