Skip to main content

Claude를 써보면 이런 순간이 옵니다. "이번 답은 너무 길어." "톤이 과장됐어." "표로 달라 했는데 글로 풀어쓰네." "모르는 걸 아는 척했네."

이 챕터의 목표는 간단합니다. 같은 일을 여러 번 시켜도 비슷한 품질이 나오게 만드는 것입니다. 그 핵심 도구가 바로 제약 조건(Constraints), 스키마/템플릿(Output format), 그리고 체크리스트(Verification) 입니다.

공식 문서에서도 일관성을 높이려면 원하는 출력 형식을 정확히 지정하고, 예시로 제약을 강화하고, 복잡한 작업은 쪼개서(체인) 처리하라고 안내합니다.1 또 환각(사실이 아닌 내용을 그럴듯하게 말하는 현상)을 줄이려면 "모르면 모른다고 말할 권한"을 주고, 문서 작업에서는 직접 인용으로 근거를 먼저 잡아두라고 말합니다.2

출력 제어는 '글쓰기'가 아니라 '계약서'다

claude.ai에서의 출력 제어는 감으로 하는 게 아닙니다. 가장 좋은 비유는 계약서예요.

  • 무엇을 납품할지(산출물)

  • 납품물의 규격이 무엇인지(길이/형식)

  • 납품물의 말투가 어떤지(톤)

  • 모르는 게 나오면 어떻게 처리할지(불확실성 규칙)

  • 납품 전에 스스로 검사할지(체크리스트)

이렇게 써두면 Claude는 "알아서 센스 있게"보다 "조건을 충족하는 결과"를 더 잘 냅니다.3

출력 제어의 5가지 레버

출력 제어는 보통 아래 5가지만 잡아도 체감이 큽니다.

  • 길이: 글자 수/문장 수/섹션 수/요약 비율

  • 톤: 존댓말/딱딱함/친근함/과장 금지/금지어

  • 형식: 표/마크다운/JSON/XML/템플릿

  • 불확실성 처리: 모름 표기, 근거 인용, 가정 표시, 질문 유도

  • 검증(자기점검): 규칙 준수 체크, 누락 항목 확인, 근거 없는 주장 제거

이 중에서 많은 사람이 톤만 조절하려고 합니다("전문적으로 써줘", "정중하게"). 그런데 재현성을 올리는 쪽은 보통 형식과 검증입니다.

길이 제어: "짧게" 말고, 자를 수 있게 정의하라

"간단히 요약"은 사람에게도 모호합니다. 그래서 길이는 측정 가능한 단위로 고정하는 게 좋습니다.

가장 잘 먹히는 길이 단위 4개

  1. 문장 수

문장 수는 가장 직관적입니다.

예: "본문은 8~10문장. 마지막 문장은 행동 요청(CTA) 1문장."

  1. 문단/섹션 수

예: "3문단 구성: (1) 결론 (2) 근거 (3) 다음 액션."

  1. 글자 수/단어 수 범위

예: "한국어 250~350자(공백 포함)로."

  1. 항목 수

예: "핵심 5개, 리스크 3개, 질문 2개."

여기서 요령 하나. '정확히 N개'는 강력하지만, 입력이 빈약하면 억지로 채우다 품질이 흔들립니다. 그래서 현실적으로는 "최대 N개" 또는 "N개를 목표로 하되, 부족하면 '없음'이라고 적어라"가 더 안전합니다.

길이를 더 안정시키는 '2단계 생성'

한 번에 완성본을 뽑으려 하면 길이가 튀는 경우가 많습니다. 그럴 때는 작업을 두 단계로 쪼개세요. 일관성 문서도 복잡한 작업은 체인으로 쪼개라고 합니다.1

  • 1단계: 구조만 만들기(목차/뼈대)

  • 2단계: 그 구조를 채워서 완성하기

claude에서 이렇게 요청하면 됩니다.

<task>
아래 입력으로 2단계로 작성해줘.
1) 먼저 '목차(섹션 제목)'만 제시
2) 내가 OK 하면, 같은 목차를 유지한 채 완성본 작성
</task>

<constraints>
- 최종본 분량: 350~450자
- 섹션: 3개 고정
</constraints>

<input>
[원문]
</input>

이 방식의 장점은 "길이"를 직접 때려 맞추는 게 아니라, 틀을 먼저 고정해 길이가 따라오게 만든다는 점입니다.

길이 초과/미달 시 처리 규칙까지 써두기

업무에서는 "길이를 지키지 못했을 때 어떻게 수정할지"까지 정해두면 재현성이 올라갑니다.

예를 들어 이렇게요.

<constraints>
- 분량: 10문장
- 분량이 초과하면: 중요도가 낮은 예시는 삭제
- 분량이 부족하면: '다음 액션' 문장을 1개 추가
</constraints>

Claude는 이런 규칙을 주면 "아무 문장이나 늘리기/줄이기"가 아니라 우선순위 기반으로 편집합니다.

톤 제어: 형용사 대신 '문장 규칙'으로 고정하라

"정중하게"는 각자 마음속 기준이 다릅니다. 톤을 안정시키려면 문장 패턴과 금지 규칙이 필요합니다.

톤을 고정하는 가장 쉬운 3줄

  • 말투: "~합니다"로 끝나는 존댓말

  • 과장 금지: "반드시/무조건/100%/최고" 같은 보장형 표현 금지

  • 감정 표현 제한: "너무/정말/굉장히" 같은 과도한 강조어 최소화

이 3줄만으로도 결과가 '회사 문서' 쪽으로 확 기웁니다.

톤은 '예시 1개'가 형용사 10개를 이긴다

공식 가이드에서도 예시는 출력 형식과 톤을 조정하는 가장 신뢰할 수 있는 방법 중 하나라고 말합니다.3

가장 실전적인 방법은 "원하는 톤의 미니 샘플(2~4문장)"을 주는 겁니다.

<tone_sample>
- 일정 조율을 위해 아래 두 가지 옵션을 제안드립니다.
- 가능하신 시간을 회신 주시면 확정 후 캘린더 초대 발송드리겠습니다.
</tone_sample>

샘플을 주면 Claude는 '정중함'이라는 추상 개념을 해석하는 대신, 샘플의 리듬을 복제합니다.

'너무 친절한 서론'을 막는 방법

Claude가 종종 "물론이죠! 도와드릴게요." 같은 서론을 붙이면, 문서가 가벼워 보일 수 있습니다.

해결은 간단합니다.

<constraints>
- 인사/서론 금지
- 바로 본문 시작
</constraints>

그리고 더 강력한 버전은 "출력은 템플릿만"입니다.

<constraints>
- 아래 템플릿에 있는 텍스트 외에는 쓰지 말 것(설명/서론 금지)
</constraints>

형식 제어: 표/JSON/XML은 '데이터 모드' 스위치다

형식을 지정하는 순간, Claude의 모드는 "글쓰기"에서 "규격 생산"으로 바뀝니다. 일관성 가이드도 원하는 출력 형식을 JSON, XML, 템플릿으로 정확히 정의하라고 강조합니다.1

표(테이블)로 고정하는 법

표는 claude 에서 특히 유용합니다. 왜냐하면 표는 누락을 눈으로 바로 발견할 수 있기 때문입니다.

예: 회의록을 흔들리지 않게 뽑기

<task>
아래 메모로 회의록을 만들어줘.
</task>

<constraints>
- 출력은 마크다운 표 1개만
- 행은 최소 8개, 최대 12개
- 모르는 항목은 '미확정'이라고 쓰기
</constraints>

<output_format>
| 항목 | 내용 |
|---|---|
| 회의명 | |
| 일시 | |
| 참석자 | |
| 안건 | |
| 결정사항 | |
| 보류/리스크 | |
| 담당자/기한 | |
| 다음 회의 | |

</output_format>

<input>
[회의 메모]
</input>

표의 장점은 "항목이 빠졌다"가 즉시 보인다는 점입니다. 그리고 '미확정' 같은 값을 허용하면, Claude가 억지로 채우는 대신 빈칸을 빈칸으로 남기는 습관을 갖게 됩니다.

JSON으로 고정하는 법(claude.ai 버전)

자동화까지 갈 게 아니라면, claude.ai에서도 JSON을 "추출기"처럼 쓸 수 있습니다.

다만 중요한 한계가 있습니다.

  • claude.ai에서 "유효한 JSON"을 요구해도 가끔 깨질 수 있습니다.

  • "진짜로 항상 스키마를 맞춰야 하는 업무"라면 API의 Structured outputs가 정답입니다.4

그럼에도 claude에서 JSON을 쓰는 이유는, 결과를 다시 엑셀/노션/스크립트로 옮기기 쉽기 때문입니다.

<task>
아래 텍스트에서 고객 요청을 JSON으로 추출해줘.
</task>

<constraints>
- 출력은 JSON만. 코드블록(```), 설명 문장 금지
- 텍스트에 없으면 추측하지 말고 null
- 날짜 형식은 YYYY-MM-DD로 통일, 불명확하면 null
</constraints>

<output_format>
{
  "company": "string|null",
  "contact": {
    "name": "string|null",
    "email": "string|null"
  },
  "request_summary": "string",
  "deadline": "string|null",
  "budget": "string|null",
  "next_questions": ["string"]
}
</output_format>

<input>
[상담 기록/메일]
</input>

여기서 포인트는 "잘 만들라"가 아니라 타입 규칙과 null 규칙입니다. 이 두 가지가 없으면 JSON이 그럴듯한 소설이 되기 쉽습니다.

XML은 '경계'를 만들 때 강하다

XML은 결과를 데이터로 쓰기보다는, 프롬프트/출력을 섞이지 않게 만들 때 강합니다. 5장에서 태그로 섹션을 나눴죠. 같은 원리로, 출력도 태그로 나누면 "어디까지가 결론인지, 어디까지가 근거인지"가 선명해집니다.

<task>
아래 문서를 읽고, 결론과 근거를 분리해 답해줘.
</task>

<constraints>
- 반드시 아래 태그 구조를 지킬 것
- 근거는 문서에서 짧게 직접 인용(따옴표)
</constraints>

<output_format>
<answer>
  <conclusion>...</conclusion>
  <evidence>
    <quote>"..."</quote>
    <quote>"..."</quote>
  </evidence>
  <unknowns>
    <item>...</item>
  </unknowns>
</answer>
</output_format>

<input>
[문서/발췌]
</input>

이런 구조는 특히 "결론만 멋있고 근거가 빈약한 답"을 줄이는 데 도움이 됩니다.

스키마 설계 요령: '누락'을 막고, '추측'을 막아라

스키마(템플릿)는 크게 두 가지 역할을 합니다.

  • 누락 방지: 빠지면 안 되는 칸을 만들어둔다

  • 추측 방지: 모르는 값은 어떻게 표시할지 정한다

실전에서는 아래 3가지만 기억해도 됩니다.

  • 필수/선택을 구분: "반드시 채울 것"과 "없으면 null/미확정"을 갈라두기

  • 값의 종류 제한: 가능하면 선택지는 정해둔다(예: priority는 high/medium/low)

  • 모름을 허용: "미확정/추가 확인 필요/null" 같은 표준 표기를 하나로 통일

이게 왜 중요하냐면, Claude는 기본적으로 '도움이 되려고' 빈칸을 채우려 하기 때문입니다. 그래서 스키마는 Claude를 답답하게 만드는 도구가 아니라, 위험을 줄이는 안전장치가 됩니다.

불확실성 처리 규칙: "모르면 모른다"를 시스템으로 만들기

불확실성 처리는 출력 제어의 마지막 퍼즐입니다. 톤과 형식이 아무리 좋아도, 사실이 틀리면 끝이니까요.

공식 가이드의 핵심 메시지는 명확합니다.

  • Claude에게 "I don't know"라고 말해도 된다고 허용하면 거짓 정보를 크게 줄일 수 있다.2

  • 긴 문서 기반 작업에서는 직접 인용(quote)으로 사실을 접지한 뒤 작업하라.2

  • 주장마다 근거를 붙여 감사 가능(auditable) 하게 만들라.2

claude.ai에서 이걸 실전 규칙으로 바꾸면 아래처럼 됩니다.

불확실성 규칙 기본 세트

<uncertainty_rules>
- 입력에 근거가 없으면 추측하지 말고 '추가 확인 필요'로 표시
- 사실 주장(숫자/날짜/규정/원인)은 반드시 근거 문장을 짧게 인용
- 외부 지식 사용 금지. 제공된 입력만 사용
- 필요한 정보가 부족하면, 마지막에 확인 질문 1~3개 제시
</uncertainty_rules>

여기서 "외부 지식 금지"는 특히 중요합니다. 문서/파일을 업로드한 상황에서 Claude가 일반 지식으로 빈칸을 채우기 시작하면, 그 순간부터 결과는 '그럴듯한 혼합물'이 됩니다.

근거 먼저, 결론은 나중(quote-first)

문서 요약/감사/정책 검토 같은 작업이라면, 아예 이렇게 요청하세요.

<task>
1) 먼저 질문에 답할 수 있는 근거 문장(직접 인용) 3개를 찾아라.
2) 근거가 충분하면 결론을 써라.
3) 근거가 부족하면 '문서에 없음'이라고 말하라.
</task>

이 패턴은 '환각 저감' 가이드가 권하는 방식과 정면으로 맞닿아 있습니다.2

같은 질문을 '두 번 검사'하게 만들기

중요한 결과물은, 마지막에 검증 단계를 붙이세요.

  • 1차: 답을 작성

  • 2차: 방금 쓴 답을 근거로 다시 검사

공식 가이드도 "근거를 찾지 못하면 주장 철회" 같은 검증을 권합니다.2

claude.ai에서의 문장 예시는 이렇습니다.

<verification>
답변을 작성한 뒤, 각 문장 옆에 [근거 있음/근거 없음]을 표시해라.
근거 없음이 하나라도 있으면 그 문장은 삭제하거나 '추가 확인 필요'로 바꿔라.
</verification>

체크리스트: 결과를 '재현 가능'하게 만드는 마지막 한 줄

체크리스트는 생각보다 강력합니다. Claude는 "검사 항목"을 주면 스스로 규칙 위반을 더 잘 잡아냅니다.

아래는 어떤 업무에도 붙일 수 있는 최소 체크리스트입니다.

<final_check>
출력 전 self-check:
- [ ] 출력 형식(템플릿/표/JSON)을 100% 지켰는가?
- [ ] 분량/문장 수 규칙을 지켰는가?
- [ ] 금지어/톤 규칙을 어기지 않았는가?
- [ ] 추측한 내용이 있다면 '추가 확인 필요'로 표시했는가?
- [ ] (문서 기반 작업) 핵심 주장마다 인용 근거가 있는가?
</final_check>

여기까지 붙이면, 프롬프트가 길어 보이지만 실제로는 반대입니다. 수정 라운드가 줄어 전체 시간이 단축됩니다.

실전 프롬프트 3종 세트(바로 복사)

아래 3개는 claude.ai에서 가장 자주 쓰이는 출력 제어 상황을 겨냥했습니다.

1) "메일 톤이 흔들리는" 문제를 끝내는 프롬프트

<role>
당신은 B2B 고객 커뮤니케이션 담당자입니다.
</role>

<task>
아래 내용을 고객에게 보낼 이메일로 작성해줘.
</task>

<constraints>
- 인사/군더더기 서론 금지. 바로 본문 시작
- 본문 9문장(±1) 
- 문장 종결은 "~습니다"로 통일
- 과장/보장 표현 금지: 반드시, 무조건, 100%, 최고, 완벽
- 불확실한 일정/정책은 단정하지 말고 "확인 후 안내드리겠습니다"로 처리
</constraints>

<output_format>
Subject: ...

[본문]
</output_format>

<input>
- 목적:
- 상대:
- 전달할 핵심:
- 제안 일정 후보:
- 내가 피하고 싶은 표현:
</input>

<final_check>
- [ ] 문장 수를 지켰나?
- [ ] 금지어가 없나?
- [ ] 상대가 해야 할 행동(회신/확정)이 마지막에 명확히 있나?
</final_check>

2) "표로 달라 했는데 글로 나온다"를 막는 프롬프트

<task>
아래 텍스트를 업무용 요약 표로 바꿔줘.
</task>

<constraints>
- 출력은 마크다운 표만
- 각 셀은 1~2문장
- 모르면 '미확정'
</constraints>

<output_format>
| 항목 | 내용 |
|---|---|
| 한 줄 결론 | |
| 핵심 사실 | |
| 리스크 | |
| 의사결정 필요 | |
| 다음 액션 | |

</output_format>

<input>
[원문]
</input>

3) "추출 결과를 재사용"하기 위한 JSON 추출 프롬프트

<task>
아래 회의 메모에서 실행 항목(Action items)을 JSON으로 추출해줘.
</task>

<constraints>
- JSON만 출력(설명/코드블록 금지)
- 없는 정보는 추측 금지: null
- due_date는 YYYY-MM-DD, 불명확하면 null
</constraints>

<output_format>
{
  "meeting_title": "string|null",
  "action_items": [
    {
      "task": "string",
      "owner": "string|null",
      "due_date": "string|null",
      "status": "todo|doing|done|unknown",
      "evidence_quote": "string|null"
    }
  ],
  "open_questions": ["string"]
}
</output_format>

<input>
[회의 메모]
</input>

<uncertainty_rules>
- owner/due_date가 메모에 없으면 null
- evidence_quote는 메모에서 해당 항목을 뒷받침하는 짧은 문장(가능하면 그대로)
</uncertainty_rules>

챕터 요약: 출력은 '요청'이 아니라 '규격'으로 만든다

출력 제어가 익숙해지면, Claude는 단순한 대화 상대가 아니라 규격화된 생산 라인이 됩니다.

  • 길이는 "짧게"가 아니라 문장 수/섹션 수/항목 수로 고정하고,

  • 톤은 "전문적으로"가 아니라 금지어/문장 패턴/샘플로 고정하고,

  • 형식은 "표로"가 아니라 템플릿 자체를 붙여서 고정하고,

  • 불확실성은 "잘 알아서"가 아니라 모름 규칙/근거 인용/질문으로 고정하고,

  • 마지막으로 체크리스트로 스스로 검사하게 만들면 됩니다.

이렇게 하면 "운 좋은 날만 잘 나오는 프롬프트"가 아니라, 누구나 반복해서 쓰는 업무 도구가 됩니다.

참고

1Increase output consistency - Claude API Docs

2Reduce hallucinations - Claude API Docs

3Prompting best practices - Claude API Docs

4Structured outputs - Claude API Docs

책 목록

클로드(Claude) 완전 정복: claude.ai부터 Desktop·Cowork 자동화, MCP 연동, 보안 운영까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기