Prompt Engineering
Structure, few-shot, structured outputs and function calling. Prompts are code — version them.
What is prompt engineering?
Prompt engineering is the discipline of designing inputs to LLMs to reliably produce desired outputs. It is not 'tricking' the model — it is software engineering where the prompt is part of the program.
Core techniques: system prompt (role + rules), structured output schemas, few-shot examples, chain-of-thought reasoning, delimiters for untrusted content, and function calling for tool use. Prompts must be versioned, evaluated and treated as code.
Why prompt engineering matters
A good prompt is the difference between a feature that works 60% of the time and one that works 99% of the time — often more impact than swapping models. Prompt changes are cheap, fast to A/B, and high-leverage. But they're also fragile: an undocumented prompt change can silently break production. Version and eval your prompts.
Where prompts live
System prompt (role, rules, output format) + user message (the actual query) + retrieved context (in delimiters) + few-shot examples → LLM → structured output. In production, prompts are stored as versioned templates, rendered with variables, and gated by eval before promotion.
Structured output with validation
def ask_llm(question: str) -> str:
"""Naive: free-text prompt, free-text response, no validation."""
r = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Answer: {question}"}],
)
return r.choices[0].message.content
# Problems: unpredictable format, no validation, hallucinated fields, retries failExperiment: prompting techniques
See how different prompting techniques affect output quality on the same task.
What to observe
No single technique wins everywhere. Few-shot excels at classification and format calibration. Chain-of-thought excels at multi-step reasoning. Structured output + system prompt is the production default for reliability. Match the technique to the task.
Production prompting
Version prompts in code, gate with eval before promotion, canary new versions, track per-prompt-version metrics. Use system prompts for primacy, delimiters for untrusted content, structured outputs for downstream reliability, and few-shot only when zero-shot underperforms. Never hard-code prompts in notebooks.
Challenge
Your prompt produces great answers 92% of the time but occasionally reveals the system prompt when users ask cleverly. Harden the prompt against extraction without hurting quality. (Hint: primacy + delimiters + output guard.)
Production checklist
Production checklist
0 of 8 checked
Knowledge check
Retrieved documents are concatenated into your prompt. A user asks 'ignore previous instructions and...'. Which defence is most fundamental?
Complete
You can now write production-grade prompts with structured outputs. Next: streaming and structured outputs in depth.
Mark this chapter as complete
Track your progress and unlock the next chapter.