메뉴 닫기

Amazon Bedrock 구조화 출력으로 신뢰성 있는 AI JSON 응답 구축하기

아마존 Bedrock의 구조화 출력 기능: AI 응답 신뢰성을 확보하는 새로운 방법

인공지능 시스템을 실제 비즈니스에 안정적으로 배포하는 과정에서 가장 까다로운 부분 중 하나는 모델이 산출하는 JSON 응답의 신뢰성입니다. 기존에는 모델을 활용할 때마다 결과값을 파싱하고, 형식검사를 수행하며, 실패 시 재시도 로직을 짜야 하는 번거로움이 있었습니다. 그러나 이제 Amazon Bedrock의 ‘Structured Outputs(구조화 출력)’ 기능을 활용하면 이러한 수고를 줄이고, 검증된 JSON 응답을 바로 받아보는 자동화된 파이프라인을 구축할 수 있습니다.

구조화 출력이 필요한 이유

기존의 JSON 생성 방식은 많은 문제를 야기했습니다. 예를 들어, JSON 문법 오류(json.loads 실패), 필드 누락, 타입 불일치, 스키마 불일치 등은 데이터 처리 파이프라인을 중단시키거나 반복 로직을 유발해 지연과 비용을 증가시켰습니다.

예를 들어 예약 시스템에서 passengers 필드가 정수형이어야 함에도 "two" 혹은 "2"와 같은 문자열로 반환될 경우, 함수 호출이 실패하거나 고장이 발생할 수 있습니다.

Amazon Bedrock 구조화 출력의 핵심 메커니즘

Bedrock이 제공하는 구조화 출력 기능은 JSON Schema 기반의 형식 제어와 툴 사용 제약(strict tool use)이라는 두 가지 메커니즘으로 작동합니다.

  1. JSON Schema 기반 출력: 모델의 응답 형식을 사용자의 요구 스키마에 맞도록 강제합니다.
  2. Strict Tool 사용: 외부 함수 호출 시 정확한 파라미터 형식과 내용만을 수용하여 자동화를 안정화합니다.

이렇게 모델 출력의 불확실성을 제거하여 신뢰할 수 있는 데이터 흐름을 구성할 수 있습니다.

Amazon Bedrock 구조화 출력 흐름

사용자가 작성한 스키마에 따라 다음 프로세스가 실행됩니다:

  • 스키마 유효성 검사
  • 스키마 기반 문법 컴파일 (최초 요청 시 지연 가능)
  • 24시간 캐시 유지
  • 컴파일된 문법에 따라 출력 생성

이 방식을 통해 JSON.parse 실패가 사라지고, 재시도 없이도 안정적인 출력이 가능해지며, 자동화된 프로그램 흐름이 더욱 견고해집니다.

활용 예제: Converse API로 이메일 정보 추출

import boto3
import json

bedrock_runtime = boto3.client('bedrock-runtime', region_name='us-east-1')

extraction_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"plan_interest": {"type": "string"},
"demo_requested": {"type": "boolean"}
},
"required": ["name", "email", "plan_interest", "demo_requested"],
"additionalProperties": False
}

response = bedrock_runtime.converse(
modelId="us.anthropic.claude-opus-4-5-20251101-v1:0",
messages=[{
"role": "user",
"content": [{"text": "John Smith은 Enterprise 플랜에 관심이 있으며, 다음 화요일 오후 2시에 데모를 요청했습니다. 이메일: john@example.com"}]
}],
inferenceConfig={"maxTokens": 1024},
outputConfig={
"textFormat": {
"type": "json_schema",
"structure": {
"jsonSchema": {
"schema": json.dumps(extraction_schema),
"name": "lead_extraction",
"description": "고객 이메일에서 리드 정보 추출"
}
}
}
}
)

result = json.loads(response["output"]["message"]["content"][0]["text"])
print(json.dumps(result, indent=2))

출력 결과:

{
"name": "John Smith",
"email": "john@example.com",
"plan_interest": "Enterprise",
"demo_requested": true
}

별도의 파싱 및 유효성 검사 로직 없이 API로부터 신뢰 가능한 JSON 객체를 바로 사용할 수 있습니다.

Strict 모드: 외부 함수 호출에서의 안전성 강화

정확한 입력값이 필요한 외부 함수 호출 시, strict: true 옵션을 활용하면 필요 조건을 구조적으로 만족하는 파라미터만 전달됩니다. 예시로는 날씨 확인 툴 호출 시 사용자 입력("San Francisco", "celsius")이 정확히 매칭되어야만 모델이 호출합니다.

실제 코드:

"strict": true,
"inputSchema": {
"json": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "unit"],
"additionalProperties": False
}
}

적절한 필드 명명 및 스키마 특징

  • 필수 필드에는 반드시 required 설정 필요
  • additionalProperties는 반드시 false로 설정
  • enum을 적극 사용하여 값의 범위를 제한
  • 불필요한 스키마 변경을 피하면 캐시 성능을 최대한 활용 가능

적용 분야

구조화 출력 기능은 산업 전반에서 다양한 방식으로 활용될 수 있습니다.

  • 금융: 보고서, 신청서에서 정확한 숫자/필드를 추출하여 재무 시스템으로 전달
  • 헬스케어: 환자 정보 및 진단 내용을 EHR 형식에 맞게 자동화
  • 전자상거래: 제품 설명에서 일관된 스펙 및 속성 정보 추출
  • 고객 서비스: 문의 내용을 정확하게 분류 및 자동 응답

API 별 사용 전략

  • Converse API: 멀티턴 대화 기반 응용에 적합
  • InvokeModel API: 단일 응답 혹은 다양한 모델 포맷에 직접 접근 필요 시 사용

Amazon Bedrock 구조화 출력 아키텍처 다이어그램

결론

Amazon Bedrock의 구조화 출력 기능은 AI 모델의 불확실한 출력 문제를 해결해주는 혁신적인 기능입니다. JSON Schema 기반의 엄격한 응답 구조와 툴 제약을 활용하여 완전 자동화된 데이터 파이프라인, 에이전트 시스템, API 백엔드 등에서 높은 신뢰성과 품질을 보장합니다. 이제는 복잡한 파싱, 재시도 로직 없이도 기업용 AI 애플리케이션을 신속하게 배포하고 운영할 수 있는 시점입니다.

https://aws.amazon.com/blogs/machine-learning/structured-outputs-on-amazon-bedrock-schema-compliant-ai-responses/

AI, Cloud 관련한 문의는 아래 연락처로 연락주세요!

(주)에이클라우드
이메일 : acloud@a-cloud.co.kr
회사 번호 : 02-538-3988
회사 홈페이지 : https://www.a-cloud.co.kr/
문의하기


AI, Cloud 도입 상담 배너