섹션별 상세
SGLang이나 vLLM 같은 커스텀 서빙 프레임워크는 범용성을 위해 OpenAI 호환 형식을 사용하지만, Strands 에이전트는 Bedrock Messages API 형식을 기대한다. 이러한 데이터 구조의 불일치는 기본 SageMakerAIModel 클래스를 사용할 때 필드 접근 오류인 TypeError를 유발하며 시스템 통합을 방해한다.
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-Instructml-container-creator를 설치하고 SGLang 기반의 Llama 3.1 배포 프로젝트를 생성하는 과정
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 포맷으로 변환하는 핵심 로직

구현된 커스텀 공급자를 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)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
