Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

Claude로부터 구조화된 데이터를 얻어야 할 때는 두 가지 주요 접근 방식이 있습니다: 메시지 프리필과 중지 시퀀스를 사용하는 프롬프트 기반 기법, 또는 도구를 사용하는 더 견고한 방법입니다. 프롬프트 기반 접근 방식은 설정이 더 간단하지만, 도구는 추가적인 복잡성을 감수하는 대신 더 신뢰할 수 있는 출력을 제공합니다.

구조화된 데이터를 위한 도구

도구 기반 접근 방식은 추출하고자 하는 데이터의 정확한 구조를 정의하는 JSON 스키마를 생성하는 방식으로 작동합니다. Claude가 응답을 올바르게 포맷하기를 바라는 대신, 원하는 출력 구조와 일치하는 특정 매개변수로 호출할 함수를 Claude에게 제공하는 것입니다.

프로세스는 다음과 같이 작동합니다:

  • 찾고자 하는 데이터의 구조를 설명하는 스키마를 작성합니다
  • tool_choice 매개변수를 사용하여 Claude가 도구를 사용하도록 강제합니다
  • 도구 사용 응답에서 구조화된 데이터를 추출합니다
  • 후속 응답을 제공할 필요가 없습니다 - 데이터를 얻으면 완료됩니다

예를 들어, 명세서에서 재무 잔액과 주요 인사이트를 추출하려는 경우, 스키마는 이를 각각 정수와 문자열 배열로 정의합니다.

도구 사용 제어하기

이 기법의 중요한 부분은 Claude가 실제로 도구를 호출하도록 보장하는 것입니다. tool_choice 매개변수를 사용하여 이 동작을 제어할 수 있습니다:

  • {"type": "auto"} - 모델이 도구 사용이 필요한지 결정합니다 (기본값)
  • {"type": "any"} - 모델이 도구를 사용해야 하지만, 어떤 도구를 사용할지는 선택할 수 있습니다
  • {"type": "tool", "name": "TOOL_NAME"} - 모델이 지정된 도구를 사용해야 합니다

구조화된 데이터 추출의 경우, 일반적으로 Claude가 특정 스키마 도구를 호출하도록 보장하기 위해 세 번째 옵션을 사용하게 됩니다.

구현 예시

기사에서 제목, 저자, 주요 인사이트를 추출하고자 한다고 가정해 보겠습니다. 먼저, 도구 스키마를 생성합니다:

python
article_summary_schema = {
    "name": "article_summary",
    "description": "Extracts structured data from articles",
    "input_schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "author": {"type": "string"},
            "key_insights": {
                "type": "array",
                "items": {"type": "string"}
            }
        }
    }
}

그런 다음 도구를 사용하여 Claude를 호출하고 사용을 강제합니다:

python
response = chat(
    messages,
    tools=[article_summary_schema],
    tool_choice={"type": "tool", "name": "article_summary"}
)

응답에는 input 필드에 구조화된 데이터가 포함된 도구 사용 블록이 포함됩니다. 이를 직접 접근할 수 있습니다:

python
structured_data = response.content[0].input

각 접근 방식을 사용해야 할 때

빠르고 간단한 것이 필요할 때는 프롬프트 기반 구조화된 출력을 선택하세요. 보장된 신뢰성이 필요하고 추가적인 설정 복잡성을 처리할 수 있을 때는 도구를 사용하세요. 두 기법 모두 특정 사용 사례와 요구 사항에 따라 가치가 있습니다.