Skip to content

Prompt-only vs environment eval

Most teams start with prompt-only evaluation (model output checks). Mature agent programs add environment-backed evaluation (outcome oracles in a harness). Both use the same Softprobe workflow envelope — only SubjectVersion and EnvironmentVersion change. Assertions stay in the framework suite.

Prompt-only eval

Use when the agent is a single model call (or short chain) and graders inspect output text.

PieceTypical choice
SubjectVersionPinned model + system prompt digest
EnvironmentVersionnoop — no harness
Framework checksPromptfoo icontains / confidentiality asserts, etc.

Customer example: a support router that must name the correct department and never leak internal schema names.

yaml
vars:
  system_prompt: "file://prompts/router.txt"
  user_query: "I was charged twice for my subscription"
assert:
  - type: icontains
    value: "billing-support"
  - type: not-icontains
    value: "internal_db_schema"

What it proves: routing policy and safety strings — not whether downstream tools run correctly.

Environment-backed eval

Use when the agent is a process (tools, multi-turn, code execution) and you can define oracles: tests pass, API state, task completion.

PieceTypical choice
SubjectVersionAgent binary/image digest + tool config
EnvironmentVersionFixture repo, stubbed APIs, reset/step/verify
Framework checksOutcome asserts, trajectory metrics, LLM judges — still in-framework

What it proves: outcomes beat transcripts — a plausible answer that fails the oracle is still a failure.

Choosing a mode

QuestionPrompt-onlyEnvironment-backed
Is the SUT one model call?YesOften no
Do you have a reliable oracle?NoYes
Cost / setup timeLowHigher
Catches tool misuse?LimitedYes
CI without secretsEasy (fixtures)Needs harness images

Many programs run both: prompt-only gates for fast PR checks; environment suites nightly or on release candidates.

Same workflow, different digests

text
WorkflowVersion
  ├── FrameworkDefinition     # Promptfoo/DeepEval suite (mode-specific asserts)
  ├── RunnerVersion
  ├── SubjectVersion          # ← changes between modes
  ├── EnvironmentVersion      # ← noop vs fixture
  └── gate policy

Compare WorkflowRuns with sp eval compare when SubjectVersion digests change.

Zero code changes · Full-context visibility · Cost optimization