파일 입력부터 비동기 처리와 JSON 스키마까지
멀티모달은 텍스트 외 이미지·문서·음성·영상 등을 입력하거나 출력하는 기능이고, 구조화 응답은 모델 결과의 형식을 지정하는 기능입니다. 모델과 API가 필요한 조합을 지원하는지 확인하고, 형식이 맞는 결과도 내용과 권한을 별도로 검증해야 합니다.
가상의 사내 장비 안내 도우미를 예로 파일 전달과 비동기 처리, JSON Schema의 역할을 살펴봅니다.
이미지·문서·음성·영상의 전달 방식
직원이 장비 신청 안내문의 사진을 올리고 “어디에서 신청하나요?”라고 묻는다고 가정하겠습니다. 텍스트 질문만 받는 도우미라면 사진 내용을 처리할 수 없습니다. 이미지 입력을 지원하는 모델과 API에 질문과 이미지를 함께 전달하도록 구성해야 합니다.
멀티모달은 텍스트 외의 이미지·음성·영상처럼 서로 다른 형태의 정보를 다루는 것을 뜻합니다. 한 모델이 이미지를 입력받아 텍스트로 설명할 수 있어도 이미지를 생성하거나 음성을 처리할 수 있다는 뜻은 아닙니다. 필요한 입력과 출력 각각의 지원 여부를 확인합니다. 모델별 API 지원
Converse 계열에서는 지원되는 콘텐츠를 메시지의 콘텐츠 블록으로 전달합니다. 예를 들어 질문은 text 블록, 이미지는 image 블록에 담을 수 있습니다. 문서나 영상도 해당 모델과 API가 지원하는 콘텐츠 형태를 사용해야 합니다. 음성은 모델과 API에 따라 별도의 요청 형식이나 양방향 스트림이 필요할 수 있으므로 같은 메시지 형식을 모든 모델에 적용하지 않습니다. Converse 콘텐츠 블록 · API별 호환성
파일 위치·크기·형식 조건
파일을 전달하기 전에는 모델이 요구하는 형식과 크기·개수, 이미지 크기나 영상 길이 등 적용 조건을 확인합니다. 전송 방법도 중요합니다. 일부 입력은 파일 바이트를 요청에 넣고, 지원되는 모델·콘텐츠 유형에서는 S3 위치를 지정할 수 있습니다. 모든 모델이 같은 방식으로 S3를 읽는 것은 아닙니다. Converse 입력 형식
예를 들어 Converse 메시지의 일반 제한에는 이미지 최대 20개, 이미지당 3.75 MB와 8,000×8,000픽셀 이하, 문서 최대 5개와 문서당 4.5 MB 이하가 안내되어 있습니다. 모델별 추가 제한이 있을 수 있으므로 이 수치만으로 모든 모델의 사용 가능 여부를 판단하지 않습니다. Converse 메시지 제한
Converse에서 document 블록을 사용하면 같은 메시지에 문서와 관련된 text 블록을 포함해야 합니다. 일반적인 문서 요청에는 형식을 명시해야 하며, 일부 인용 설정을 사용하는 인라인 콘텐츠에는 예외가 있습니다. 문서 이름도 모델이 지시로 해석하지 않도록 중립적으로 정합니다. Converse 문서 입력 조건
S3를 참조하는 구성을 사용할 때는 지원 여부와 요청을 처리하는 주체의 객체 접근·암호화 권한, 저장 리전 및 보관 정책을 확인합니다. 실제 조직의 파일명이나 리소스 식별자를 예시에 그대로 넣지 않습니다.
비동기 처리가 필요한 작업
텍스트 답변처럼 요청을 보내고 곧바로 결과를 받는 방식과 달리, 일부 영상 생성 작업은 비동기 호출을 사용합니다. 요청을 시작한 뒤 즉시 결과 파일이 아닌 작업 식별자를 받고, 나중에 상태를 확인해 완성된 출력을 읽는 구조입니다. 모든 영상 모델이 동일한 API를 사용하는 것은 아닙니다. Bedrock Invoke API
예를 들어 StartAsyncInvoke 요청에는 모델 ID, 모델별 입력과 출력 저장 위치가 필요합니다. 반환된 작업 식별자로 GetAsyncInvoke를 호출해 상태를 확인하고, 완료되면 지정된 저장 위치의 결과를 읽습니다. 실패 상태와 실패 원인도 확인해야 합니다. 비동기 호출 시작 · 비동기 호출 상태 조회
이때 모델 호출 권한과 결과 저장·읽기에 필요한 S3 및 필요한 경우 KMS 권한을 각각 검토합니다. 재시도 시 중복 작업이 생기지 않도록 요청 토큰과 애플리케이션의 작업 상태를 관리합니다. 처리 시간과 비용은 모델과 작업 조건에 따라 다릅니다.
JSON 응답과 스키마 제약의 의미
도우미가 안내문에서 장비 이름과 신청 위치를 추출해 다른 프로그램에 넘긴다고 가정하겠습니다. 자연어로 “JSON으로 답해 줘”라고 요청하는 방식은 가능하지만, 응답에 설명 문장이 섞이거나 필드가 빠질 수 있습니다.
지원되는 Bedrock 구조화 출력은 JSON Schema로 필드와 자료형 등 결과의 구조를 제한합니다. Converse에서는 outputConfig.textFormat을 사용하며, InvokeModel은 모델에 따라 다른 요청 필드를 사용합니다. 모델·리전·API·프로파일별 지원 조건을 확인해야 합니다. Bedrock 구조화 출력
아래는 장비 이름과 신청 위치를 문자열로 받기 위한 가상의 JSON Schema입니다. API 요청 전체가 아니라 스키마 부분만 나타냅니다. properties는 필드와 자료형을, required는 필수 필드를, additionalProperties는 지정하지 않은 필드를 허용할지 정합니다. 지원하는 JSON Schema 범위
"type": "object",
"properties": {
"item": {"type": "string"},
"request_location": {"type": "string"}
},
"required": ["item", "request_location"],
"additionalProperties": false
}
item과 request_location은 필수 문자열이고 다른 필드는 허용하지 않습니다. 이 스키마를 적용하는 API의 요청 필드에 맞춰 전달해야 하며, 내용이 사실이라는 보장은 별도로 판단해야 합니다.
모델별 지원 차이와 출력 검증
Bedrock 구조화 출력은 JSON Schema의 일부 기능만 지원합니다. 예를 들어 숫자의 minimum·maximum 같은 제약은 지원 범위에 포함되지 않으며, 각 object의 additionalProperties는 false로 지정해야 합니다. 지원하지 않는 스키마는 요청 오류를 일으킬 수 있습니다. 구조화 출력의 지원 제약
일부 조합에는 기능 간 제약도 있습니다. AWS는 Anthropic 모델에서 문서 인용과 구조화 출력을 함께 사용할 수 없다고 안내합니다. 따라서 모델이 각각의 기능을 지원하더라도 같은 요청에서 함께 사용할 수 있는지는 별도로 확인해야 합니다. 구조화 출력 지원 조건
형식이 스키마에 맞아도 request_location에 실제와 다른 위치가 들어갈 수 있습니다. 애플리케이션은 반환된 값이 원문과 일치하는지, 필요한 항목이 누락되지 않았는지, 업무상 허용된 값인지 확인해야 합니다. 모델이 문서의 내용을 잘못 읽을 가능성도 평가 대상입니다.
출력을 실제 신청 변경 같은 작업에 사용한다면 JSON 파싱 성공만으로 실행하지 않습니다. 사용자 권한, 대상 값과 필요한 승인 절차를 확인하고, 결과를 반영하기 전 검증에 실패한 경우의 처리도 설계합니다.
'AI' 카테고리의 다른 글
| 대화 이력과 스트리밍: 챗봇 응답이 화면에 나타나는 과정 | Bedrock 9편 (0) | 2026.11.01 |
|---|---|
| InvokeModel과 호환 API: 공통 인터페이스 밖의 기능 사용하기 | Bedrock 8편 (0) | 2026.11.01 |
| Converse API 이해: 메시지·시스템 지시·추론 설정 | Bedrock 7편 (0) | 2026.11.01 |
| Bedrock API와 엔드포인트: 어떤 주소에 어떤 요청을 보내는가 | Bedrock 6편 (0) | 2026.11.01 |
| Bedrock 시작 전 준비: 계정·인증·모델 접근·리전 | Bedrock 5편 (0) | 2026.11.01 |
