Prompt
How do I set up a prompt testing tool for comparing prompts and policies across agent workflows?
Latest observation
A good prompt testing setup for comparing prompts and policies across agent workflows usually has 5 parts:
- A test case format
- A way to run prompts/policies through workflows
- A scorer or evaluator
- A comparison dashboard/report
- Versioning and regression checks
Here’s a practical way to set it up.
1) Define what you’re comparing
For agent workflows, you’re often comparing more than just prompt text:
- System prompt variants
- Tool-use policies
- Routing rules
- Memory policies
- Safety/refusal policies
- Multi-agent coordination instructions
Create a standard abstraction like:
experiment_name: customer_support_agent
variants:
- name: baseline
system_prompt: prompts/baseline.txt
policy: policies/baseline.yaml
- name: concise
system_prompt: prompts/concise.txt
policy: policies/baseline.yaml
- name: strict_safety
system_prompt: prompts/baseline.txt
policy: policies/strict_safety.yaml
This lets you compare prompt + policy combinations consistently.
2) Build a reusable test case suite
Each test should include:
- input
- expected behavior
- constraints
- optional gold answer
- workflow context
- expected tool calls, if applicable
Example:
id: refund_policy_edge_case
input: "Customer requests refund after 45 days."
context:
customer_type: premium
expected:
should_refuse: true
should_offer_alternative: true
tone: "polite"
tool_calls:
- name: policy_lookup
For agent workflows, add fields like:
allowed_toolsexpected_routemust_not_domax_stepslatency_budget
3) Run the same test across variants
Use an evaluation harness that:
- loads each variant
- injects the same test input
- captures:
- final response
- intermediate reasoning artifacts if available
- tool calls
- latency
- token usage
- errors
If you’re using Python, a simple runner can loop over (test_case, variant) pairs and store results in JSONL or a database.
Suggested output schema:
{
"test_id": "refund_policy_edge_case",
"variant": "strict_safety",
"response": "...",
"tool_calls": [{"name": "policy_lookup"}],
"latency_ms": 820,
"tokens": {"input": 420, "output": 130},
"passed": true,
"scores": {
"policy_adherence": 1.0,
"helpfulness": 0.8
}
}
4) Evaluate with a mix of automatic and human scoring
Use multiple evaluators:
Deterministic checks
Good for:
- tool call presence/absence
- JSON schema validity
- banned phrases
- correct route selection
- step count limits
Model-based evaluation
Good for:
- helpfulness
- tone
- policy adherence in nuanced cases
- summarization quality
Human review
Good for:
- ambiguous policy conflicts
- high-stakes workflows
- qualitative differences between variants
A balanced score might look like:
- 40% policy adherence
- 25% task success
- 15% tool correctness
- 10% tone/style
- 10% latency/cost
5) Compare variants with regression thresholds
Don’t just look at averages. Track:
- pass rate by test category
- failure modes
- latency
- cost
- tool call accuracy
- safety violations
Example thresholds:
- policy violation rate must be 0%
- task success must not drop by >2%
- average latency must not increase by >15%
This prevents “better sounding” prompts from silently making workflows worse.
6) Use a prompt-testing framework or build a lightweight harness
Popular options you can adapt:
- OpenAI Evals style harnesses
- LangSmith for tracing and comparisons
- Promptfoo for prompt/model comparisons
- DeepEval
- Ragas for RAG-heavy workflows
- Custom Python + pytest for full control
For agent workflows, a custom harness is often best because you need to test:
- multi-step behavior
- tool calls
- branch selection
- policy enforcement
7) Add workflow-specific checks
For agent systems, test not only the response but the trajectory:
- Did it choose the correct tool?
- Did it call tools in the right order?
- Did it stop when it should?
- Did it violate a policy before recovery?
- Did it ask for clarification when required?
Example checks:
- “must call
verify_identitybeforeaccount_lookup” - “must not issue refund without manager approval”
- “must escalate if confidence < threshold”
These are often more important than final text quality.
8) Store traces and results
Save:
- prompt version
- policy version
- model version
- test case version
- full execution trace
That gives you reproducibility and makes regressions debuggable.
A good practice is to use Git tags or hashes for:
- prompt files
- policy files
- test suite versions
9) Recommended architecture
A simple setup:
- Test definitions in YAML/JSON
- Runner in Python
- Execution layer calling your agent workflow
- Evaluator layer with rules + LLM judge
- Storage in CSV/JSONL/Postgres
- Dashboard in Streamlit/Gradio or a BI tool
10) Minimal implementation plan
If you want something practical fast:
Phase 1
- Create 20–50 representative test cases
- Define 2–5 prompt/policy variants
- Run them through one workflow
- Save outputs to JSONL
Phase 2
- Add automated checks for:
- tool calls
- schema validity
- forbidden behavior
- Add an LLM judge for qualitative scoring
Phase 3
- Add regression gating in CI
- Block merges if policy adherence drops
- Add dashboard for side-by-side comparisons
Example folder structure
prompt-testing/
prompts/
baseline.txt
variant_a.txt
policies/
baseline.yaml
strict.yaml
tests/
refund_cases.yaml
support_cases.yaml
runs/
2026-07-20_baseline_vs_variant_a.jsonl
src/
runner.py
evals.py
compare.py
Example comparison report
For each variant:
- success rate
- policy violations
- average latency
- average cost
- top 5 failure cases
- representative outputs
And a side-by-side table:
| Test | Baseline | Variant A | Winner |
|---|---|---|---|
| Refund edge case | Violated policy | Correct refusal | Variant A |
| Tool routing | Correct | Correct | Tie |
| Clarification needed | Answered too early | Asked clarifying question | Variant A |
If you want, I can also give you:
- a Python starter harness for prompt/policy comparison, or
- a YAML schema for agent workflow test cases.
Observation history
See 1 earlier observation
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.
How did Obsurfable measure this prompt?
Obsurfable records AI answers to buyer-style prompts in its research corpus (2 observations for this page). Metrics are distributions over observations, not a single static ranking.
Which AI systems does Obsurfable collect answers from?
OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.