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

Claude가 JSON, Python 코드, 또는 글머리 기호 목록과 같은 구조화된 데이터를 생성해야 할 때, 흔히 발생하는 문제에 부딪히게 됩니다. Claude는 도움이 되고자 설명 텍스트, 헤더, 또는 마크다운 서식을 콘텐츠 주위에 추가하려고 합니다. 이러한 추가 설명은 원시 데이터만 필요한 경우 사용자 경험을 저해합니다.

AWS EventBridge 규칙을 생성하는 웹 앱을 만드는 경우를 생각해 보세요. 사용자가 설명을 입력하고 생성을 클릭하면, 즉시 복사해서 사용할 수 있는 깨끗한 JSON을 기대합니다. Claude가 설명 텍스트와 함께 마크다운 코드 블록으로 감싸진 JSON을 반환하면, 사용자는 전체 응답을 그대로 복사할 수 없으며 JSON 부분만 수동으로 선택해야 합니다.

기본 응답의 문제점

기본적으로 Claude는 구조화된 출력을 다음과 같이 포맷하는 경향이 있습니다:

markdown
# EventBridge Rule
```json
\{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": \{"state": ["running"]\}
\}
```
This rule captures EC2 instance state changes when instances start running or stop.

이는 문서화에는 훌륭하지만, 프로그래밍 방식으로 사용하기 위해 JSON만 필요한 경우에는 문제가 됩니다.

해결책: 어시스턴트 메시지 프리필링 + 중지 시퀀스

어시스턴트 메시지 프리필링과 중지 시퀀스를 결합하여 원하는 콘텐츠만 정확히 얻을 수 있습니다. 작동 방식은 다음과 같습니다:

python
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")

text = chat(messages, stop_sequences=["```"])

이 기법은 다음과 같이 작동합니다:

  • 여는 마크다운 구분자로 어시스턴트 메시지를 프리필링합니다
  • Claude가 코드 블록을 닫으려고 할 때 생성을 중단하도록 중지 시퀀스를 설정합니다
  • 이러한 구분자 사이의 콘텐츠만 캡처합니다

내부 작동 방식

Claude가 요청을 받으면, 프리필링된 어시스턴트 메시지를 보고 이미 JSON 코드 블록 작성을 시작했다고 가정합니다. 자체 헤더와 여는 구분자를 추가하는 대신, Claude는 곧바로 실제 JSON 콘텐츠 생성으로 넘어갑니다.

Claude가 JSON 작성을 마치고 자연스럽게 ```로 마크다운 코드 블록을 닫으려고 할 때, 중지 시퀀스가 즉시 생성을 중단하고 응답을 반환합니다. 추가 서식 없이 JSON 콘텐츠만 얻게 됩니다.

결과 처리하기

반환된 텍스트에는 일부 줄바꿈 문자가 포함될 수 있지만, 다음과 같이 쉽게 정리할 수 있습니다:

python
import json

# JSON으로 파싱하여 유효성을 검사하고 형식을 지정합니다
parsed_data = json.loads(text.strip())

# 또는 다른 데이터 유형의 경우 공백만 제거합니다
clean_text = text.strip()

JSON을 넘어서

이 기법은 JSON 생성에만 국한되지 않습니다. Claude가 설명 텍스트를 추가하려는 자연스러운 경향 없이 콘텐츠만 원하는 모든 구조화된 데이터에 사용할 수 있습니다:

  • Python 코드 스니펫
  • 글머리 기호 목록
  • CSV 데이터
  • 구성 파일
  • 깨끗하고 복사 가능한 출력이 중요한 모든 형식

핵심은 Claude가 해당 콘텐츠 유형 주위에 자연스럽게 사용할 구분자를 파악한 다음, 여는 구분자를 프리필링하고 닫는 구분자에서 중지하는 것입니다. 이를 통해 Claude의 자연스러운 서식 본능을 활용하면서도 출력 형식을 정밀하게 제어할 수 있습니다.