0Pricing
AI Prompt Engineering · 강의

자기 비평 및 수정 패턴

모델이 헌법에 따라 자체 출력을 평가하고 다시 작성하도록 프롬프트를 구성합니다.

자기 비평 및 수정 패턴은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

프롬프트 기법으로서의 자체 검토

형식적인 CAI 학습 과정이 없어도, 유능한 LLM에 자신의 출력을 검토하고 개선하도록 프롬프트를 작성할 수 있습니다. 이러한 자체 검토 패턴은 정확성, 완전성 또는 안전성이 중요한 작업의 품질을 크게 향상합니다.

핵심 통찰은 다음과 같습니다. 모델은 첫 번째 시도에서 보여 주는 것보다 더 많은 지식을 갖고 있습니다. 검토 프롬프트는 그 지식을 드러냅니다.

기본 정확성 검토 패턴

가장 간단한 자체 검토 방법은 모델에 자신의 응답에서 사실이 정확한지 검토하고 오류를 수정하도록 요청하는 것입니다.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def generate_and_self_critique(question):
    # Step 1: Generate
    r1 = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': question}]
    )
    initial = r1.content[0].text

    # Step 2: Accuracy critique
    critique_prompt = (
        f'Question: {question}\n\n'
        f'Your previous answer: {initial}\n\n'
        'Review your previous answer for factual accuracy. '
        'Identify any errors, unsupported claims, or missing important nuances. '
        'Then provide a corrected, improved answer.'
    )
    r2 = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': critique_prompt}]
    )
    return r2.content[0].text

result = generate_and_self_critique('What caused the fall of the Roman Empire?')
print(result[:300])

완전성 확인 패턴

완전성 검토는 모델에 응답이 질문의 모든 부분에 완전히 답했는지 확인하도록 요청합니다. 첫 번째 시도의 응답에서 하위 질문을 자주 빠뜨리는 여러 부분으로 구성된 질문에 특히 유용합니다.

COMPLETENESS_CRITIQUE = (
    'Original question: {question}\n\n'
    'Your previous answer: {answer}\n\n'
    'Check if your answer fully addresses the question:\n'
    '1. List each part or sub-question in the original question.\n'
    '2. For each part, indicate whether your answer addressed it.\n'
    '3. If any parts were missed or incomplete, provide a revised answer '
    'that covers everything.'
)

def check_completeness(question, initial_answer, client):
    prompt = COMPLETENESS_CRITIQUE.format(
        question=question,
        answer=initial_answer
    )
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=600,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.content[0].text

유해성 및 안전성 검토 패턴

유해성 검토는 모델에 사용자가 보기 전에 응답이 초래할 수 있는 부정적인 결과를 검토하도록 요청합니다. 이는 실제 운영에서 CAI 원칙을 적용하는 핵심입니다.

HARM_CRITIQUE_PROMPT = (
    'Review the following assistant response for potential harms:\n\n'
    'User message: {user_message}\n'
    'Assistant response: {response}\n\n'
    'Consider:\n'
    '- Could this response enable harmful actions?\n'
    '- Could it be misused by someone with bad intentions?\n'
    '- Does it respect the privacy and dignity of individuals?\n'
    '- Could it cause psychological harm to vulnerable users?\n\n'
    'If the response has issues, explain them and provide a revised '
    'version that addresses the concerns while still being helpful. '
    'If the response is fine, say "Response is appropriate" and quote it back.'
)

def safety_check(user_message, response, client):
    prompt = HARM_CRITIQUE_PROMPT.format(
        user_message=user_message,
        response=response
    )
    result = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=600,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return result.content[0].text

다중 기준 검토

중요도가 높은 출력은 기준을 명시적으로 나열하여 한 번에 여러 기준에 따라 검토하십시오. 기준마다 별도의 검토 호출을 하는 것보다 효율적입니다.

MULTI_CRITERIA_CRITIQUE = (
    'Evaluate this response on three criteria:\n\n'
    'Question: {question}\n'
    'Response: {response}\n\n'
    'Criteria:\n'
    '1. ACCURACY: Are all facts correct and claims well-supported?\n'
    '2. COMPLETENESS: Does it fully address the question?\n'
    '3. CLARITY: Is it easy to understand for the target audience?\n\n'
    'For each criterion, rate it Good/Fair/Poor and explain why.\n'
    'Then provide an improved response that scores Good on all three.'
)

def multi_criteria_check(question, response, client):
    prompt = MULTI_CRITERIA_CRITIQUE.format(
        question=question,
        response=response
    )
    result = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=800,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return result.content[0].text

수정 단계: 모범 사례

수정 프롬프트는 다음 세 가지를 수행해야 합니다.

  1. 모델에 원래 요청을 상기시킵니다(문맥).
  2. 검토 결과를 제시합니다.
  3. 문제를 해결하는 수정된 응답을 요청합니다.

수정 과정에서 모델에 검토 내용을 다시 설명하라고 요청하지 마십시오. 바로 수정하도록 하십시오. 수정 프롬프트를 실행 중심으로 유지하면 더 나은 결과를 얻을 수 있습니다.

# Good revision prompt: action-oriented
GOOD_REVISION = (
    'Given this critique of your response, please write an improved version.\n\n'
    'Original question: {question}\n'
    'Critique: {critique}\n\n'
    'Write only the improved response — no preamble, no meta-commentary:'
)

# Bad revision prompt: too passive
BAD_REVISION = (
    'Here is a critique of your response. Can you maybe consider '
    'revising it somewhat based on the feedback below?\n'
    'Critique: {critique}'
    # Missing original question context!
    # Wishy-washy language reduces revision quality
)

여러 차례의 수정 과정 연결

매우 복잡한 품질 요구 사항에는 한 차례의 검토-수정만으로 충분하지 않은 경우가 많습니다. 서로 다른 원칙을 적용하거나 남은 문제를 확인하면서 여러 차례의 과정을 연결할 수 있습니다.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def multi_round_revision(question, n_rounds=2):
    # Round 0: Initial generation
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': question}]
    ).content[0].text

    principles = [
        'factual accuracy and avoiding unsupported claims',
        'completeness — ensuring all parts of the question are answered',
    ]

    for i, principle in enumerate(principles[:n_rounds]):
        critique_prompt = (
            f'Question: {question}\n'
            f'Current response: {response}\n\n'
            f'Critique for {principle} and provide an improved version:'
        )
        response = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=512,
            messages=[{'role': 'user', 'content': critique_prompt}]
        ).content[0].text
        print(f'Round {i+1} complete')

    return response

코드 생성을 위한 자체 검토

자체 검토는 특히 코드 생성에 효과적입니다. 모델이 먼저 코드를 작성한 다음 버그, 경계 사례, 보안 문제를 검토하면 처음에는 발견하지 못한 오류를 찾아내는 경우가 많습니다.

CODE_CRITIQUE_PROMPT = (
    'Review this Python code for correctness and security issues:\n\n'
    'Task: {task}\n\n'
    'Code:\n'
    ''''python\n'
    '{code}\n'
    ''''\n\n'
    'Check for:\n'
    '1. Logic errors or off-by-one mistakes\n'
    '2. Unhandled edge cases (empty input, None, division by zero)\n'
    '3. Security issues (SQL injection, path traversal, etc.)\n\n'
    'If issues exist, list them and provide a corrected version. '
    'If the code is correct, say so and explain why it handles edge cases properly.'
)

def critique_code(task, code, client):
    prompt = CODE_CRITIQUE_PROMPT.format(task=task, code=code)
    result = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=800,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return result.content[0].text

대안으로서의 자기 일관성

자기 일관성은 다른 접근 방식입니다. 동일한 응답을 N번 생성한 다음 다수결을 따르거나, 모델에 여러 초안에서 가장 좋은 답변을 종합하도록 요청합니다.

정답이 명확한 질문에는 자기 일관성을 사용하십시오. 품질이 여러 차원으로 구성된 경우(정확성 + 어조 + 안전성)에는 검토-수정을 사용하십시오.

import anthropic
from collections import Counter

client = anthropic.Anthropic(api_key='sk-ant-...')

def self_consistency(question, n=5):
    """Generate N responses and pick the most common answer."""
    responses = []
    for _ in range(n):
        r = client.messages.create(
            model='claude-haiku-4-5',
            max_tokens=100,
            temperature=0.7,
            messages=[{'role': 'user', 'content': question}]
        )
        responses.append(r.content[0].text.strip())

    # Pick most common answer
    vote = Counter(responses)
    winner, count = vote.most_common(1)[0]
    print(f'Consensus ({count}/{n}): {winner}')
    return winner

result = self_consistency('What is the sum of angles in a triangle?')

검토가 해가 되는 경우: 과도한 검토의 위험

자체 검토가 항상 유익한 것은 아닙니다. 다음과 같은 실패 유형을 주의하십시오.

  • 아첨하는 검토: 모델이 자신의 답변이 틀렸는데도 훌륭하다고 말합니다.
  • 지나친 주의: 모델이 위험해 보인다는 이유로 수정 중에 유용한 정보를 삭제합니다.
  • 환각으로 생긴 수정: 수정 과정에서 원래 없던 새로운 오류가 발생합니다.

다음 방법으로 완화하십시오. 검토에는 다른 모델을 사용하고, 검토를 구체적인 사실에 근거하게 하며, 수정된 출력을 검증된 정답과 비교하여 확인하십시오.

검토 효과 측정

초기 응답과 수정된 응답을 기준 정답과 비교하여 검토가 실제로 출력을 개선하는지 추적하십시오. 이를 통해 추가 LLM 호출에 드는 비용이 그만한 가치가 있는지 알 수 있습니다.

def measure_critique_lift(examples, generate_fn, critique_fn, metric_fn):
    """
    Measure how much critique improves accuracy over initial generation.
    """
    initial_scores = []
    revised_scores = []

    for ex in examples:
        initial = generate_fn(ex.question)
        revised = critique_fn(ex.question, initial)

        initial_scores.append(metric_fn(ex.answer, initial))
        revised_scores.append(metric_fn(ex.answer, revised))

    avg_initial = sum(initial_scores) / len(initial_scores)
    avg_revised = sum(revised_scores) / len(revised_scores)

    print(f'Initial: {avg_initial:.1%}')
    print(f'Revised: {avg_revised:.1%}')
    print(f'Lift:   +{avg_revised - avg_initial:.1%}')
    return avg_revised - avg_initial

지식 확인: 자체 검토 시점

사용자에게 보여 주기 전에 응답의 사실 오류를 포착하는 데 가장 적합한 패턴은 무엇입니까?

복습: 자체 비평 및 수정 패턴

자체 비평 프롬프트는 모델에게 정확성, 완전성, 안전성 또는 명확성과 같은 구체적인 기준에 따라 자신의 출력을 검토한 다음 개선된 수정본을 생성하도록 요청합니다. 효과적인 패턴으로는 정확성 비평(사실 오류 검토), 완전성 점검(모든 부분을 다뤘는가?), 유해성 비평(유해한 행동을 가능하게 할 수 있는가?), 코드 검토(버그와 예외 상황 확인)가 있습니다. 중요도가 높은 출력에는 여러 라운드를 연결하십시오. 추가 비용이 정당한지 확인하려면 실제 개선 폭을 측정하십시오.

자주 묻는 질문

“자기 비평 및 수정 패턴” 강의는 무료인가요?

네 — “자기 비평 및 수정 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“자기 비평 및 수정 패턴”에서 뭘 배우나요?

모델이 헌법에 따라 자체 출력을 평가하고 다시 작성하도록 프롬프트를 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“자기 비평 및 수정 패턴” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. CAI 원칙과 비평 프롬프트
  2. 자기 비평 및 수정 패턴
  3. 무해성과 유용성의 긴장
  4. 애플리케이션에 CAI 구현하기
← AI Prompt Engineering(으)로 돌아가기