CAI in Anwendungen implementieren
Kritik-Überarbeitungs-Schleifen zu produktiven KI-Pipelines hinzufügen.
CAI in Anwendungen implementieren ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
CAI als Muster auf Anwendungsebene
Constitutional AI war ursprünglich eine Technik für die Trainingsphase, aber derselbe Kritik-Überarbeitungs-Zyklus kann zur Laufzeit in Ihren Anwendungen implementiert werden. Sie müssen kein eigenes Modell trainieren — Sie verwenden API-Aufrufe, um den Zyklus umzusetzen.
CAI auf Anwendungsebene ist für Szenarien mit Ausgaben mit hohen Risiken nützlich, in denen Sie zusätzlich zu den integrierten Schutzmechanismen des Modells ein Sicherheitsnetz benötigen.
Die drei benötigten Funktionen
Eine CAI-Implementierung benötigt drei kombinierbare Funktionen: generate(), critique() und revise(). Jede davon ist ein separater LLM-Aufruf. Sie verbinden sie in der Anwendungslogik miteinander.
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].textDen Zyklus miteinander verbinden
Die zentrale Anwendungsfunktion ruft generate, critique und revise der Reihe nach auf. Ein einzelner CAI-Durchlauf fügt der anfänglichen Generierung zwei zusätzliche LLM-Aufrufe hinzu.
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)Entscheidung: 1 oder N Durchläufe
Wie viele Kritik-Überarbeitungs-Durchläufe sollten Sie ausführen? Als Faustregel gilt:
- 1 Durchlauf: Ausreichend für die meisten Anwendungsfälle der Sicherheitsprüfung und Qualitätsverbesserung
- 2 Durchläufe: Wenn die erste Kritik erhebliche Probleme gefunden hat, die einen zweiten Durchlauf rechtfertigen
- 3 oder mehr Durchläufe: Selten erforderlich — abnehmender Nutzen, hohe Kosten, Risiko einer Überkorrektur
Ein praktischer Ansatz: Führen Sie immer 1 Durchlauf aus und lösen Sie nur dann einen zweiten aus, wenn die erste Kritik schwerwiegende Probleme festgestellt hat.
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])Kosten von CAI-Zyklen
Jede Iteration einer CAI-Schleife fügt 2 zusätzliche LLM-Aufrufe hinzu (Kritik + Überarbeitung). Bei großer Skalierung vervielfacht dies Ihre Tokenkosten:
- 1 Durchlauf: 3-mal so viele Tokens wie eine direkte Antwort
- 2 Durchläufe: 5-mal so viele Tokens
- 3 Durchläufe: 7-mal so viele Tokens
Mindern Sie dies, indem Sie ein kleineres Modell für die Kritik verwenden, Kritik-Ergebnisse zwischenspeichern und CAI nur für Anfragen aus Kategorien mit hohem Risiko auslösen.
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 revisedEinen Klassifikator für Anfragerisiken erstellen
Wenden Sie CAI selektiv an, indem Sie zunächst das Risiko einer Anfrage klassifizieren. Anfragen mit geringem Risiko erhalten direkte Antworten; Anfragen mit hohem Risiko durchlaufen den Kritik-Überarbeitungs-Zyklus. So schaffen Sie ein Gleichgewicht zwischen Sicherheit, Kosten und Latenz.
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)CAI-Ausgaben protokollieren und überwachen
CAI-Systeme in der Produktion sollten sowohl die anfänglichen als auch die endgültigen Antworten protokollieren. Dadurch können Sie messen, wie oft die Kritik Überarbeitungen auslöst, wiederkehrende Fehlermuster erkennen und Antworten auf Compliance prüfen.
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%})')Asynchrones CAI für höheren Durchsatz
Implementieren Sie CAI für Anwendungen mit hohem Durchsatz asynchron mithilfe von asyncio. Sie können die Kritik und die anschließende Generierung auch parallel ausführen, wenn Sie mehrere Anfragen verarbeiten.
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']))Ihre CAI-Pipeline per Unit-Tests prüfen
Testen Sie Ihre CAI-Pipeline mit bekannten adversarialen Eingaben. Überprüfen Sie, dass schädliche Anfragen überarbeitet werden, harmlose Anfragen nicht übermäßig überarbeitet werden und die endgültige Ausgabe besser ist als die anfängliche.
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.pyWann CAI nicht das richtige Werkzeug ist
CAI-Schleifen sind nicht immer die richtige Lösung. Erwägen Sie Alternativen, wenn:
- die Latenz entscheidend ist: 3 LLM-Aufrufe fügen 3–10 Sekunden hinzu
- die Kosten begrenzt sind: Die dreifachen Tokenkosten können bei großer Skalierung untragbar sein
- das Modell bereits gut mit Sicherheit umgeht: CAI kann zu übermäßiger Vorsicht führen
- Sie deterministische Sicherheit benötigen: Verwenden Sie Schlüsselwortfilter oder Klassifikatoren statt probabilistischer LLM-Kritik
Verwenden Sie CAI für: die Generierung von Inhalten mit hohen Risiken, Compliance-sensitive Bereiche und Ausgaben, bei denen die Qualität entscheidend ist.
Ihren Prinzipiensatz weiterentwickeln
Ihre CAI-Prinzipien sollten sich anhand dessen weiterentwickeln, was die Kritik in der Produktion feststellt. Wenn die Kritik die anfängliche Antwort nur selten ändert, sind Ihre Prinzipien möglicherweise zu vage. Wenn die Kritik immer dasselbe Problem markiert, aktualisieren Sie den Generierungsschritt, damit es von vornherein vermieden wird.
Prüfen Sie die Kritikprotokolle wöchentlich: Suchen Sie nach wiederkehrenden Kritikmustern und verstärken Sie dann entweder Ihren System-Prompt für die Generierung, um diese Probleme zu verhindern, oder präzisieren Sie das Prinzip dahingehend, was als Problem gilt.
Wissensprüfung: CAI-Kosten
Wie viele LLM-Aufrufe erfordert ein CAI-Durchlauf (generate → critique → revise) im Vergleich zu einer direkten LLM-Antwort mit nur einem Aufruf?
Rückblick: CAI in Anwendungen implementieren
CAI auf Anwendungsebene implementiert den dreistufigen Zyklus mit drei Funktionen: generate(), critique() und revise(). Ein Durchlauf fügt 2 zusätzliche LLM-Aufrufe hinzu; 2 oder mehr Durchläufe sind für Situationen mit hohem Risiko vorgesehen. Optimieren Sie die Kosten, indem Sie ein kleineres Modell für die Kritik verwenden, das Anfragerisiko klassifizieren, um CAI selektiv anzuwenden, und Anfragen asynchron ausführen. Protokollieren Sie sowohl die anfänglichen als auch die endgültigen Antworten, um zu messen, wie oft tatsächlich eine Überarbeitung erfolgt. Setzen Sie CAI in Compliance-kritischen und risikoreichen Bereichen ein; überspringen Sie es bei Anwendungen mit geringem Risiko und strengen Latenzanforderungen.
Häufig gestellte Fragen
Ist die Lektion „CAI in Anwendungen implementieren“ kostenlos?
Ja — der vollständige Text von „CAI in Anwendungen implementieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „CAI in Anwendungen implementieren“?
Kritik-Überarbeitungs-Schleifen zu produktiven KI-Pipelines hinzufügen. Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Prompt Engineering zu starten?
Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „CAI in Anwendungen implementieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?
Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- CAI-Prinzipien und Kritik-Prompts
- Muster für Selbstkritik und Überarbeitung
- Spannungsfeld zwischen Harmlosigkeit und Hilfsbereitschaft
- CAI in Anwendungen implementieren