

# 문서 이해
<a name="modalities-document"></a>

**참고**  
이 설명서는 Amazon Nova 버전 1용입니다. Amazon Nova 2 문서 이해 가이드는 [문서 이해](https://docs.aws.amazon.com/nova/latest/nova2-userguide/using-multimodal-models.html#document-understanding)를 참조하세요.

Amazon Nova의 문서 이해 기능을 사용하면 프롬프트에 전체 문서(PDF, Word 파일, 스프레드시트 등)를 포함하고 콘텐츠에 대해 질문하거나 요청할 수 있습니다. Nova의 멀티모달 이해 모델(Lite, Pro, Premier)은 이러한 문서 내의 텍스트 및 시각적 요소(예: 차트 또는 테이블)를 모두 해석할 수 있습니다. 이를 통해 질문 답변, 요약, 긴 보고서 또는 스캔 문서 분석과 같은 사용 사례를 지원할 수 있습니다. 주요 기능에는 긴 문서를 위한 초대형 컨텍스트 창(1\$12M 토큰)과 단일 쿼리에서 여러 문서를 처리할 수 있는 기능이 포함됩니다.

Amazon Nova는 문서 입력을 두 가지 유형으로 구분합니다.
+ **텍스트 기반 문서 유형**(예: TXT, CSV, 마크다운, HTML, DOC): 주로 텍스트 콘텐츠에 대해 처리됩니다. Nova는 이러한 문서의 텍스트에서 정보를 이해하고 추출하는 데 중점을 둡니다.
+ **미디어 기반 문서 유형**(예: PDF, DOCX): 이러한 파일에는 복잡한 레이아웃, 이미지, 차트 또는 임베디드 그래픽이 포함될 수 있습니다. 미디어 기반 문서의 경우 Nova는 시각적 요소와 텍스트 요소를 모두 처리합니다. Nova는 비전 기반 이해를 활용하여 문서 텍스트와 함께 차트, 테이블, 다이어그램 또는 스크린샷과 같은 시각적 콘텐츠를 해석합니다.

  JPEG2000 및 JBIG2는 Amazon Nova의 PDF 파일에서 지원되지 않습니다.

지원되는 파일 형식에는 일반 텍스트 및 구조화된 텍스트 파일(CSV, TXT), 스프레드시트(XLS/XLSX), HTML/마크다운, Word 문서(DOC/DOCX), PDF 파일과 같은 일반적인 문서 유형이 포함됩니다. 문서 내 이미지의 경우 표준 이미지 형식(PNG, JPG, GIF, WebP)은 처리되지만 특정 이미지 인코딩(CYMK, SVG)이 포함된 PDF는 지원되지 않습니다.


**문서 크기 제한 및 사용 지침**  

| 제약 조건 | Limit | 
| --- | --- | 
|  최대 문서 수  |  요청당 최대 5개의 문서(직접 업로드와 Amazon S3 모두에 적용됨)  | 
|  텍스트 기반 문서 크기  |  각 텍스트 문서(예: .txt, .csv, .md, .html, .doc)는 ≤ 4.5MB여야 합니다.  | 
|  미디어 기반 문서 크기  |  .pdf 및 .docx 파일의 경우 개별 파일 크기 제한은 없지만 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/nova/latest/userguide/modalities-document.html)  | 
|  지원되지 않는 PDF 콘텐츠  |  CMYK 색상 프로필 또는 SVG 이미지가 포함된 PDF는 지원되지 않습니다.  | 

# API를 통한 Nova의 문서 이해 사용
<a name="modalities-document-examples"></a>

문서 QA(질문 답변) 또는 분석에 Amazon Nova를 사용하는 방법을 설명하기 위해 Python의 간단한 예제를 소개합니다. AWS Bedrock API(Boto3 SDK를 통해)를 사용해 PDF 문서를 모델이 답변할 질문과 함께 보냅니다.

```
            
import base64
import base64
import json
import boto3

# Initialize Bedrock runtime client (adjust region as needed)
client = boto3.client("bedrock-runtime", region_name="us-east-1")

MODEL_ID = "us.amazon.nova-lite-v1:5"  # using Nova Lite model in this example

# Read the document file (PDF) in binary mode
with open("my_document.pdf", "rb") as file:
    doc_bytes = file.read()

# Construct the conversation messages with document + question
messages = [
    {
        "role": "user",
        "content": [
            {
                "document": {
                    "format": "pdf",
                    "name": "Document1",  # neutral name for the document
                    "source": {
                        "bytes": doc_bytes  # embedding the PDF content directly
                    }
                }
            },
            {
                "text": "Here is a question about the document: ... (your question) ... ?"
            }
        ]
    }
]

# Set inference parameters (optional)
inf_params = {"maxTokens": 4000, "topP": 0.1, "temperature": 0.3}

# Invoke the model
response = client.converse(modelId=MODEL_ID, messages=messages, inferenceConfig=inf_params)

# Extract and print the answer
answer_text = response["output"]["message"]["content"][0]["text"]
print(answer_text)
```

입력 파일이 크거나(직접 업로드 한도인 25MB 초과) 파일이 많은 경우 Amazon S3에 저장하고 참조할 수 있습니다. 이렇게 하면 요청을 통해 원시 바이트가 전송되지 않습니다. S3를 사용하는 경우 Bedrock 서비스에 버킷/객체에 액세스할 수 있는 권한이 있는지 확인합니다. 예를 들어 S3의 PDF를 참조하기 위해 문서 소스는 다음과 같이 ‘바이트’ 대신 ‘s3Location’을 사용합니다.

```
messages = [
    {
        "role": "user",
        "content": [
            {
                "document": {
                    "format": "pdf",
                    "name": "Report2023",
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-bucket/path/to/document1.pdf",
                            "bucketOwner": "123456789012"
                        }
                    }
                }
            },
            {
                "text": "Summarize the key findings from the Q3 2023 report."
            }
        ]
    }
]
```

**참고**  
문서 이름에는 영숫자, 하이픈, 괄호, 대괄호만 포함할 수 있습니다.  
`name` 필드는 모델이 지침으로 잘못 해석할 여지가 있어 프롬프트 인젝션에 취약합니다. 따라서 중립 이름을 지정하는 것이 좋습니다.