0Pricing
AI Prompt Engineering · Pelajaran

Strategi Pencatatan dan Dokumentasi

Catat versi prompt, input, dan output agar debugging dapat direproduksi.

Strategi Pencatatan dan Dokumentasi adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Mengapa Pencatatan Perintah Penting

Tanpa pencatatan, kegagalan perintah tidak terlihat hingga pengguna melaporkannya. Dengan pencatatan, Anda dapat:

  • Mendeteksi regresi saat terjadi
  • Mereproduksi kegagalan apa pun di masa lalu secara persis seperti saat terjadi
  • Mengukur peningkatan dari waktu ke waktu seiring berkembangnya perintah
  • Mengaudit perilaku model untuk kepatuhan atau keamanan

Pencatatan bukan pilihan tambahan untuk sistem perintah produksi — pencatatan adalah dasar aplikasi LLM yang andal.

Entri Catatan Minimum yang Layak

Setiap interaksi dengan perintah setidaknya harus mencatat bidang-bidang berikut:

  • timestamp: UTC ISO 8601
  • prompt_id: templat perintah yang digunakan
  • model: nama dan versi model yang tepat
  • temperature: parameter pengambilan sampel
  • input: pesan pengguna (atau hash jika mengandung PII)
  • output: respons model
  • latency_ms: waktu respons
  • tokens_used: token masukan + keluaran
import time, json
from datetime import datetime, timezone

def logged_call(prompt_id, system_prompt, user_message, model='gpt-4o', temperature=0.7):
    start = time.time()
    resp = client.chat.completions.create(
        model=model,
        messages=[
            {'role': 'system', 'content': system_prompt},
            {'role': 'user', 'content': user_message}
        ],
        temperature=temperature
    )
    latency = int((time.time() - start) * 1000)
    output = resp.choices[0].message.content
    log_entry = {
        'timestamp': datetime.now(timezone.utc).isoformat(),
        'prompt_id': prompt_id,
        'model': model,
        'temperature': temperature,
        'input': user_message,
        'output': output,
        'latency_ms': latency,
        'input_tokens': resp.usage.prompt_tokens,
        'output_tokens': resp.usage.completion_tokens
    }
    append_log(log_entry)
    return output

Format Pencatatan Terstruktur

Gunakan JSON yang dibatasi baris baru (JSONL) untuk file catatan. Setiap baris merupakan objek JSON lengkap dan valid. Format ini:

  • Mudah ditambahkan tanpa penguncian
  • Dapat dibaca oleh jq, pandas, dan semua pengumpul catatan
  • Ramah terhadap pemrosesan aliran — setiap baris dapat diproses saat tiba
import json

LOG_FILE = 'prompt_logs.jsonl'

def append_log(entry):
    with open(LOG_FILE, 'a') as f:
        f.write(json.dumps(entry) + '\n')

def read_logs():
    with open(LOG_FILE) as f:
        return [json.loads(line) for line in f if line.strip()]

# Query: all entries for prompt_id 'summarize_v3'
logs = read_logs()
summarize_logs = [e for e in logs if e['prompt_id'] == 'summarize_v3']
print(f'Total calls to summarize_v3: {len(summarize_logs)}')

Penerapan Versi Perintah

Perintah berubah seiring waktu. Tanpa penerapan versi, Anda tidak dapat mereproduksi perilaku sebelumnya atau membandingkan keluaran model di berbagai versi perintah. Gunakan pengenal versi dalam setiap entri catatan.

Penerapan versi sederhana: string versi semantik (misalnya, v1.2.3) atau hash commit git. Simpan versi perintah dalam file khusus agar versi apa pun dapat diambil untuk diputar ulang.

PROMPTS = {
    'summarize': {
        'v1': 'Summarize the following text.',
        'v2': 'Summarize the following text in 3 sentences.',
        'v3': 'Summarize the following text in exactly 3 sentences. '
              'Start each sentence on a new line. No bullet points.'
    }
}

CURRENT_VERSIONS = {'summarize': 'v3'}

def get_prompt(prompt_id):
    version = CURRENT_VERSIONS[prompt_id]
    return version, PROMPTS[prompt_id][version]

version, prompt = get_prompt('summarize')
log_entry['prompt_version'] = version

Menangani PII dalam Catatan

Masukan pengguna dapat berisi informasi identitas pribadi (PII). Mencatat masukan mentah dapat melanggar GDPR atau CCPA. Pilihannya:

  • Hash: simpan SHA-256 dari masukan — dapat direproduksi untuk deduplikasi, tetapi tidak untuk pemutaran ulang
  • Samarkan: gunakan regex atau model NER untuk mengganti PII sebelum pencatatan
  • Penyimpanan terpisah: catat PII di penyimpanan terenkripsi dengan kontrol akses; catat hanya ID referensi di catatan utama
import hashlib, re

def redact_pii(text):
    # Redact email addresses
    text = re.sub(r'[\w.-]+@[\w.-]+\.\w+', '[EMAIL]', text)
    # Redact phone numbers (US format)
    text = re.sub(r'\b\d{3}[-.]\d{3}[-.]\d{4}\b', '[PHONE]', text)
    return text

def hash_input(text):
    return hashlib.sha256(text.encode()).hexdigest()[:16]

log_entry['input'] = redact_pii(user_message)
log_entry['input_hash'] = hash_input(user_message)

Pelacakan Latensi dan Biaya

Catatan memungkinkan pembuatan dasbor biaya dan latensi. Lacak metrik per versi perintah untuk mendeteksi regresi kinerja atau biaya setelah perubahan perintah:

def compute_cost(entry, price_per_1m_input=5.0, price_per_1m_output=15.0):
    input_cost = entry['input_tokens'] / 1_000_000 * price_per_1m_input
    output_cost = entry['output_tokens'] / 1_000_000 * price_per_1m_output
    return input_cost + output_cost

def prompt_stats(prompt_id, version):
    logs = [e for e in read_logs()
            if e['prompt_id'] == prompt_id and e.get('prompt_version') == version]
    if not logs:
        return
    avg_latency = sum(e['latency_ms'] for e in logs) / len(logs)
    total_cost = sum(compute_cost(e) for e in logs)
    print(f'{prompt_id} {version}: {len(logs)} calls, avg {avg_latency:.0f}ms, total ${total_cost:.4f}')

Pencatatan Evaluasi Keluaran

Selain catatan mentah, simpan skor evaluasi bersama setiap entri catatan. Hal ini memungkinkan analisis tren: apakah kualitas keluaran meningkat di berbagai versi perintah?

def evaluated_call(prompt_id, system_prompt, user_message, evaluator_fn):
    output = logged_call(prompt_id, system_prompt, user_message)
    score = evaluator_fn(user_message, output)
    # Update the last log entry with the evaluation score
    logs = read_logs()
    last = logs[-1]
    last['eval_score'] = score
    last['eval_pass'] = score >= 0.8
    # Rewrite the last line
    with open(LOG_FILE, 'a') as f:
        # In practice, use a DB or separate eval log
        pass
    return output, score

Dokumentasi Perintah

Setiap templat perintah harus memiliki entri dokumentasi pendamping yang mencakup:

  • Tujuan: tugas yang dilakukan perintah ini
  • Variabel: placeholder yang tersedia dan hal yang diharapkan dari setiap placeholder
  • Keterbatasan yang diketahui: masukan yang diketahui dapat menyebabkan kegagalan
  • Riwayat versi: perubahan pada setiap versi dan alasannya
  • Kasus pengujian: tautan ke rangkaian pengujian untuk perintah ini
PROMPT_DOCS = {
    'summarize': {
        'purpose': 'Summarize a single text passage into 3 sentences.',
        'variables': {'text': 'The passage to summarize (max 2000 tokens)'},
        'known_limitations': [
            'Fails to preserve numbers accurately for texts with many statistics',
            'May not summarize correctly for non-English text'
        ],
        'versions': {
            'v1': 'Initial version — vague length instruction',
            'v2': 'Added 3-sentence limit',
            'v3': 'Added line-break and no-bullet formatting fix'
        },
        'test_suite': 'tests/test_summarize.py'
    }
}

Menggunakan Layanan Pencatatan Terpusat

Untuk sistem produksi, tulis catatan ke layanan terpusat, bukan ke file lokal:

  • LangSmith: platform pelacakan dan evaluasi bawaan LangChain
  • Weights and Biases Prompts: pelacakan eksperimen untuk perintah
  • Datadog / Grafana: dasbor operasi standar dengan metrik khusus
  • Supabase / PostgreSQL: kueri catatan dengan SQL untuk analisis ad hoc

Skemanya sama; hanya tujuannya yang berubah.

# Example: writing to Supabase
from supabase import create_client

supabase = create_client('https://xxx.supabase.co', 'your-anon-key')

def log_to_supabase(entry):
    supabase.table('prompt_logs').insert(entry).execute()

# Now query with SQL:
# SELECT prompt_id, prompt_version, AVG(latency_ms), COUNT(*)
# FROM prompt_logs
# WHERE timestamp > NOW() - INTERVAL '7 days'
# GROUP BY prompt_id, prompt_version
# ORDER BY COUNT(*) DESC;

Peringatan saat Lonjakan Kegagalan

Konfigurasikan peringatan ketika tingkat kegagalan melonjak melewati ambang batas. Contohnya, jika lebih dari 10% panggilan ke suatu prompt menghasilkan JSON yang tidak valid dalam rentang 5 menit, kirimkan peringatan.

from collections import deque
from datetime import datetime, timezone, timedelta

recent_results = deque(maxlen=100)  # sliding window

def track_and_alert(prompt_id, success, alert_fn, threshold=0.10):
    recent_results.append({'success': success, 'time': datetime.now(timezone.utc)})
    window = [
        r for r in recent_results
        if r['time'] > datetime.now(timezone.utc) - timedelta(minutes=5)
    ]
    if not window:
        return
    fail_rate = sum(1 for r in window if not r['success']) / len(window)
    if fail_rate > threshold:
        alert_fn(f'ALERT: {prompt_id} failure rate {fail_rate:.0%} in last 5 min')

Retensi dan Pengarsipan

Tentukan kebijakan retensi log:

  • Log panggilan mentah: 30 hari (bergulir) — volumenya tinggi dan diperlukan untuk men-debug masalah terbaru
  • Metrik teragregasi: 1 tahun — diperlukan untuk menganalisis tren dan memperkirakan biaya
  • Log kegagalan: tanpa batas waktu — diperlukan untuk menemukan pola akar masalah

Kompres dan arsipkan log mentah setelah 30 hari. Jangan pernah menghapus log kegagalan — log tersebut merupakan memori institusional Anda untuk rekayasa prompt.

Pemeriksaan Pengetahuan

Apa keunggulan utama menggunakan format JSON yang dibatasi baris baru (JSONL) untuk log prompt dibandingkan satu larik JSON besar?

Rekap: Pencatatan Log dan Dokumentasi

Praktik utama untuk pencatatan log dan dokumentasi prompt:

  • Catat setiap panggilan: stempel waktu, ID prompt, versi, model, suhu, masukan, keluaran, latensi, token
  • Gunakan format JSONL: mudah ditambahkan dan dapat dikueri dengan alat standar
  • Buat versi prompt: setiap perubahan mendapatkan versi baru; log merujuk ke versi tersebut
  • Tangani PII: samarkan atau hash masukan sensitif sebelum dicatat
  • Lacak biaya dan latensi: deteksi penurunan kinerja setelah pembaruan prompt
  • Beri peringatan saat terjadi lonjakan kegagalan: pantau tingkat kegagalan dalam jendela bergulir

Ini mengakhiri Kursus 17 tentang Men-debug Kegagalan Prompt. Berikutnya: Injeksi Prompt dan Pertahanan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Strategi Pencatatan dan Dokumentasi” gratis?

Ya — teks lengkap “Strategi Pencatatan dan Dokumentasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Strategi Pencatatan dan Dokumentasi”?

Catat versi prompt, input, dan output agar debugging dapat direproduksi. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Strategi Pencatatan dan Dokumentasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendiagnosis Keluaran Tak Terduga
  2. Analisis Akar Masalah untuk Perintah
  3. Pendekatan Debugging Sistematis
  4. Strategi Pencatatan dan Dokumentasi
← Kembali ke AI Prompt Engineering