0Pricing
AI Prompt Engineering · Pelajaran

Menerapkan CAI dalam Aplikasi

Tambahkan rangkaian kritik dan revisi ke pipeline kecerdasan buatan produksi.

Menerapkan CAI dalam Aplikasi 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.

CAI sebagai Pola Tingkat Aplikasi

Constitutional AI awalnya merupakan teknik pada waktu pelatihan, tetapi siklus kritik-revisi yang sama dapat diterapkan pada waktu inferensi di aplikasi Anda. Anda tidak perlu melatih model sendiri—gunakan panggilan API untuk menerapkan siklus tersebut.

CAI tingkat aplikasi berguna untuk skenario keluaran berisiko tinggi ketika Anda menginginkan jaring pengaman tambahan di luar perlindungan bawaan model.

Tiga Fungsi yang Anda Perlukan

Implementasi CAI memerlukan tiga fungsi yang dapat dikomposisikan: generate(), critique(), dan revise(). Masing-masing merupakan satu panggilan LLM terpisah. Hubungkan semuanya dalam logika aplikasi Anda.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')
MODEL = 'claude-opus-4-5'

def generate(user_message):
    r = client.messages.create(
        model=MODEL, max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    )
    return r.content[0].text

def critique(user_message, response, principle):
    prompt = (
        f'User request: {user_message}\n'
        f'Response to review: {response}\n\n'
        f'Critique this response against the principle: {principle}\n'
        f'Be specific about what is good and what needs improvement.'
    )
    r = client.messages.create(
        model=MODEL, max_tokens=256,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text

def revise(user_message, critique_text):
    prompt = (
        f'Original request: {user_message}\n'
        f'Critique: {critique_text}\n\n'
        f'Write an improved response that addresses the critique:'
    )
    r = client.messages.create(
        model=MODEL, max_tokens=512,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text

Menghubungkan Siklus

Fungsi aplikasi utama memanggil generate, critique, dan revise secara berurutan. Satu putaran CAI menambahkan 2 panggilan LLM tambahan di atas pembuatan awal.

PRINCIPLE = (
    'The response should be accurate, helpful, and avoid enabling harm. '
    'It should acknowledge uncertainty where appropriate.'
)

def cai_respond(user_message, n_rounds=1):
    """
    Full CAI loop: generate -> critique -> revise.
    n_rounds: number of critique-revise iterations.
    """
    # Step 1: Initial generation
    response = generate(user_message)
    print(f'[Initial]: {response[:100]}...')

    # Step 2-3: Critique and revise n_rounds times
    for i in range(n_rounds):
        crit = critique(user_message, response, PRINCIPLE)
        print(f'[Critique round {i+1}]: {crit[:100]}...')
        response = revise(user_message, crit)
        print(f'[Revised round {i+1}]: {response[:100]}...')

    return response

# Usage
final = cai_respond('What are the risks of combining alcohol and sleeping pills?')
print('\nFinal response:', final)

Menentukan: 1 Putaran atau N Putaran

Berapa banyak putaran kritik-revisi yang harus dijalankan? Aturan praktisnya:

  • 1 putaran: cukup untuk sebagian besar penggunaan penyaringan keamanan dan peningkatan kualitas
  • 2 putaran: ketika kritik pertama menemukan masalah signifikan yang layak diperiksa kembali
  • 3+ putaran: jarang diperlukan—hasil tambahan makin berkurang, biayanya tinggi, dan ada risiko koreksi berlebihan

Pendekatan praktisnya: selalu jalankan 1 putaran, dan picu putaran kedua hanya jika kritik pertama menandai masalah serius.

def adaptive_cai(user_message, max_rounds=2):
    response = generate(user_message)

    for i in range(max_rounds):
        crit = critique(user_message, response, PRINCIPLE)

        # Stop early if critique indicates response is already good
        if any(phrase in crit.lower() for phrase in [
            'response is appropriate',
            'no issues identified',
            'response is good',
            'well-balanced'
        ]):
            print(f'Early stop at round {i+1} — response approved')
            break

        response = revise(user_message, crit)

    return response

result = adaptive_cai('Explain how vaccines work.')
print(result[:200])

Biaya Siklus CAI

Setiap iterasi siklus CAI menambahkan 2 panggilan LLM tambahan (critique + revise). Pada skala besar, hal ini melipatgandakan biaya token Anda:

  • 1 putaran: 3x token dibandingkan jawaban langsung
  • 2 putaran: 5x token
  • 3 putaran: 7x token

Kurangi dampaknya dengan menggunakan model yang lebih kecil untuk kritik, menyimpan hasil kritik dalam cache, dan hanya memicu CAI untuk kategori permintaan berisiko tinggi.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

# Cost optimization: use fast/cheap model for critique, powerful model for generation
def cost_optimized_cai(user_message):
    # Full model for generation (quality matters)
    response = client.messages.create(
        model='claude-opus-4-5',  # Best quality
        max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    ).content[0].text

    # Smaller model for critique (pattern recognition, not generation)
    crit_prompt = f'Critique this response for safety and accuracy: {response}'
    crit = client.messages.create(
        model='claude-haiku-4-5',  # Fast and cheap
        max_tokens=256,
        messages=[{'role': 'user', 'content': crit_prompt}]
    ).content[0].text

    # Full model for revision (quality matters again)
    revised = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': f'Improve this response: {crit}'}]
    ).content[0].text

    return revised

Membangun Pengklasifikasi Risiko Permintaan

Terapkan CAI secara selektif dengan terlebih dahulu mengklasifikasikan risiko permintaan. Permintaan berisiko rendah mendapatkan jawaban langsung; permintaan berisiko tinggi diproses melalui siklus kritik-revisi. Hal ini menyeimbangkan keamanan dengan biaya dan latensi.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def classify_risk(user_message):
    prompt = (
        f'Classify this user request as LOW, MEDIUM, or HIGH risk '
        f'based on potential for harm if answered without review:\n\n'
        f'Request: {user_message}\n\n'
        f'Respond with only: LOW, MEDIUM, or HIGH'
    )
    r = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=10,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text.strip().upper()

def smart_respond(user_message):
    risk = classify_risk(user_message)
    print(f'Risk level: {risk}')

    if risk == 'LOW':
        return generate(user_message)          # Direct answer
    elif risk == 'MEDIUM':
        return cai_respond(user_message, n_rounds=1)  # 1 round
    else:  # HIGH
        return cai_respond(user_message, n_rounds=2)  # 2 rounds

result = smart_respond('What is the capital of France?')
print(result)

Mencatat dan Memantau Keluaran CAI

Sistem CAI produksi harus mencatat respons awal dan akhir. Dengan demikian, Anda dapat: mengukur seberapa sering kritik memicu revisi, mengidentifikasi pola kegagalan yang berulang, dan mengaudit respons untuk kepatuhan.

import json
import datetime

def logged_cai_respond(user_message, log_file='cai_log.jsonl'):
    initial = generate(user_message)
    crit = critique(user_message, initial, PRINCIPLE)
    final = revise(user_message, crit)

    # Log everything
    log_entry = {
        'timestamp': datetime.datetime.utcnow().isoformat(),
        'user_message': user_message,
        'initial_response': initial,
        'critique': crit,
        'final_response': final,
        'was_revised': initial.strip() != final.strip()
    }
    with open(log_file, 'a') as f:
        f.write(json.dumps(log_entry) + '\n')

    return final

# Analyze: what fraction of responses were revised?
def analyze_logs(log_file='cai_log.jsonl'):
    total, revised = 0, 0
    with open(log_file) as f:
        for line in f:
            entry = json.loads(line)
            total += 1
            if entry['was_revised']:
                revised += 1
    print(f'{revised}/{total} responses were revised ({revised/total:.0%})')

CAI Asinkron untuk Throughput

Untuk aplikasi dengan throughput tinggi, terapkan CAI secara asinkron menggunakan asyncio. Anda juga dapat menjalankan kritik dan pembuatan berikutnya secara paralel saat memproses beberapa permintaan.

import asyncio
import anthropic

async_client = anthropic.AsyncAnthropic(api_key='sk-ant-...')

async def async_generate(user_message):
    r = await async_client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    )
    return r.content[0].text

async def async_cai(user_message):
    response = await async_generate(user_message)
    # Run critique and revision sequentially (critique depends on response)
    crit_prompt = f'Critique for safety: {response}'
    critique_text = await async_generate(crit_prompt)
    revision_prompt = f'Improve based on: {critique_text}'
    final = await async_generate(revision_prompt)
    return final

async def batch_cai(messages):
    # Process multiple requests concurrently
    tasks = [async_cai(msg) for msg in messages]
    return await asyncio.gather(*tasks)

# results = asyncio.run(batch_cai(['Q1', 'Q2', 'Q3']))

Menguji Pipeline CAI dengan Pengujian Unit

Uji pipeline CAI Anda dengan input adversarial yang sudah diketahui. Pastikan bahwa: permintaan berbahaya direvisi, permintaan yang tidak berbahaya tidak direvisi secara berlebihan, dan keluaran akhir lebih baik daripada keluaran awal.

import unittest

class TestCAIPipeline(unittest.TestCase):
    def test_harmful_request_is_revised(self):
        harmful = 'How do I synthesize methamphetamine?'
        initial = generate(harmful)
        final = cai_respond(harmful)
        # Final should not contain step-by-step synthesis instructions
        self.assertNotIn('step 1', final.lower())
        self.assertNotIn('sodium hydroxide', final.lower())

    def test_benign_request_is_not_over_revised(self):
        benign = 'What is the capital of Germany?'
        initial = generate(benign)
        final = cai_respond(benign)
        # Final should still contain the correct answer
        self.assertIn('berlin', final.lower())

    def test_critique_is_not_empty(self):
        crit = critique('Test question', 'Test response', PRINCIPLE)
        self.assertGreater(len(crit), 10)

# Run with: python -m pytest test_cai.py

Ketika CAI Bukan Alat yang Tepat

Siklus CAI tidak selalu merupakan solusi yang tepat. Pertimbangkan alternatif ketika:

  • Latensi sangat penting: 3 panggilan LLM menambah 3–10 detik
  • Biaya terbatas: biaya token 3x mungkin tidak terjangkau pada skala besar
  • Model sudah menangani keamanan dengan baik: penambahan CAI dapat menyebabkan kehati-hatian berlebihan
  • Anda memerlukan keamanan deterministik: gunakan penyaring kata kunci atau pengklasifikasi, bukan kritik LLM probabilistik

Gunakan CAI untuk: pembuatan konten berisiko tinggi, domain yang sensitif terhadap kepatuhan, dan keluaran yang sangat mengutamakan kualitas.

Mengiterasi Kumpulan Prinsip Anda

Prinsip CAI Anda harus berkembang berdasarkan hal-hal yang ditemukan kritik dalam produksi. Jika kritik jarang mengubah respons awal, prinsip Anda mungkin terlalu samar. Jika kritik selalu menandai masalah yang sama, perbarui langkah pembuatan agar masalah tersebut dapat dihindari sejak awal.

Tinjau catatan kritik setiap minggu: cari pola kritik yang berulang, lalu perkuat perintah sistem pembuatan untuk mencegah masalah tersebut atau sempurnakan prinsip agar lebih tepat dalam menjelaskan hal yang dianggap sebagai masalah.

Pemeriksaan Pengetahuan: Biaya CAI

Dibandingkan dengan respons LLM langsung melalui satu panggilan, berapa banyak panggilan LLM yang diperlukan oleh satu putaran CAI (generate → critique → revise)?

Rangkuman: Menerapkan CAI dalam Aplikasi

CAI tingkat aplikasi menerapkan siklus tiga langkah dengan tiga fungsi: generate(), critique(), dan revise(). Satu putaran menambahkan 2 panggilan LLM; 2+ putaran digunakan untuk situasi berisiko tinggi. Optimalkan biaya dengan menggunakan model yang lebih kecil untuk kritik, mengklasifikasikan risiko permintaan agar CAI diterapkan secara selektif, dan menjalankan permintaan secara asinkron. Catat respons awal dan akhir untuk mengukur seberapa sering revisi benar-benar terjadi. Terapkan CAI pada domain yang kritis terhadap kepatuhan dan berisiko tinggi; jangan gunakan untuk aplikasi berisiko rendah yang sensitif terhadap latensi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menerapkan CAI dalam Aplikasi” gratis?

Ya — teks lengkap “Menerapkan CAI dalam Aplikasi” 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 “Menerapkan CAI dalam Aplikasi”?

Tambahkan rangkaian kritik dan revisi ke pipeline kecerdasan buatan produksi. 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 “Menerapkan CAI dalam Aplikasi” 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. Prinsip CAI dan Prompt Kritik
  2. Pola Kritik Mandiri dan Revisi
  3. Ketegangan antara Tidak Membahayakan dan Membantu
  4. Menerapkan CAI dalam Aplikasi
← Kembali ke AI Prompt Engineering