AI Prompt Engineering · Lezione

Prompt che generano prompt

Generatori di prompt di sistema, generatori di persona e factory di prompt per attività specifiche

Lezione 2 di 413 passaggi

Prompt che generano prompt è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Fabbriche di prompt

Una fabbrica di prompt è un meta-prompt che genera più varianti di prompt per una determinata attività. Invece di scrivere un singolo prompt, si specificano l'attività e i vincoli, dopodiché la fabbrica produce un insieme di candidati da testare e selezionare.

Generazione di varianti del prompt di sistema

Chiedete al modello di generare N varianti diverse del prompt di sistema per lo stesso ruolo, ciascuna con un tono o uno stile comunicativo diverso. Questo è il punto di partenza per il test A/B dei prompt di sistema.

import anthropic

client = anthropic.Anthropic(api_key='YOUR_API_KEY')

VARIANT_FACTORY_PROMPT = '''Generate {num_variants} different system prompt variants
for a coding assistant targeting junior developers.

Each variant should have a distinctly different approach:
- Variant 1: Friendly and encouraging mentor style
- Variant 2: Concise and technical style
- Variant 3: Socratic method (asks guiding questions instead of giving answers)
- Variant 4: Game-based, uses analogies and rewards
- Variant 5: Strict teacher who corrects mistakes firmly but fairly

For each variant output:
{{"id": 1, "style": "<style name>", "prompt": "<full system prompt>"}}

Return as a JSON array.'''

def generate_prompt_variants(num_variants=5):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=3000,
        messages=[{'role': 'user', 'content':
            VARIANT_FACTORY_PROMPT.format(num_variants=num_variants)}]
    )
    return json.loads(response.content[0].text)

variants = generate_prompt_variants(5)
for v in variants[:2]:
    print(f'Variant {v["id"]} ({v["style"]}): {v["prompt"][:80]}...')

Generatore di template di prompt specifici per attività

Un generatore di template di prompt produce template parametrizzati per tipi specifici di attività. L'output è un template riutilizzabile, non un prompt usa e getta.

TEMPLATE_FACTORY_PROMPT = '''Create a production-ready prompt template for the following task.

Task type: {task_type}
Domain: {domain}
Target audience: {audience}

Requirements for the template:
1. Use {{variable}} placeholders for all input values
2. Include role/persona definition
3. Specify exact output format
4. Add quality constraints
5. Include a worked example using {{example_input}} placeholder

Also output:
- variables: list of all {variable} placeholders and their descriptions
- suggested_model: which Claude/GPT model tier is appropriate
- estimated_tokens: rough estimate of output token count

Return as JSON: {{template, variables, suggested_model, estimated_tokens}}'''

def generate_task_template(task_type, domain, audience):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=1500,
        messages=[{'role': 'user', 'content':
            TEMPLATE_FACTORY_PROMPT.format(
                task_type=task_type,
                domain=domain,
                audience=audience
            )}]
    )
    return json.loads(response.content[0].text)

template = generate_task_template(
    task_type='summarization',
    domain='legal contracts',
    audience='non-lawyer business executives'
)
print('Template preview:', template['template'][:200], '...')
print('Variables:', template.get('variables', [])[:3])

Factory di prompt per le personas

Una factory di personas genera definizioni complete delle personas, inclusi prompt di sistema, dialoghi di esempio e anti-pattern (ciò che la persona non dovrebbe mai dire o fare).

PERSONA_FACTORY_PROMPT = '''Design a complete AI assistant persona for: {application}.

Output a JSON object with these keys:
- name: persona name
- tagline: one-sentence description
- system_prompt: full system prompt (150-250 words)
- communication_style: 4-5 sentences describing how this persona communicates
- example_good_response: example of an ideal response to a typical user question
- example_bad_response: example of a response that would break character or violate guidelines
- persona_rules: list of 5 behavioral rules specific to this persona
- forbidden_phrases: list of 5 phrases this persona would never use

Make the persona distinct, consistent, and aligned with the application context.'''

def generate_persona(application):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            PERSONA_FACTORY_PROMPT.format(application=application)}]
    )
    return json.loads(response.content[0].text)

persona = generate_persona('a mental wellness check-in app for university students')
print('Persona:', persona['name'])
print('Tagline:', persona['tagline'])
print('System prompt preview:', persona['system_prompt'][:150], '...')

Generatore di casi di test

Il meta-prompting può generare casi di test diversificati per valutare la qualità dei prompt. Una factory di casi di test produce input utente che coprono l'uso tipico, i casi limite e gli input avversari.

TEST_CASE_FACTORY = '''Generate {num_cases} test cases for evaluating an AI assistant.

Assistant description: {assistant_description}

For each test case provide:
- id: number
- category: one of [typical, edge_case, adversarial, off_topic, ambiguous]
- user_message: the input message
- expected_behavior: what a good response should do (not the response itself)
- failure_modes: what wrong responses might look like

Distribution: 5 typical, 3 edge cases, 2 adversarial, 2 off-topic, 3 ambiguous.
Return as JSON array.'''

def generate_test_cases(assistant_description, num_cases=15):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=3000,
        messages=[{'role': 'user', 'content':
            TEST_CASE_FACTORY.format(
                num_cases=num_cases,
                assistant_description=assistant_description
            )}]
    )
    return json.loads(response.content[0].text)

test_cases = generate_test_cases(
    'A Python coding tutor for beginners that explains errors in simple language'
)
for tc in test_cases[:3]:
    print(f'[{tc["category"]}] {tc["user_message"][:60]}...')

Generatore di esempi few-shot

Scrivere manualmente esempi few-shot richiede molto tempo. Una factory di esempi few-shot li genera a partire dalla descrizione di un'attività e da un esempio iniziale facoltativo.

FEW_SHOT_FACTORY = '''Generate {num_examples} high-quality few-shot examples for:
Task: {task_description}

Each example must:
- Be realistic and representative of the actual task
- Show the exact input-output format
- Cover different sub-types or difficulty levels
- Be labeled: [Easy], [Medium], or [Hard]

Format exactly as:
---EXAMPLE {n}---
Input: <input>
Output: <output>
[Difficulty: Easy/Medium/Hard]

Make examples progressively more complex from first to last.'''

def generate_few_shot_examples(task_description, num_examples=5):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            FEW_SHOT_FACTORY.format(
                task_description=task_description,
                num_examples=num_examples
            )}]
    )
    return response.content[0].text

examples = generate_few_shot_examples(
    'Classify customer emails into: Complaint, Question, Praise, Refund Request'
)
print(examples[:500], '...')

Generatore di prompt chain-of-thought

La generazione di prompt chain-of-thought (CoT) richiede che la factory produca sia la struttura del ragionamento sia esempi di catene di ragionamento. Si tratta di un meta-prompt più complesso, che produce un prompt CoT completamente strutturato.

COT_PROMPT_FACTORY = '''Design a chain-of-thought prompt for solving: {problem_type}

The prompt must:
1. Define the step-by-step reasoning process specific to this problem type
2. Include a worked example showing the full reasoning chain
3. Use "Think step by step" or equivalent CoT trigger phrase
4. End with a clear output specification

Output format:
{
  "cot_trigger": "the trigger phrase",
  "reasoning_steps": ["step 1 description", "step 2 description", ...],
  "worked_example": {
    "problem": "...",
    "reasoning": "Step 1: ... Step 2: ... etc.",
    "answer": "..."
  },
  "full_prompt_template": "the complete template with {problem} placeholder"
}'''

def generate_cot_prompt(problem_type):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=1500,
        messages=[{'role': 'user', 'content':
            COT_PROMPT_FACTORY.format(problem_type=problem_type)}]
    )
    return json.loads(response.content[0].text)

cot = generate_cot_prompt('debugging Python runtime errors')
print('CoT steps:', cot['reasoning_steps'][:3])
print('Trigger:', cot['cot_trigger'])

Selezione e valutazione delle varianti di prompt

Dopo aver generato più varianti di prompt, usate un meta-prompt di valutazione per classificarle in base alla qualità prima di testarle. In questo modo preselezionate le candidate e riducete il numero di chiamate API effettive necessarie.

SCORING_PROMPT = '''You are evaluating prompt variants for quality.
Rate each variant on these criteria (1-5):

1. Clarity: Is the task and output format clearly defined?
2. Completeness: Are all necessary instructions present?
3. Constraints: Are appropriate constraints and guardrails in place?
4. Conciseness: Is there unnecessary length that dilutes the prompt?
5. Robustness: Would this handle edge cases and adversarial inputs?

For each variant output:
{"id": <id>, "scores": {clarity: N, completeness: N, constraints: N,
conciseness: N, robustness: N}, "total": N, "rationale": "<2 sentences>"}

Return JSON array sorted by total score descending.

Variants to evaluate:
{variants_json}'''

def rank_prompt_variants(variants):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            SCORING_PROMPT.format(
                variants_json=json.dumps(variants, indent=2)
            )}]
    )
    return json.loads(response.content[0].text)

ranked = rank_prompt_variants(variants)
print('Top variant:', ranked[0]['id'], '| Score:', ranked[0]['total'])
print('Rationale:', ranked[0]['rationale'][:100])

Divergenza dei prompt: generare la massima diversità

Quando generate varianti di prompt, la diversità è importante quanto la qualità. Usate istruzioni esplicite sulla diversità per impedire al modello di generare varianti quasi identiche.

DIVERSITY_FACTORY = '''Generate 5 MAXIMALLY DIVERSE prompt variants for:
Task: {task_description}

Diversity requirements:
- Each variant must use a DIFFERENT cognitive approach:
  1. Direct instruction approach
  2. Role-based persona approach
  3. Example-first (few-shot) approach
  4. Constraint-based (tell what NOT to do) approach
  5. Output-format-first approach (start by defining desired output)

- No two variants should share more than 20% of their wording
- Each variant should be completable without reference to the others

For each variant tag it with its approach name.
Return as JSON array: [{"approach": "...", "prompt": "..."}]'''

def generate_diverse_variants(task_description):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=3000,
        messages=[{'role': 'user', 'content':
            DIVERSITY_FACTORY.format(task_description=task_description)}]
    )
    return json.loads(response.content[0].text)

diverse = generate_diverse_variants('Answering customer questions about product returns')
for v in diverse:
    print(f'Approach: {v["approach"]} | Prompt: {v["prompt"][:60]}...')

Creazione di una pipeline per le factory di prompt

Una pipeline completa per le factory di prompt combina generazione, valutazione, controllo della diversità e output in un insieme di candidate di prompt pronte all'uso.

def prompt_factory_pipeline(task_description, num_candidates=5, top_k=3):
    print(f'[1/4] Generating {num_candidates} diverse prompt variants...')
    variants = generate_diverse_variants(task_description)

    print('[2/4] Scoring prompt quality...')
    ranked = rank_prompt_variants(variants)

    print('[3/4] Selecting top candidates...')
    top_candidates = ranked[:top_k]

    print('[4/4] Generating test cases for evaluation...')
    test_cases = generate_test_cases(task_description, num_cases=10)

    output = {
        'task': task_description,
        'candidates': top_candidates,
        'test_cases': test_cases,
        'recommendation': (
            f'Start A/B testing with top 3 candidates. '
            f'Run each against {len(test_cases)} test cases. '
            f'Promote the highest-scoring candidate to production.'
        )
    }
    print('Pipeline complete.')
    return output

# result = prompt_factory_pipeline(
#     'Summarizing customer support tickets for a priority queue'
# )
# print(result['recommendation'])

Anti-pattern nella generazione dei prompt

Le factory di prompt presentano modalità di fallimento ricorrenti. Comprendere questi anti-pattern aiuta a produrre meta-prompt migliori e candidate di prompt migliori.

PROMPT_FACTORY_ANTIPATTERNS = {
    'Generic variants': {
        'problem': 'All variants say the same thing in slightly different words',
        'cause': 'No diversity instruction in the meta-prompt',
        'fix': 'Explicitly specify different approaches or styles for each variant'
    },
    'Hallucinated instructions': {
        'problem': 'Generated prompt references APIs, rules, or facts that do not exist',
        'cause': 'Model fills gaps in its knowledge with plausible-sounding content',
        'fix': 'Review all domain-specific claims; add validation step'
    },
    'Missing edge case coverage': {
        'problem': 'Generated prompts only handle happy path, not failures',
        'cause': 'Meta-prompt did not specify adversarial/edge case requirements',
        'fix': 'Explicitly ask for edge case handling in the meta-prompt'
    },
    'Over-length inflation': {
        'problem': 'Generated prompts are verbose and repetitive',
        'cause': 'Model padds output without conciseness constraint',
        'fix': 'Add word count constraint: "between 100-200 words"'
    }
}

for pattern, info in PROMPT_FACTORY_ANTIPATTERNS.items():
    print(f'{pattern}:')
    print(f'  Fix: {info["fix"]}')

Verifica rapida

Vi servono 5 varianti di un prompt di sistema per testare A/B un assistente di programmazione. Qual è la migliore istruzione da inserire nel meta-prompt per garantire che le varianti siano realmente diverse?

Riepilogo delle factory di prompt

Le factory di prompt usano il meta-prompting per generare prompt candidati su larga scala:

  • Factory di varianti: genera N varianti diverse per i test A/B
  • Factory di template: genera template parametrizzati a partire dalle descrizioni delle attività
  • Factory di personas: genera definizioni complete delle personas, inclusi prompt di sistema ed esempi
  • Factory di casi di test: genera input di test tipici, relativi a casi limite e avversari
  • Factory few-shot: genera coppie di esempi input-output a livelli di difficoltà specificati
  • Meta-prompt di valutazione: classifica le candidate generate prima dei test effettivi
  • Requisito di diversità: specifica approcci diversi per impedire la generazione di varianti quasi identiche
Gratis per iniziare

Impara AI Prompt Engineering con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
53
Lezioni
199

Domande Frequenti

La lezione «Prompt che generano prompt» è gratuita?

Sì — il testo completo di «Prompt che generano prompt» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Prompt che generano prompt»?

Generatori di prompt di sistema, generatori di persona e factory di prompt per attività specifiche Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Prompt che generano prompt»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Che cos’è il meta-prompting?
  2. Prompt che generano prompt
  3. Sistemi di prompt auto-miglioranti
  4. Valutazione e selezione nell’auto-miglioramento
← Torna a AI Prompt Engineering