Setiap posting blog tentang rekayasa prompt mencakup chain-of-thought, contoh few-shot, dan instruksi peran. Itu baik untuk demo. Prompt produksi memiliki persyaratan berbeda: mereka perlu di-versi, diuji, dipantau untuk regresi, dan dioptimalkan untuk biaya. Setelah enam bulan menjalankan fitur LLM di produksi di AI Gymbro, saya telah mengembangkan serangkaian praktik yang membuat rekayasa prompt benar-benar berskala.
Kesalahan terbesar yang saya buat di awal adalah menyimpan prompt secara inline dalam kode aplikasi — template string yang terkubur dalam fungsi layanan. Perbaikannya: perlakukan prompt sebagai artefak dengan versioning mereka sendiri. Saya menyimpan prompt di direktori prompts/ sebagai file Markdown dengan header YAML frontmatter yang berisi versi, model, max_tokens, temperature.
Gunakan pustaka template yang tepat: Handlebars (JavaScript) atau Jinja2 (Python) memberi Anda partial (komponen prompt yang dapat digunakan kembali), bagian kondisional (hanya sertakan blok konteks RAG jika konteks ada), dan konstruksi loop. Ekstrak komponen prompt umum ke partial bersama yang semua prompt impor.
Simpan contoh dalam direktori examples/ terpisah, ditandai dengan prompt yang mereka miliki dan tanggal validitas. Tinjau dan segarkan contoh setiap kuartal. Untuk produksi, pilih contoh few-shot secara dinamis berdasarkan kesamaan dengan permintaan saat ini menggunakan pencarian vektor kecil.
Prompt Ops Pipeline
prompts/
├── workout-recommendation.md
│ ├── --- (YAML frontmatter)
│ │ version: "1.4.2"
│ │ model: "claude-3-5-haiku-20241022"
│ │ temperature: 0.1
│ │ max_tokens: 1024
│ │ description: "Workout plan generation"
│ ├── ---
│ └── [prompt content with Handlebars templates]
│
├── examples/
│ └── workout-recommendation/
│ ├── example-01.json { input, expected_output }
│ └── example-02.json
│
└── evals/
└── workout-recommendation/
├── test-01.json { input, assertions: [...] }
└── test-02.json
CI Pipeline:
PR opened
│
▼
Load prompt change diff
│
▼
Run evals (call real LLM on test set)
│
├── Pass rate ≥ 95%? → Allow merge
└── Pass rate < 95%? → Block + show failuresPola rekayasa prompt paling andal yang saya temukan untuk output terstruktur adalah menyediakan format output sebagai contoh lengkap dalam prompt, bukan sebagai deskripsi JSON Schema. Model mengikuti contoh lebih baik daripada schema, dan Anda menangkap pelanggaran format sebelum mencapai parser JSON Anda.
Masalah prompt produksi paling umum adalah regresi: perubahan prompt yang meningkatkan perilaku pada kasus yang gagal menurunkan perilaku pada kasus yang sebelumnya bekerja. Saya memelihara direktori evals/ dengan kasus uji. Jalankan evals pada setiap perubahan prompt menggunakan langkah CI.
Setelah Anda memiliki suite uji, Anda dapat menggunakan optimasi prompt otomatis: alat seperti DSPy (Stanford) yang secara otomatis menghasilkan dan menguji variasi prompt. Saya menggunakan DSPy untuk mengoptimalkan prompt rekomendasi latihan saya dan mendapatkan peningkatan 22% dalam skor eval.
# DSPy — automatic prompt optimization
import dspy
# Define your task as a DSPy signature
class WorkoutRecommendation(dspy.Signature):
"""Generate a personalized workout recommendation."""
user_profile: str = dspy.InputField()
goals: str = dspy.InputField()
recommendation: str = dspy.OutputField()
# Build a DSPy program
class WorkoutRecommender(dspy.Module):
def __init__(self):
self.generate = dspy.ChainOfThought(WorkoutRecommendation)
def forward(self, user_profile, goals):
return self.generate(user_profile=user_profile, goals=goals)
# Load your eval set (50+ examples)
trainset = [
dspy.Example(
user_profile="...",
goals="...",
recommendation="..." # ground truth
).with_inputs("user_profile", "goals")
for example in load_evals()
]
# Optimize — DSPy tries prompt variations automatically
teleprompter = dspy.BootstrapFewShot(metric=exact_match_metric)
optimized = teleprompter.compile(WorkoutRecommender(), trainset=trainset)
# Result: auto-optimized prompt with best few-shot examples
optimized.save("optimized_recommender.json")Prompt yang lebih baik seringkali adalah prompt yang lebih pendek. Saya menjalankan audit prompt pada system prompt AI Gymbro saya dan menguranginya dari 1.100 token menjadi 620 token tanpa degradasi kualitas yang terukur. Itu 480 token lebih sedikit per permintaan — pada 10.000 permintaan/hari, itu 4,8 juta token/hari yang dihemat.
Menyetel temperature ke 0 adalah saran umum untuk prompt produksi. Tetapi temperature 0 dapat menyebabkan degradasi kualitas dengan memperkuat perubahan prompt kecil dan menghasilkan output yang terlalu percaya diri. Saya menggunakan temperature 0,1 sebagai default untuk prompt produksi saya — hampir deterministik, tetapi dengan cukup variansi untuk menghindari mode kegagalan deterministik.
Prompt tidak ditransfer sempurna antara model. Prompt yang dioptimalkan untuk GPT-4o seringkali akan berkinerja buruk pada Claude dan sebaliknya. Saat Anda memigrasikan prompt dari satu model ke model lain, anggaran waktu untuk re-optimasi.
Jangka panjang, mengelola prompt pada skala memerlukan memperlakukannya seperti perangkat lunak: version control (Git), pengujian (evals), CI/CD (jalankan eval otomatis pada perubahan), observabilitas (log versi prompt di samping panggilan LLM), dan proses review perubahan.