Prompt management ও versioning
এই পাঠে যা শিখবেন
- Prompt-এর storage strategies
- Templating tools
- Versioning + A/B testing
- Regression suite
১ · "Prompt = code" mindset
Prompt code-এর মতো production artifact। Hardcoded string-এ বসিয়ে দিলে — change track নেই, A/B test নেই, regression catch হবে না।
২ · Storage approaches
- Git-tracked files: simplest; .txt or .yaml in repo। Pros: Git workflow। Cons: deploy required for change।
- Database: dynamic update; versioned। Pros: hot-reload। Cons: schema, governance।
- Prompt registry SaaS: Langfuse, PromptLayer, Helicone — purpose-built। Pros: UI, A/B built-in। Cons: cost।
৩ · Templating
from jinja2 import Template
from dataclasses import dataclass
import yaml
@dataclass
class PromptVersion:
name: str
version: str
template: str
description: str
# Load from YAML — git-tracked
PROMPTS = yaml.safe_load(open("prompts.yaml"))
bangla_summarize = PromptVersion(**PROMPTS["bangla_summarize_v3"])
def render(prompt: PromptVersion, **vars) -> str:
return Template(prompt.template).render(**vars)
# Usage
prompt_text = render(
bangla_summarize,
article="Bangladesh-এর IT সেক্টর এখন...",
max_words=100,
)
# Track in logging
import openai
resp = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt_text}],
)
logger.info({
"prompt_name": bangla_summarize.name,
"prompt_version": bangla_summarize.version,
"input_tokens": resp.usage.prompt_tokens,
"output_tokens": resp.usage.completion_tokens,
})
৪ · prompts.yaml example
bangla_summarize_v3:
name: bangla_summarize
version: v3
description: "Bangla article summarize, max-words constraint"
template: |
আপনি একজন বিশেষজ্ঞ Bangla editor। নিচের article-টি {{ max_words }}
শব্দের মধ্যে summarize করুন। মূল ভাব ও key facts অপরিবর্তিত রাখুন।
Article:
{{ article }}
Summary:
bangla_translate_v2:
name: bangla_translate
version: v2
description: "English → Bangla, professional tone"
template: |
Translate the following English text to formal Bangla.
Maintain technical terminology when appropriate.
English:
{{ text }}
Bangla:
৫ · Versioning workflow
- v1 production।
- v2 develop in dev branch — edit prompt।
- Regression suite run — eval against golden examples।
- v2 PR review।
- Shadow deploy — production prompt v1, log v2 hypothetical responses।
- A/B test 5% traffic v2 — quality, cost, latency।
- Promote v2 → production।
- v1 archived।
৬ · Regression suite
Golden examples — known input/expected output। Prompt change-এ ensure no regression।
import pytest
import openai
GOLDEN = [
{
"input": {"article": "...", "max_words": 50},
"expected_keywords": ["IT সেক্টর", "Bangladesh"],
"expected_max_length": 60, # words
},
# ... more
]
@pytest.mark.parametrize("case", GOLDEN)
def test_bangla_summarize_v3(case):
prompt = render(bangla_summarize_v3, **case["input"])
resp = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.0,
)
output = resp.choices[0].message.content
# Length check
assert len(output.split()) <= case["expected_max_length"]
# Keyword presence
for kw in case["expected_keywords"]:
assert kw in output, f"Missing keyword: {kw}"
৭ · A/B testing prompts
- Hash user_id → prompt v1 vs v2 assignment।
- Track per-prompt metric: cost, latency, user satisfaction।
- Statistical significance test (Lesson 23)।
৮ · Prompt registry tools
- Langfuse: open-source, self-host or cloud; observability + prompt management।
- PromptLayer: SaaS; prompt versioning + A/B।
- Helicone: request logging + prompt tracking।
- LangSmith: LangChain ecosystem; eval + tracing।
ভাবনার প্রশ্ন
প্র ০১"Prompt sprawl — kibhabe prevent, kibhabe fix?"
Sprawl = prompts scattered codebase, no governance।
Prevention:
- Day-1: prompts.yaml + version + name।
- Code review checklist: "new LLM call — registered?"
- CI lint: hardcoded prompt strings flagged।
Fix existing sprawl:
- grep all
openai.chat.create+"role": "user"। - Catalog every unique prompt।
- Migrate to YAML — name + version।
- Replace inline strings with template render call।
Governance:
- Prompt owner per template।
- Quarterly review — unused prompts archive।
- Cost dashboard per prompt।
Anti-pattern:
- Each engineer write own prompt — duplication।
- Slight variation each → inconsistent quality।
মূল উপলব্ধি: Prompt = ML team's database query equivalent — needs schema, ownership, version। Sprawl normal but addressable. Discipline early avoid pain later।
প্র ০২"Rolling prompt change safely — কীভাবে?"
Prompt change subtle effect — sometimes invisible until specific input।
Safety steps:
- Regression suite — golden examples।
- Shadow — silent comparison।
- Canary 5% traffic।
- Monitor: cost, latency, user feedback।
What to monitor:
- Output length (token cost)।
- Hallucination rate (if measurable)।
- User thumbs-up/down।
- Conversion rate (if applicable)।
Rollback:
- Feature flag — prompt version override।
- Instant rollback via config update।
BD example — Bangla translation prompt:
- v2 added "formal tone" instruction।
- Shadow: 10% output significantly more formal।
- Customer feedback: mixed — younger users prefer informal।
- Result: keep v1, develop user-tier-aware prompt।
মূল উপলব্ধি: Prompt change hide subtle impact — code change-এর মতই rigorous validation। Skip-এ silent quality regression।
প্র ০৩"Prompt vs fine-tune — কখন?"
Both task adaptation; different mechanism + cost।
Prompt approach:
- Pros: instant change, no training, easy A/B।
- Cons: token cost (long prompt), context window limit, less consistent।
Fine-tune:
- Pros: smaller prompt (cost ↓), more consistent, learn complex pattern।
- Cons: training cost, retraining for change, less agile।
When prompt suffices:
- Few-shot examples in prompt enough।
- Task variation high — no consistent pattern।
- Iteration needed — change prompt vs retraining।
When fine-tune justified:
- Same task pattern → many examples।
- Prompt too long → cost prohibitive।
- Style/format consistency critical।
- Smaller model (cost) acceptable quality।
BD context:
- Bangla customer support tone — fine-tune justified (consistent style)।
- Variable Q&A — prompt + RAG।
- Hybrid: fine-tune base style, prompt for specifics।
মূল উপলব্ধি: Prompt = tactical, fast iteration। Fine-tune = strategic, locked behavior। Cost-volume crossover analyze।
প্র ০৪"Prompt-level metrics — কী track?"
Per-prompt visibility critical for cost + quality।
Cost metrics:
- Average input tokens per call।
- Average output tokens।
- Cost per call (model rate × tokens)।
- Daily/monthly cost per prompt।
Quality metrics:
- User feedback (thumbs up/down)।
- Hallucination rate (if detectable)।
- Output schema match rate (structured output)।
- Refusal rate (model says "I can't")।
Performance:
- Latency p50/p99।
- Token-per-second।
- Streaming first-token-time।
Business:
- Conversion rate (per-prompt-version)।
- User retention (long-term)।
Tooling:
- Langfuse, Helicone — purpose-built।
- Custom Prometheus + tag।
BD context:
- Bangla token cost matters — per-prompt cost dashboard valuable।
- Top-cost prompts → optimize candidate।
মূল উপলব্ধি: Per-prompt observability = LLM cost-control engine। Aggregate metrics insufficient — drill down।
অনুশীলন
- Refactor: Existing project hardcoded prompt → prompts.yaml extract।
grep search hardcoded; YAML structure; render helper write।
- Regression: 5 golden examples write — current prompt regression test।
Diverse inputs, expected keywords, length bound। pytest run।
- চিন্তা: Bangla customer support — 3 prompt variations design।
- v1: formal tone "আপনাকে স্বাগতম..."।
- v2: casual tone "হ্যালো! কীভাবে সাহায্য করতে পারি?"।
- v3: empathetic tone "আমি বুঝতে পারছি... চলুন সমাধান করি"।
- A/B with thumbs-up rate measure।