0Pricing
AI Prompt Engineering · Pelajaran

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

  1. Apa Itu Rantai Perintah?
  2. Pola Keluaran-ke-Masukan
  3. Rantai Transformasi Berurutan
  4. Penanganan Galat dalam Rantai Perintah
← Kembali ke AI Prompt Engineering