Bedrock Prompt Management: Versioned System Prompts for Production

Bedrock Prompt Management: Versioned System Prompts for Production

System prompts buried in Lambda env vars are unreviewable and unrollbackable. Treat them like code: create versions in Bedrock Prompt Management (or your own registry), attach aliases (dev, canary, prod), evaluate quality/latency, and roll back in one alias update when assistants regress.

⚡ TL;DR: Store prompts as versioned artifacts; never hot-edit prod strings in the console without a version bump; canary an alias on 5–10% of traffic; compare eval scores and p95 latency; flip alias back on regression. Pair with prompt caching, RAG eval (sibling angle), and Bedrock Agents.

Create and version prompts as code

import boto3
bedrock = boto3.client("bedrock-agent")

def publish_prompt(name: str, text: str, desc: str) -> dict:
    # First create, then create version — illustrative API shape
    created = bedrock.create_prompt(
        name=name,
        description=desc,
        variants=[{
            "name": "default",
            "templateConfiguration": {
                "text": {
                    "text": text,
                    "inputVariables": [{"name": "service"}, {"name": "locale"}],
                }
            },
            "modelId": "anthropic.claude-sonnet-4-20250514-v1:0",
            "inferenceConfiguration": {"text": {"temperature": 0, "maxTokens": 2048}},
        }],
    )
    versioned = bedrock.create_prompt_version(
        promptIdentifier=created["id"],
        description=desc,
    )
    return versioned

Keep the source of truth in git (prompts/oncall-v3.txt) and publish from CI — console edits are break-glass only.

Aliases for canary and prod

def point_alias(prompt_id: str, alias: str, version: str):
    # create_prompt_alias / update_prompt_alias patterns
    return bedrock.create_prompt_alias(
        promptIdentifier=prompt_id,
        promptVersion=version,
        name=alias,  # prod | canary | dev
        description=f"points to {version}",
    )
// Runtime resolves alias, not hard-coded version
const promptArn = process.env.PROMPT_ALIAS_ARN!; // ...:prompt/xxx:alias/prod
// Pass prompt ARN into Converse / InvokeModelWithResponseStream as supported

✅ Alias flip = instant rollback.
❌ Redeploying twelve services to change a paragraph.

Canary with eval gates

# .github/workflows/prompt-canary.yml
on:
  workflow_dispatch:
    inputs:
      version: { required: true }
jobs:
  eval:
    runs-on: ubuntu-latest
    steps:
      - run: python eval/run_golden.py --prompt-version ${{ inputs.version }} --out out.json
      - run: python eval/compare.py --baseline s3://…/baseline.json --candidate out.json --min-faithfulness 4.0 --max-p95-ms 3500
  promote:
    needs: eval
    steps:
      - run: python prompts/point_alias.py --alias canary --version ${{ inputs.version }}
      - run: python prompts/bake.py --alias canary --minutes 60
      - run: python prompts/point_alias.py --alias prod --version ${{ inputs.version }}

Use the same golden-set discipline as RAG evaluation. Cache stable prompt prefixes — Bedrock prompt caching.

Observability

Emit prompt_alias, prompt_version, latency, tokens, user thumbs-down. Alert when thumbs-down rate or tool-error rate spikes after an alias change.

Closing checklist

✅ Dos
– ✅ Git-source prompts; publish versions from CI
– ✅ Use aliases (dev/canary/prod), never hard-code versions in ten services
– ✅ Gate promotion on golden eval + latency
– ✅ One-command alias rollback
– ✅ Log prompt version on every request

❌ Don’ts
– ❌ Don’t edit the live prod prompt text in-console without a new version
– ❌ Don’t ship prompt changes bundled silently with unrelated app deploys
– ❌ Don’t skip canary on high-traffic assistants
– ❌ Don’t raise temperature when versioning “for creativity” in prod support bots
– ❌ Don’t forget input variables — broken templates fail open into empty system prompts

Related reading

Last updated on September 11, 2026


Discover more from CheatCoders

Subscribe to get the latest posts sent to your email.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply