Meta-Prompting: Using LLMs to Generate and Optimize Their Own Prompts
By Sagar Shankaran, Founder of CallSphere
Explore meta-prompting techniques where LLMs generate, evaluate, and iteratively refine their own prompts, creating self-improving prompt optimization loops.
Key takeaways
Why Write Prompts Manually When the Model Can Help
Prompt engineering is often a trial-and-error process. You write a prompt, test it against examples, tweak the wording, test again, and repeat until the results look acceptable. This manual iteration is slow and does not scale — especially when you need prompts for dozens of different tasks.
Meta-prompting flips this approach. Instead of hand-crafting prompts, you use the LLM itself to generate candidate prompts, evaluate their performance against a test set, and iteratively refine the best performers. The model becomes both the author and the executor of its own instructions.
This is not a theoretical idea. Google DeepMind's OPRO (Optimization by PROmpting) and DSPy's prompt optimizers both demonstrate that LLM-generated prompts frequently outperform human-written ones on standardized benchmarks.
The Meta-Prompting Loop
A meta-prompting system has four stages:
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
flowchart TD
SPEC(["Task spec"])
SYSTEM["System prompt<br/>role plus rules"]
SHOTS["Few shot examples<br/>3 to 5"]
VARS["Variable injection<br/>Jinja or f-string"]
COT["Chain of thought<br/>or scratchpad"]
CONSTR["Output constraint<br/>JSON schema"]
LLM["LLM call"]
EVAL["Offline eval<br/>LLM as judge plus regex"]
GATE{"Score over<br/>threshold?"}
COMMIT(["Promote to prod<br/>version pinned"])
REVISE(["Revise prompt"])
SPEC --> SYSTEM --> SHOTS --> VARS --> COT --> CONSTR --> LLM --> EVAL --> GATE
GATE -->|Yes| COMMIT
GATE -->|No| REVISE --> SYSTEM
style LLM fill:#4f46e5,stroke:#4338ca,color:#fff
style EVAL fill:#f59e0b,stroke:#d97706,color:#1f2937
style COMMIT fill:#059669,stroke:#047857,color:#fff
- Seed — provide an initial task description and a few examples
- Generate — ask the LLM to produce candidate prompts for the task
- Evaluate — run each candidate against a validation set and score it
- Refine — feed the scores back to the LLM and ask it to improve the best candidates
import openai
import json
client = openai.OpenAI()
def generate_candidate_prompts(
task_description: str,
examples: list[dict],
n_candidates: int = 5,
) -> list[str]:
"""Ask the LLM to generate candidate system prompts."""
examples_text = "\n".join(
f"Input: {e['input']}\nExpected: {e['expected']}"
for e in examples[:3]
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": (
"You are a prompt engineering expert. Generate candidate "
"system prompts that would make an LLM perform well on the "
"described task. Return a JSON object with key 'prompts' "
"containing an array of strings."
)},
{"role": "user", "content": (
f"Task: {task_description}\n\n"
f"Example inputs and expected outputs:\n{examples_text}\n\n"
f"Generate {n_candidates} diverse system prompts for this task."
)},
],
response_format={"type": "json_object"},
)
data = json.loads(response.choices[0].message.content)
return data.get("prompts", [])
Evaluation Against a Validation Set
Each candidate prompt needs to be scored objectively. You run it against held-out examples and measure how well the outputs match expectations:
def evaluate_prompt(
system_prompt: str,
validation_set: list[dict],
model: str = "gpt-4o-mini",
) -> float:
"""Score a system prompt against validation examples."""
correct = 0
for example in validation_set:
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": example["input"]},
],
temperature=0,
)
output = response.choices[0].message.content.strip()
if example["expected"].lower() in output.lower():
correct += 1
return correct / len(validation_set)
The Refinement Step
The key innovation is feeding performance data back to the LLM and asking it to improve:
def refine_prompts(
task_description: str,
scored_prompts: list[tuple[str, float]],
n_refined: int = 3,
) -> list[str]:
"""Use performance data to generate improved prompts."""
prompt_scores = "\n\n".join(
f"Prompt: {p}\nScore: {s:.2f}" for p, s in scored_prompts
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": (
"You are a prompt optimization expert. Analyze which prompts "
"performed well and why, then generate improved versions. "
"Return JSON with key 'prompts' as an array of strings."
)},
{"role": "user", "content": (
f"Task: {task_description}\n\n"
f"Previous prompts and scores:\n{prompt_scores}\n\n"
f"Generate {n_refined} improved prompts that address the "
"weaknesses of low-scoring candidates while keeping the "
"strengths of high-scoring ones."
)},
],
response_format={"type": "json_object"},
)
data = json.loads(response.choices[0].message.content)
return data.get("prompts", [])
def meta_prompt_optimize(
task_description: str,
examples: list[dict],
validation_set: list[dict],
iterations: int = 3,
) -> tuple[str, float]:
"""Full meta-prompting optimization loop."""
candidates = generate_candidate_prompts(task_description, examples)
best_prompt = ""
best_score = 0.0
for i in range(iterations):
scored = []
for prompt in candidates:
score = evaluate_prompt(prompt, validation_set)
scored.append((prompt, score))
if score > best_score:
best_score = score
best_prompt = prompt
scored.sort(key=lambda x: x[1], reverse=True)
print(f"Iteration {i+1}: best score = {scored[0][1]:.2f}")
if scored[0][1] >= 0.95:
break
candidates = refine_prompts(task_description, scored)
return best_prompt, best_score
Automated Prompt Tuning in Practice
In production, meta-prompting works best when you have a clear evaluation metric — accuracy for classification, BLEU or semantic similarity for generation, or structured output correctness for extraction tasks. Without a measurable signal, the refinement loop has nothing to optimize against.
A practical pattern is to run meta-prompt optimization offline during development, then deploy the winning prompt as a static system prompt in production. This gives you the quality benefits of automated optimization without the latency cost of running the optimization loop at inference time.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
FAQ
Does meta-prompting always beat human-written prompts?
Not always, but it consistently matches or exceeds human performance on well-defined tasks with clear evaluation metrics. The advantage grows with task complexity. For simple tasks like sentiment classification, a well-crafted human prompt is hard to beat. For nuanced extraction or multi-step reasoning tasks, meta-prompting often finds phrasings and structures that humans would not think to try.
How much does a meta-prompting optimization run cost?
A typical run with 5 candidates, 20 validation examples, and 3 iterations makes roughly 300 to 400 API calls. Using gpt-4o-mini for evaluation keeps costs under a few dollars. The investment pays off when the optimized prompt will be used thousands of times in production.
Can I use meta-prompting to optimize few-shot examples too?
Yes. You can extend the framework to have the LLM select which few-shot examples to include, what order to place them in, and how to format them. DSPy's bootstrap optimizer does exactly this — it automatically selects demonstrations from a training set that maximize validation performance.
#PromptEngineering #MetaPrompting #Optimization #LLM #Python #AgenticAI #LearnAI #AIEngineering

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
Try CallSphere AI Voice Agents
See how AI voice agents work for your industry. Live demo available -- no signup required.