Pola Keluaran-ke-Masukan
Ekstrak data terstruktur dari Langkah 1 untuk dimasukkan ke Langkah 2.
Pola Keluaran-ke-Masukan adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 2 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.
Tantangan Utama: Mengekstrak dan Menyisipkan
Dalam perantaian prompt, Langkah 1 menghasilkan teks. Langkah 2 memerlukan bagian tertentu dari teks tersebut sebagai input. Tantangannya adalah mengekstrak bidang yang tepat dari output Langkah 1 secara andal dan menyisipkannya dengan rapi ke dalam prompt Langkah 2.
Jika Langkah 1 mengembalikan prosa yang tidak terstruktur, ekstraksi menjadi rapuh. Solusinya adalah merancang prompt Langkah 1 agar mengembalikan output terstruktur — biasanya JSON — yang dapat diurai dan disisipkan secara terprogram.
Merancang Langkah 1 untuk Konsumsi Mesin
Perintah yang ditujukan untuk memasok data ke suatu rantai harus selalu menghasilkan data terstruktur. Tentukan skema JSON yang tepat di dalam perintah:
import anthropic
import json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
step1_prompt = '''
<task>
Analyze the customer review below.
</task>
<review>
The onboarding was confusing and took 3 hours. The core feature works great though.
</review>
<output_format>
Return ONLY a JSON object. No other text.
{
"sentiment": "positive|negative|mixed",
"issues": ["string"],
"positives": ["string"],
"priority": "high|medium|low"
}
</output_format>
'''
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=300,
messages=[{'role': 'user', 'content': step1_prompt}]
)
print(response.content[0].text)Mengurai Output Langkah 1
Setelah Langkah 1 mengembalikan JSON, uraikan JSON tersebut di Python dan ambil bidang yang diperlukan untuk Langkah 2:
import json
def parse_step1_output(raw_text):
# Models sometimes wrap JSON in extra text -- strip it
text = raw_text.strip()
# Find the first { and last } to extract JSON object
start = text.find("{")
end = text.rfind("}")
if start != -1 and end != -1 and end > start:
text = text[start:end+1]
try:
return json.loads(text)
except json.JSONDecodeError as e:
raise ValueError("Step 1 output is not valid JSON: " + str(e))
# Example usage
raw = '{"sentiment": "mixed", "issues": ["confusing onboarding"], "positives": ["core feature"], "priority": "high"}'
parsed = parse_step1_output(raw)
print(parsed['issues'])
print(parsed['priority'])Menyisipkan Bidang yang Diekstrak ke Langkah 2
Setelah menguraikannya, sisipkan bidang tertentu ke dalam templat perintah Langkah 2. Gunakan f-string Python atau variabel templat:
def build_step2_prompt(parsed_step1):
issues = '\n'.join(f'- {issue}' for issue in parsed_step1['issues'])
priority = parsed_step1['priority']
sentiment = parsed_step1['sentiment']
return f'''
<context>
A customer review was analyzed. Overall sentiment: {sentiment}. Priority: {priority}.
</context>
<task>
Write a customer support response addressing these specific issues:
{issues}
Acknowledge the positives before addressing the issues.
</task>
<output_format>
Plain text response, 3 sentences maximum, professional tone.
</output_format>
'''
parsed = {'sentiment': 'mixed', 'issues': ['confusing onboarding'], 'priority': 'high', 'positives': ['core feature']}
print(build_step2_prompt(parsed))Rantai Dua Langkah Lengkap
Menggabungkan penguraian dan penyisipan menjadi alur kerja dua langkah yang lengkap:
import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def call(prompt, max_tokens=500):
r = client.messages.create(
model='claude-opus-4-5', max_tokens=max_tokens,
messages=[{'role': 'user', 'content': prompt}]
)
return r.content[0].text
def review_response_chain(review_text):
# Step 1: Analyze
step1 = call(f'Analyze this review. Return JSON: {{"sentiment": str, "issues": [str], "priority": str}}\n\nReview: {review_text}')
parsed = json.loads(step1.strip())
# Inject into Step 2
issues_str = ', '.join(parsed['issues'])
step2_prompt = f'Write a 2-sentence support reply. Issues to address: {issues_str}. Priority: {parsed["priority"]}.'
# Step 2: Draft response
reply = call(step2_prompt)
return reply
print(review_response_chain('Login is broken. App crashes on startup.'))Menangani Penyisipan JSON Bertingkat
Jika Langkah 1 mengembalikan objek bertingkat, ambil hanya bagian yang diperlukan Langkah 2 agar perintah yang disisipi tetap ringkas:
step1_output = {
'document': {
'title': 'Q3 Report',
'sections': [
{'name': 'Revenue', 'value': '$4.2M', 'change': '+12%'},
{'name': 'Users', 'value': '85,000', 'change': '+5%'},
{'name': 'Churn', 'value': '3.2%', 'change': '-0.8%'}
]
},
'summary': 'Strong revenue quarter with moderate user growth.'
}
# Extract only what Step 2 needs — not the full nested object
def extract_for_step2(data):
sections = data['document']['sections']
metrics = '\n'.join(f"{s['name']}: {s['value']} ({s['change']})" for s in sections)
return {
'metrics': metrics,
'summary': data['summary']
}
step2_input = extract_for_step2(step1_output)
print(step2_input)Menghindari Penyisipan Berlebihan
Kesalahan umum adalah menyisipkan seluruh output Langkah 1 ke Langkah 2. Hal ini membuat perintah Langkah 2 membengkak dan dapat membingungkan model dengan bidang yang tidak relevan.
- Buruk:
f'Here is the analysis: {str(all_of_step1_output)}' - Baik: Ambil hanya bidang tertentu yang diperlukan Langkah 2 dan sisipkan dengan label yang jelas
Langkah 2 harus menerima tepat informasi yang dibutuhkannya—tidak lebih dan tidak kurang.
Percabangan Bersyarat Berdasarkan Output
Output Langkah 1 yang telah diurai dapat menentukan perintah Langkah 2 yang dijalankan—mengubah rantai linear menjadi alur kerja bercabang:
def route_chain(user_message):
# Step 1: Classify intent
classification = json.loads(call(
f'Classify this message as billing, technical, or general. Return JSON: {{"intent": str}}\n\nMessage: {user_message}'
))
intent = classification['intent']
# Route to specialized Step 2 prompt
if intent == 'billing':
prompt = f'You are a billing specialist. Address: {user_message}'
elif intent == 'technical':
prompt = f'You are a senior engineer. Provide technical guidance for: {user_message}'
else:
prompt = f'You are a general support agent. Respond to: {user_message}'
return call(prompt)
print(route_chain('My invoice shows a wrong amount.'))Mengakumulasi Status di Seluruh Langkah
Untuk rantai yang lebih panjang, pertahankan kamus status yang mengakumulasi output dari setiap langkah:
def run_pipeline(initial_input):
state = {'input': initial_input}
# Step 1
state['entities'] = json.loads(call(
f'Extract entities as JSON: {{"people": [], "companies": []}}\n\n{state["input"]}'
))
# Step 2 uses entities from Step 1
companies_str = ', '.join(state['entities'].get('companies', []))
state['company_types'] = call(
f'Classify these companies as startup/enterprise: {companies_str}'
)
# Step 3 uses output from Steps 1 and 2
state['summary'] = call(
f'Write a 2-sentence summary.\nEntities: {state["entities"]}\nClassifications: {state["company_types"]}'
)
return state
result = run_pipeline('Apple and OpenAI announced a partnership with Elon Musk.')
print(result['summary'])Utilitas Ekstraksi JSON
Buat utilitas ekstraksi yang dapat digunakan kembali untuk infrastruktur rantai Anda:
import re, json
def extract_json(text):
"Extract JSON from model output, handling extra text around the object."
# Try direct parse first
try:
return json.loads(text.strip())
except json.JSONDecodeError:
pass
# Try finding JSON object by bracket matching
start = text.find("{")
end = text.rfind("}")
if start != -1 and end != -1 and end > start:
try:
return json.loads(text[start:end+1])
except json.JSONDecodeError:
pass
# Try finding JSON array
start = text.find("[")
end = text.rfind("]")
if start != -1 and end != -1 and end > start:
try:
return json.loads(text[start:end+1])
except json.JSONDecodeError:
pass
raise ValueError("Could not extract JSON from: " + text[:200])
print(extract_json('{"key": "value"}'))Menguji Pola Output-ke-Input
Alur kerja output-ke-input memerlukan dua tingkat pengujian:
- Uji setiap langkah secara terpisah: Apakah Langkah 1 selalu mengembalikan JSON yang dapat diurai? Apakah Langkah 2 menghasilkan output yang tepat untuk input hasil ekstraksi tertentu?
- Uji integrasi rantai: Apakah alur kerja menyeluruh menghasilkan hasil yang benar untuk input yang mewakili kondisi nyata?
Jaga agar perintah setiap langkah bersifat deterministik dengan menggunakan temperature=0 untuk langkah klasifikasi dan ekstraksi yang memerlukan konsistensi.
def test_step1(review_text, expected_sentiment):
raw = call(f'Analyze review. Return JSON: {{"sentiment": str}}\n\n{review_text}')
parsed = extract_json(raw)
assert parsed['sentiment'] == expected_sentiment, f'Expected {expected_sentiment}, got {parsed["sentiment"]}'
print(f'PASS: sentiment={parsed["sentiment"]}')
# Run unit test for Step 1
test_step1('The product is excellent!', 'positive')
test_step1('This is terrible.', 'negative')Pemeriksaan Cepat
Apa format output yang direkomendasikan untuk Langkah 1 dalam suatu rantai perintah jika hasilnya akan diekstrak dan disisipkan secara terprogram ke Langkah 2?
Output-ke-Input—Inti Pembelajaran
Pola output-ke-input yang andal membuat rantai perintah siap digunakan dalam sistem produksi:
- Rancang perintah Langkah 1 agar mengembalikan JSON dengan skema yang dinyatakan secara jelas—bukan prosa
- Urai output Langkah 1 sebelum menyisipkannya: hapus pembatas markdown dan tangani JSONDecodeError
- Sisipkan hanya bidang tertentu yang diperlukan Langkah 2—hindari penyisipan berlebihan
- Gunakan kamus status untuk mengakumulasi dan meneruskan data di seluruh rantai yang lebih panjang
- Output yang telah diurai dapat mengarahkan percabangan bersyarat untuk meneruskan proses ke perintah Langkah 2 khusus
- Buat utilitas ekstraksi JSON yang dapat digunakan kembali dan menangani ketidakkonsistenan output model
- Uji setiap langkah secara terpisah, lalu lakukan uji integrasi pada seluruh alur kerja
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Keluaran-ke-Masukan” gratis?
Ya — teks lengkap “Pola Keluaran-ke-Masukan” 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 “Pola Keluaran-ke-Masukan”?
Ekstrak data terstruktur dari Langkah 1 untuk dimasukkan ke Langkah 2. 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 2 dari 4.
Berapa lama pelajaran “Pola Keluaran-ke-Masukan” 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
- Apa Itu Rantai Perintah?
- Pola Keluaran-ke-Masukan
- Rantai Transformasi Berurutan
- Penanganan Galat dalam Rantai Perintah