0Pricing
AI Prompt Engineering · บทเรียน

รูปแบบผลลัพธ์สู่อินพุต

ดึงข้อมูลที่มีโครงสร้างจากขั้นตอนที่ 1 เพื่อส่งเข้าไปยังขั้นตอนที่ 2

รูปแบบผลลัพธ์สู่อินพุต เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

ความท้าทายหลัก: การสกัดและการแทรกข้อมูล

ในสายการเชื่อมพรอมต์ ขั้นตอนที่ 1 จะสร้างข้อความขึ้นมา ส่วนขั้นตอนที่ 2 ต้องการข้อมูลเฉพาะบางส่วนจากข้อความนั้นเป็นข้อมูลป้อนเข้า ความท้าทายคือการสกัดฟิลด์ที่ถูกต้องจากผลลัพธ์ของขั้นตอนที่ 1 และแทรกลงในพรอมต์ของขั้นตอนที่ 2 ได้อย่างแม่นยำและเป็นระเบียบ

หากขั้นตอนที่ 1 ส่งคืนข้อความร้อยแก้วที่ไม่มีโครงสร้าง การสกัดข้อมูลจะเปราะบาง วิธีแก้คือออกแบบพรอมต์ของขั้นตอนที่ 1 ให้ส่งคืนผลลัพธ์ที่มีโครงสร้าง ซึ่งโดยทั่วไปคือ JSON ที่สามารถแยกวิเคราะห์และแทรกด้วยโปรแกรมได้

การออกแบบขั้นตอนที่ 1 สำหรับการประมวลผลโดยเครื่อง

พรอมต์ที่มีจุดประสงค์เพื่อป้อนข้อมูลเข้าสู่กระบวนการต่อเนื่องควรส่งออกข้อมูลแบบมีโครงสร้างเสมอ โปรดระบุสคีมา JSON ที่แน่นอนในพรอมต์:

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

เมื่อขั้นตอนที่ 1 ส่งคืน JSON แล้ว ให้แยกวิเคราะห์ด้วย Python และดึงช่องข้อมูลที่จำเป็นสำหรับขั้นตอนที่ 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'])

การแทรกช่องข้อมูลที่แยกออกมาเข้าสู่ขั้นตอนที่ 2

หลังจากแยกวิเคราะห์แล้ว ให้แทรกช่องข้อมูลเฉพาะลงในแม่แบบพรอมต์ของขั้นตอนที่ 2 โปรดใช้สตริงแบบ f ของ Python หรือตัวแปรแม่แบบ:

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

กระบวนการต่อเนื่องสองขั้นตอนฉบับสมบูรณ์

การรวมการแยกวิเคราะห์และการแทรกข้อมูลเข้าไว้ในกระบวนการต่อเนื่องสองขั้นตอนที่สมบูรณ์:

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

การจัดการการแทรก JSON แบบซ้อน

เมื่อขั้นตอนที่ 1 ส่งคืนออบเจ็กต์ซ้อนกัน ให้ดึงเฉพาะสิ่งที่ขั้นตอนที่ 2 ต้องการ เพื่อให้พรอมต์ที่แทรกข้อมูลมีความกระชับ:

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)

การหลีกเลี่ยงการแทรกข้อมูลมากเกินไป

ข้อผิดพลาดที่พบบ่อยคือการแทรกผลลัพธ์ทั้งหมดของขั้นตอนที่ 1 ลงในขั้นตอนที่ 2 วิธีนี้ทำให้พรอมต์ของขั้นตอนที่ 2 มีขนาดใหญ่เกินไป และอาจทำให้โมเดลสับสนด้วยช่องข้อมูลที่ไม่เกี่ยวข้อง

  • ไม่ดี: f'Here is the analysis: {str(all_of_step1_output)}'
  • ดี: ดึงเฉพาะช่องข้อมูลที่ขั้นตอนที่ 2 ต้องการ แล้วแทรกพร้อมป้ายกำกับที่ชัดเจน

ขั้นตอนที่ 2 ควรได้รับข้อมูลตรงตามที่ต้องการเท่านั้น — ไม่มากหรือน้อยกว่านั้น

การแตกแขนงแบบมีเงื่อนไขตามผลลัพธ์

ผลลัพธ์ที่แยกวิเคราะห์จากขั้นตอนที่ 1 สามารถควบคุมได้ว่าพรอมต์ของขั้นตอนที่ 2 ใดจะทำงาน ซึ่งจะเปลี่ยนกระบวนการต่อเนื่องแบบเส้นตรงให้เป็นกระบวนการต่อเนื่องแบบแตกแขนง:

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

การสะสมสถานะข้ามขั้นตอน

สำหรับกระบวนการต่อเนื่องที่ยาวขึ้น ให้รักษาพจนานุกรมสถานะที่สะสมผลลัพธ์จากแต่ละขั้นตอนไว้:

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

สร้างเครื่องมือช่วยแยกข้อมูลที่นำกลับมาใช้ซ้ำได้สำหรับโครงสร้างพื้นฐานของกระบวนการต่อเนื่อง:

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

การทดสอบรูปแบบผลลัพธ์สู่ข้อมูลเข้า

กระบวนการต่อเนื่องจากผลลัพธ์สู่ข้อมูลเข้าต้องได้รับการทดสอบสองระดับ:

  • ทดสอบแต่ละขั้นตอนแบบหน่วย: ขั้นตอนที่ 1 ส่งคืน JSON ที่แยกวิเคราะห์ได้อย่างน่าเชื่อถือหรือไม่ ขั้นตอนที่ 2 สร้างผลลัพธ์ที่ถูกต้องสำหรับข้อมูลเข้าที่แยกออกมาตามที่กำหนดหรือไม่
  • ทดสอบการผสานรวมของกระบวนการต่อเนื่อง: กระบวนการต่อเนื่องตั้งแต่ต้นจนจบสร้างผลลัพธ์ที่ถูกต้องสำหรับข้อมูลเข้าที่เป็นตัวแทนหรือไม่

ทำให้พรอมต์ของแต่ละขั้นตอนมีผลลัพธ์แน่นอน โดยใช้ค่าอุณหภูมิเป็น 0 สำหรับขั้นตอนการจัดประเภทและการแยกข้อมูลที่ต้องการความสม่ำเสมอ

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

ตรวจสอบความเข้าใจ

รูปแบบผลลัพธ์ที่แนะนำสำหรับขั้นตอนที่ 1 ของกระบวนการต่อเนื่องของพรอมต์คืออะไร เมื่อผลลัพธ์จะถูกดึงไปใช้ในโปรแกรมและแทรกเข้าสู่ขั้นตอนที่ 2

ผลลัพธ์สู่ข้อมูลเข้า — ประเด็นสำคัญ

รูปแบบผลลัพธ์สู่ข้อมูลเข้าที่เชื่อถือได้คือสิ่งที่ทำให้กระบวนการต่อเนื่องของพรอมต์พร้อมใช้งานจริง:

  • ออกแบบพรอมต์ของขั้นตอนที่ 1 ให้ส่งคืน JSON พร้อมสคีมาที่ระบุไว้อย่างชัดเจน — ไม่ใช่ร้อยแก้ว
  • แยกวิเคราะห์ผลลัพธ์ของขั้นตอนที่ 1 ก่อนแทรกข้อมูล: ลบเครื่องหมายครอบโค้ดมาร์กดาวน์ และจัดการข้อผิดพลาดการถอดรหัส JSON
  • แทรกเฉพาะช่องข้อมูลที่ขั้นตอนที่ 2 ต้องการ — หลีกเลี่ยงการแทรกข้อมูลมากเกินไป
  • ใช้พจนานุกรมสถานะเพื่อสะสมและส่งต่อข้อมูลข้ามกระบวนการต่อเนื่องที่ยาวขึ้น
  • ผลลัพธ์ที่แยกวิเคราะห์แล้วสามารถใช้ควบคุมการแตกแขนงแบบมีเงื่อนไข เพื่อส่งต่อไปยังพรอมต์เฉพาะทางของขั้นตอนที่ 2
  • สร้างเครื่องมือช่วยแยกข้อมูล JSON ที่นำกลับมาใช้ซ้ำได้และจัดการกับความไม่สม่ำเสมอของผลลัพธ์จากโมเดล
  • ทดสอบแต่ละขั้นตอนแบบหน่วยอย่างอิสระ จากนั้นทดสอบการผสานรวมของกระบวนการต่อเนื่องทั้งหมด

คำถามที่พบบ่อย

บทเรียน “รูปแบบผลลัพธ์สู่อินพุต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รูปแบบผลลัพธ์สู่อินพุต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบผลลัพธ์สู่อินพุต”

ดึงข้อมูลที่มีโครงสร้างจากขั้นตอนที่ 1 เพื่อส่งเข้าไปยังขั้นตอนที่ 2 คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “รูปแบบผลลัพธ์สู่อินพุต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม

ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พรอมป์ตเชนคืออะไร
  2. รูปแบบผลลัพธ์สู่อินพุต
  3. เชนการแปลงแบบลำดับ
  4. การจัดการข้อผิดพลาดในพรอมป์ตเชน
← กลับไปที่ AI Prompt Engineering