Promptteknik til AI · Lektion

Mønstre for selvkritik og revision

Prompting af modeller til at evaluere og omskrive deres eget output ud fra en konstitution.

Lektion 2 af 413 trin

Mønstre for selvkritik og revision er en gratis Promptteknik til AI-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Promptteknik til AI, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Promptteknik til AI-kurset indeholder 4 lektioner i alt.

Selvkritik som promptteknik

Selv uden en formel CAI-træningsproces kan du bede enhver kompetent LLM om at gennemgå og forbedre sine egne resultater. Dette mønster med selvkritik forbedrer kvaliteten markant i opgaver, hvor nøjagtighed, fuldstændighed eller sikkerhed er vigtig.

Den centrale indsigt er, at modeller har mere viden, end de viser i første gennemløb. En kritikprompt får denne viden frem.

Grundlæggende mønster for nøjagtighedskritik

Den enkleste form for selvkritik er at bede modellen gennemgå sit svar for faktuel korrekthed og rette eventuelle fejl.

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])

Mønster for fuldstændighedstjek

Ved en fuldstændighedskritik skal modellen kontrollere, at dens svar besvarer alle dele af spørgsmålet fuldt ud. Det er især nyttigt til spørgsmål i flere dele, hvor svar i første gennemløb ofte overser underspørgsmål.

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

Mønster for kritik af skade og sikkerhed

En kritik af potentielle skader beder modellen gennemgå sit svar for mulige negative konsekvenser, før det vises til brugerne. Dette er kernen i at anvende CAI-principper i produktion.

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

Kritik ud fra flere kriterier

For resultater med stor betydning kan du gennemgå dem ud fra flere kriterier i én enkelt gennemgang ved at angive kriterierne udtrykkeligt. Det er mere effektivt end separate kritik-kald for hvert kriterium.

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

Bedste praksis for revisionsprocessen

Revisionsprompten bør gøre tre ting:

  1. Minde modellen om den oprindelige anmodning (konteksten)
  2. Præsentere resultaterne af gennemgangen
  3. Bede om et revideret svar, der imødekommer problemerne

Bed ikke modellen om at forklare kritikken igen under revisionen — bed den bare rette det. En handlingsorienteret revisionsprompt giver bedre resultater.

# 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
)

Kædning af flere revisionsrunder

Én runde med gennemgang og revision er ofte ikke nok til meget komplekse kvalitetskrav. Du kan kæde flere runder sammen, hvor hver runde anvender et andet princip eller kontrollerer resterende problemer.

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

Selvkritik til kodegenerering

Selvkritik er især effektiv til kodegenerering. Modellen skriver først kode og gennemgår den derefter for fejl, kanttilfælde og sikkerhedsproblemer — og opdager ofte fejl, som den overså første gang.

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

Selvkonsistens som alternativ

Selvkonsistens er en anden tilgang: Generér det samme svar N gange, og foretag derefter en flertalsafgørelse, eller bed modellen sammenfatte det bedste svar ud fra flere udkast.

Brug selvkonsistens til spørgsmål med tydeligt korrekte svar. Brug gennemgang og revision, når kvaliteten har flere dimensioner (nøjagtighed + tone + sikkerhed).

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?')

Når kritik skader: Risikoen ved overdreven kritik

Selvkritik er ikke altid en fordel. Hold øje med disse fejltilstande:

  • Smiskende kritik: Modellen siger, at dens svar er fremragende, selv når det er forkert
  • Overforsigtighed: Modellen fjerner nyttige oplysninger under revisionen, fordi de virker risikable
  • Hallucinerede rettelser: Revisionen introducerer nye fejl, som ikke fandtes i det oprindelige svar

Afhjælp det ved at bruge en anden model til kritikken, forankre kritikker i konkrete fakta og validere reviderede resultater mod kendte korrekte svar.

Måling af kritikkens effektivitet

Følg, om kritikken faktisk forbedrer resultaterne, ved at sammenligne de første og de reviderede svar med en guldstandard. Det viser dig, om de ekstra LLM-kald er omkostningen værd.

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

Videnstjek: Tidspunkt for selvkritik

Hvilket mønster er mest velegnet til at fange faktuelle fejl i et svar, før det vises til brugerne?

Opsamling: Mønstre for selvkritik og revision

Selvkritikprompter beder modellen om at gennemgå sit eget resultat ud fra specifikke kriterier — nøjagtighed, fuldstændighed, sikkerhed eller klarhed — og derefter udarbejde en forbedret version. Effektive mønstre omfatter kritik af nøjagtighed (gennemgå for faktuelle fejl), fuldstændighedstjek (har du besvaret alle dele?), kritik af mulig skade (kan dette muliggøre skadelige handlinger?) og kodegennemgang (tjek for fejl og kanttilfælde). Kør flere runder for resultater med høj risiko. Mål den faktiske forbedring for at bekræfte, at de ekstra omkostninger er berettigede.

Gratis at komme i gang

Lær Promptteknik til AI med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
53
Lektioner
199

Ofte stillede spørgsmål

Er lektionen “Mønstre for selvkritik og revision” gratis?

Ja — alle 3 lektioner i læringssporet Promptteknik til AI, inklusive “Mønstre for selvkritik og revision”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Promptteknik til AI-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Mønstre for selvkritik og revision”?

Prompting af modeller til at evaluere og omskrive deres eget output ud fra en konstitution. Du øver dig i Promptteknik til AI med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Promptteknik til AI?

Der kræves ingen tidligere erfaring. Promptteknik til AI på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Mønstre for selvkritik og revision”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Promptteknik til AI-lektion?

Ja. Alle Promptteknik til AI-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. CAI-principper og kritikprompts
  2. Mønstre for selvkritik og revision
  3. Spændingen mellem ufarlighed og hjælpsomhed
  4. Implementering af CAI i applikationer
← Tilbage til Promptteknik til AI