Why this matters
As a Prompt Engineer, you often need reliable outputs without retraining a model. Zero-shot and few-shot prompting let you steer an LLM to classify, extract, transform, and reason—using only instructions and a handful of examples. Mastering these patterns reduces iteration time, improves consistency, and saves tokens.
- Customer support: route tickets by intent and urgency.
- Data pipelines: extract structured fields (names, dates, amounts) into JSON.
- Content operations: rewrite text to a brand voice or format, on demand.
- Analytics: summarize findings and enforce concise output shapes.
Concept explained simply
Zero-shot: You describe the task and constraints without providing examples. The model infers the pattern from your instruction.
Few-shot: You give a small set of example pairs (input → output) that demonstrate the exact style, format, and level of detail you want. The model imitates that pattern for new inputs.
When to prefer each
- Zero-shot: simple tasks, tight token budget, you have a clear label set and strict format.
- Few-shot: complex formats, nuanced tone, domain terms, or when zero-shot is too inconsistent.
Mental model
Think of the model as a pattern-completer. Your prompt defines the pattern. Examples are gravity: they pull the output toward demonstrated labels, formats, and tone. The most recent examples typically influence the most. Keep labels explicit, formats rigid, and instructions unambiguous.
- Frame: Task → Rules → Format → (Examples) → New input.
- Delimit inputs with clear markers (e.g., triple dashes or XML-like tags).
- Name your labels and fields exactly once; repeat them consistently.
Reusable prompt templates
Zero-shot classification template
Task: Classify the text into one of: {LABELS}. Output only the label.
Rules:
- Use exactly one label from {LABELS}.
- No extra words.
Text:
---
{TEXT}
---
Answer:Few-shot structured extraction template
Task: Extract data into strict JSON. If a field is missing, use null.
Format (single line JSON): {"field_a":"string","field_b":"string","amount":"number or null"}
Examples:
Input: "{E1_INPUT}"
Output: {E1_JSON}
Input: "{E2_INPUT}"
Output: {E2_JSON}
Now extract from the new input:
Input: "{NEW_INPUT}"
Output:Reasoned answer (brief steps) template
Task: Solve the problem and give a concise final answer.
Rules:
- First, list up to 2 short reasoning steps.
- Then output: Final answer: <value>
Problem:
---
{PROBLEM}
---Worked examples
Example 1: Zero-shot labeler (support emails)
Task: Label the email as one of: billing, technical, cancellation, other. Output only the label. Email: --- I was charged twice this month. Please fix. --- Answer:
Why it works
Clear label set, single-output instruction, and delimiters reduce ambiguity.
Example 2: Few-shot JSON extractor (event details)
Task: Extract event details into JSON: {"title":"string","date":"YYYY-MM-DD","time":"HH:MM","city":"string or null"}
Examples:
Input: "Jazz Night on Feb 14 at 7pm, downtown Chicago"
Output: {"title":"Jazz Night","date":"2024-02-14","time":"19:00","city":"Chicago"}
Input: "Workshop: Prompting 101, 2024-03-02 09:30 (online)"
Output: {"title":"Prompting 101","date":"2024-03-02","time":"09:30","city":null}
Now extract:
Input: "Meetup – Data Friday, March 8 at 6:15pm, Seattle"
Output:Why it works
Two examples teach formatting (24-hour time, null city when online) and field naming.
Example 3: Few-shot style transfer (brand tone)
Task: Rewrite in the brand voice: friendly, concise, action-oriented. Max 2 sentences. Examples: Original: "Our application has undergone maintenance." Rewrite: "We just finished maintenance—thanks for your patience!" Original: "Your request will be processed within 3 business days." Rewrite: "We’re on it—expect an update within 3 business days." Now rewrite: Original: "The report has been generated successfully." Rewrite:
Why it works
Shots demonstrate tone and brevity, so the new rewrite matches both.
Choosing zero vs. few-shot
Token and evaluation tips
- Keep examples short. Trim fluff and keep just the essential pattern.
- Order matters: put the most relevant, recent example closest to the new input.
- Lock output shape: state the exact schema and “Output only the JSON. No extra text.”
- Test variation: try 3–5 diverse inputs to catch edge cases.
- Measure: check accuracy, format validity, and consistency across runs.
Exercises
Do these now. They mirror the graded exercises below.
Exercise 1: Zero-shot labeler for app reviews
Goal: Classify each review as one of: bug, feature_request, praise, other. Output only the label.
Reviews: 1) "Crashes every time I open settings." 2) "Love the new dark mode!" 3) "Could you add export to CSV?"
Hints
- State the label set verbatim in the instruction.
- Demand “single label only”.
- Use clear delimiters around each review.
Show solution
Task: Classify the text into one of: bug, feature_request, praise, other. Output only the label. Text: --- Crashes every time I open settings. --- Answer: bug Text: --- Love the new dark mode! --- Answer: praise Text: --- Could you add export to CSV? --- Answer: feature_request
Exercise 2: Few-shot JSON extractor for job posts
Goal: Extract {"title":"string","company":"string","location":"string or null","salary_range":"string or null"}. If missing, use null. Output only one JSON object per input.
Examples:
Input: "Acme seeks Data Analyst in Berlin. €55–70k."
Output: {"title":"Data Analyst","company":"Acme","location":"Berlin","salary_range":"€55–70k"}
Input: "Remote Backend Engineer at Nimbus (US only)."
Output: {"title":"Backend Engineer","company":"Nimbus","location":"Remote (US only)","salary_range":null}
New input:
"Orion hiring Product Manager, London, competitive pay"Hints
- Repeat the exact JSON schema in the prompt.
- Normalize ambiguous salaries to null unless a range is present.
- Keep outputs single-line JSON.
Show solution
Task: Extract fields into JSON exactly as: {"title":"string","company":"string","location":"string or null","salary_range":"string or null"}. Output only JSON.
Examples:
Input: "Acme seeks Data Analyst in Berlin. €55–70k."
Output: {"title":"Data Analyst","company":"Acme","location":"Berlin","salary_range":"€55–70k"}
Input: "Remote Backend Engineer at Nimbus (US only)."
Output: {"title":"Backend Engineer","company":"Nimbus","location":"Remote (US only)","salary_range":null}
Now extract:
Input: "Orion hiring Product Manager, London, competitive pay"
Output: {"title":"Product Manager","company":"Orion","location":"London","salary_range":null}Checklist before you move on
- Your prompts state the exact label set or JSON schema.
- Outputs are single-label or strict JSON with no extra text.
- For missing data, you used null consistently.
Common mistakes (and fixes)
- Ambiguous label names. Fix: define labels clearly, mutually exclusive.
- Free-form outputs when a schema is needed. Fix: show the schema and say “Output only JSON”.
- Too many or too long examples. Fix: 2–4 concise shots are usually enough.
- Examples that contradict rules. Fix: ensure every example follows the stated format.
- Leaky instructions inside examples. Fix: keep examples generic; avoid sensitive data.
How to self-check your prompts
- Does the model ever produce extra prose? If yes, tighten the “Output only …” rule.
- Do labels drift? Add a counter-example or clarify boundaries.
- Are rare cases handled? Add one targeted example for the edge case.
- Is the format always valid JSON? Validate with a JSON parser and shorten examples if errors rise.
Practical projects
- Support ticket router: zero-shot classify tickets into product_areas and priority. Add few-shot examples for tricky categories.
- Invoice line-item extractor: few-shot to extract vendor, date, total, and currency into JSON. Include one example with missing currency.
- Knowledge base summarizer: few-shot to summarize articles into 3 bullets and a one-line takeaway, enforcing a strict bullet format.
Who this is for
- Aspiring prompt engineers and analysts working with LLMs.
- Developers adding LLM features to apps.
- Content and ops teams needing repeatable transformations.
Prerequisites
- Basic familiarity with LLM prompts and token limits.
- Comfort reading and writing simple JSON.
Learning path
- Start with zero-shot classification and simple extraction.
- Add 2–3 examples to fix inconsistencies (few-shot).
- Enforce strict output formats (schemas, label sets).
- Test on diverse inputs and refine with minimal examples.
Next steps
- Introduce anti-examples for common pitfalls (what not to do).
- Experiment with ordering of examples to see impact on outputs.
- Build a small library of reusable templates for your domain.
Mini challenge
Create a 2-shot prompt that converts informal meeting notes into a JSON agenda: {"title":"","date":"YYYY-MM-DD","actions":["..."]}. Include one example with no actions (empty array). Test on a new note.
Show a sample solution
Task: Convert notes to JSON agenda: {"title":"string","date":"YYYY-MM-DD","actions":["string"]}. If no actions, use an empty array. Output only JSON.
Examples:
Notes: "Team sync 2024-05-02: review Q1, assign Alice to draft report"
Output: {"title":"Team sync","date":"2024-05-02","actions":["Review Q1","Assign Alice to draft report"]}
Notes: "Budget chat 2024-06-10: discussed approach, no assignments"
Output: {"title":"Budget chat","date":"2024-06-10","actions":[]}
Now convert:
Notes: "Project Orion 2024-07-03: finalize scope; Ben to contact vendor"Quick test
When you’re ready, take the quick test below. Available to everyone; only logged-in users get saved progress.