Automatic prompt optimization
with user feedback.
Turn user feedback into better prompts automatically. Refine your instructions against real-world examples, replacing manual tuning with continuous optimization.
“You are a helpful assistant.”
“You are a technical support specialist. Keep answers under 3 sentences.”
HOW IT WORKS
Turn failures into better instructions
Your users already know what's wrong. We turn their feedback into prompt improvements.
“You are a helpful assistant.”
“You are a technical support specialist. Keep answers under 3 sentences.”
FEEDBACK API
Collect user feedback
One API call per thumbs-down. Include why it failed and what the response should have been. Complaints become constraints.
- 👎 or 👍 per response
- Free-text field for the reason
- Paste the expected output
- Links to your traces automatically
import zeroeval as ze# 1. Your user didn't like a responsecompletion_id = "chatcmpl-abc123..."# 2. Submit their feedback (one API call)ze.feedback( prompt="customer-support", completion_id=completion_id, thumbs_up=False, reason="Too verbose", expected="Keep it under 2 sentences.")import zeroeval as ze# 1. Run optimization (uses your collected feedback)run = ze.optimize( prompt="customer-support", optimizer="gepa" # or "bootstrap")# 2. Get the optimized prompt in your appprompt = ze.get_prompt("customer-support")# Returns the latest version automaticallyAUTO-OPTIMIZATION
Run optimization. Get a new prompt.
We read your feedback, run DSPy, and generate a rewritten prompt. Your code pulls it at runtime. Deploy when ready.
- Stanford DSPy optimization
- Negative feedback becomes constraints
- A/B test before you deploy
- Full version history with rollback
HOW OPTIMIZATION WORKS
Users give feedback.
Prompts get better.
Each field has a job
DSPy uses each field differently during optimization.
Labels the example as positive or negative for training.
Added as a constraint in the optimized prompt.
Becomes a few-shot example for the model.
Constraints persist
Negative feedback reasons are extracted and prepended to every optimized prompt as non-negotiable constraints.
Two optimization strategies
Analyzes failures, rewrites instructions iteratively
Selects best examples as few-shot demos
Runtime prompt fetching
Your app calls the API to get the latest prompt version. Adopt an optimized prompt from the dashboard. No redeploy.
GET /v1/prompts/support-agent
Every optimization, versioned
Each run creates a new prompt version with its own eval score. Deploy the best one from the dashboard, or rollback in one click.
Close the loop with user feedback
Turn production signals from users into automatic and measurable prompt improvements.