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는 자연스럽게 자신의 작업을 설명하고 싶어 하지만, 많은 경우 요청한 콘텐츠만 필요하고 그 외에는 아무것도 필요하지 않습니다.

Stop Sequences와 Assistant Message Prefilling 결합하기

해결책은 우리가 다룬 두 가지 기법, 즉 stop sequences와 assistant message prefilling을 결합하는 것입니다. 실제로 어떻게 작동하는지 살펴보겠습니다:

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=["```"])

이 코드를 실행하면 마크다운 서식이나 추가 설명 없이 순수한 JSON 콘텐츠만 돌려받게 됩니다.

내부적으로 작동하는 방식

Claude가 요청을 처리할 때 일어나는 일은 다음과 같습니다:

  1. Claude는 사용자 메시지를 읽고 "전체 규칙을 작성하고 아마도 이를 설명해야겠다"고 생각합니다
  2. 미리 채워진 assistant 메시지를 보고 이미 JSON 마크다운 블록 작성을 시작했다고 가정합니다
  3. Claude는 "아, 이미 JSON 부분을 시작했으니 실제 JSON 콘텐츠만 작성하면 되겠다"고 생각합니다
  4. JSON 콘텐츠를 생성합니다
  5. Claude가 ```로 마크다운 블록을 닫으려고 할 때, stop sequence에 도달하여 생성이 즉시 중단됩니다

결과적으로 미리 채워진 시작 부분과 stop sequence 사이의 모든 내용, 즉 정확히 원하던 콘텐츠를 얻게 됩니다.

출력 정리하기

반환된 텍스트에는 여분의 줄바꿈이 있을 수 있지만, 이는 쉽게 정리할 수 있습니다:

python
import json

# 유효성 검사 및 포맷팅을 위해 JSON으로 파싱
parsed_json = json.loads(text.strip())

이 기법은 JSON뿐만 아니라 모든 구조화된 데이터 형식에 적용됩니다. Python 코드, 글머리 기호 목록, 또는 다른 특정 콘텐츠 형식을 생성하든, assistant message prefilling을 사용해 응답을 시작하고 stop sequences를 사용해 원하는 정확한 지점에서 끝낼 수 있습니다.

이 접근 방식은 Claude의 출력 형식을 정밀하게 제어할 수 있게 해주어, 애플리케이션이 다운스트림 처리를 방해할 수 있는 추가 서식이나 설명 없이 깔끔하고 사용 가능한 데이터를 얻을 수 있도록 보장합니다.