0Pricing
AI Prompt Engineering · Ders

Çıktıdan Girdiye Kalıplar

2. adıma aktarmak üzere 1. adımdan yapılandırılmış verileri çıkarın.

Çıktıdan Girdiye Kalıplar, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Temel Zorluk: Çıkarma ve Ekleme

Bir istem zincirinde 1. adım metin üretir. 2. adım, bu metnin belirli bir parçasını girdi olarak gerektirir. Zorluk, 1. adımın çıktısından tam olarak doğru alanı güvenilir biçimde çıkarmak ve bunu 2. adımın istemine temiz bir şekilde eklemektir.

1. adım yapılandırılmamış düzyazı döndürürse çıkarma işlemi kırılgan olur. Çözüm, 1. adımın yapılandırılmış çıktı — genellikle program aracılığıyla ayrıştırılıp eklenebilen JSON — döndürmesini sağlayacak istemler tasarlamaktır.

Makine Tarafından İşlenmek Üzere 1. Adımı Tasarlama

Bir zincire girdi olarak verilecek bir istem her zaman yapılandırılmış veri döndürmelidir. İstemde tam JSON şemasını belirtin:

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)

1. Adım Çıktısını Ayrıştırma

1. Adım JSON döndürdüğünde, bunu Python'da ayrıştırın ve 2. Adım için gereken alanları çıkarın:

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'])

Çıkarılan Alanları 2. Adıma Ekleme

Ayrıştırdıktan sonra belirli alanları 2. Adımın istem şablonuna ekleyin. Python f dizelerini veya şablon değişkenlerini kullanın:

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))

Eksiksiz İki Adımlı Zincir

Ayrıştırma ve eklemeyi eksiksiz iki adımlı bir işlem hattında birleştirme:

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.'))

İç İçe JSON Eklemeyi Ele Alma

1. Adım iç içe nesneler döndürdüğünde, eklenen istemi kısa tutmak için yalnızca 2. Adımın ihtiyaç duyduğu bilgileri çıkarın:

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)

Aşırı Eklemekten Kaçınma

Yaygın bir hata, 1. Adımın tüm çıktısını 2. Adıma eklemektir. Bu, 2. Adımın istemini gereksiz yere büyütür ve modeli ilgisiz alanlarla şaşırtabilir.

  • Kötü: f'Here is the analysis: {str(all_of_step1_output)}'
  • İyi: Yalnızca 2. Adımın ihtiyaç duyduğu belirli alanları çıkarın ve bunları açık etiketlerle ekleyin

2. Adım tam olarak ihtiyaç duyduğu bilgiyi almalıdır — ne eksik ne fazla.

Çıktıya Dayalı Koşullu Dallanma

Ayrıştırılmış 1. Adım çıktısı, hangi 2. Adım isteminin çalıştırılacağını belirleyebilir; böylece doğrusal bir zincir dallanan bir işlem hattına dönüşür:

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.'))

Adımlar Arasında Durum Biriktirme

Daha uzun zincirlerde, her adımdan gelen çıktıları biriktiren bir durum sözlüğü tutun:

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'])

JSON Çıkarma Araçları

Zincir altyapınız için yeniden kullanılabilir bir çıkarma aracı oluşturun:

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"}'))

Çıktıdan Girdiye Aktarım Kalıplarını Sınama

Çıktıdan girdiye aktarım işlem hatları iki düzeyde sınama gerektirir:

  • Her adımı birim olarak sınayın: 1. Adım güvenilir biçimde ayrıştırılabilir JSON döndürüyor mu? 2. Adım, çıkarılan belirli bir girdi için doğru çıktıyı üretiyor mu?
  • Zinciri tümleşim olarak sınayın: Uçtan uca işlem hattı, temsili girdiler için doğru sonuçlar üretiyor mu?

Tutarlılığın önemli olduğu sınıflandırma ve çıkarma adımlarında sıcaklık=0 kullanarak adım istemlerini belirlenimci tutun.

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')

Hızlı Kontrol

Sonucun program aracılığıyla çıkarılıp 2. Adıma ekleneceği bir istem zincirinde, 1. Adım için önerilen çıktı biçimi nedir?

Çıktıdan Girdiye Aktarım — Temel Çıkarımlar

İstem zincirlerini üretime hazır hâle getiren şey, güvenilir çıktıdan girdiye aktarım kalıplarıdır:

  • 1. Adım istemlerini, düzyazı yerine açık bir şemaya sahip JSON döndürecek şekilde tasarlayın
  • Eklemeye geçmeden önce 1. Adımın çıktısını ayrıştırın: Markdown kod çitlerini kaldırın, JSON ayrıştırma hatasını ele alın
  • Yalnızca 2. Adımın ihtiyaç duyduğu belirli alanları ekleyin — aşırı eklemekten kaçının
  • Daha uzun zincirlerde verileri biriktirmek ve aktarmak için durum sözlükleri kullanın
  • Ayrıştırılmış çıktı, uzmanlaşmış 2. Adım istemlerine yönlendirmek üzere koşullu dallanmayı yönlendirebilir
  • Model çıktılarındaki tutarsızlıkları ele alan yeniden kullanılabilir JSON çıkarma araçları oluşturun
  • Her adımı bağımsız olarak birim sınamasından geçirin, ardından tüm işlem hattını tümleşim sınamasından geçirin

Sıkça Sorulan Sorular

“Çıktıdan Girdiye Kalıplar” dersi ücretsiz mi?

Evet — “Çıktıdan Girdiye Kalıplar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Çıktıdan Girdiye Kalıplar” dersinde ne öğreneceğim?

2. adıma aktarmak üzere 1. adımdan yapılandırılmış verileri çıkarın. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Çıktıdan Girdiye Kalıplar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İstem Zincirleme Nedir?
  2. Çıktıdan Girdiye Kalıplar
  3. Sıralı Dönüşüm Zincirleri
  4. İstem Zincirlerinde Hata Yönetimi
← AI Prompt Engineering Sayfasına Dön