AI Prompt Engineering · บทเรียน

การวินิจฉัยผลลัพธ์ที่ไม่คาดคิด

จำแนกรูปแบบความล้มเหลว: คำตอบผิด รูปแบบผิด นอกหัวข้อ และการสร้างข้อมูลหลอน

บทเรียน 1 จาก 413 ขั้นตอน

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

เมื่อพรอมต์ล้มเหลว

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

ประเภทความล้มเหลวที่ 1: คำตอบผิด

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

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

  • สาเหตุ: จุดตัดข้อมูลฝึกสอน ข้อเท็จจริงที่พบได้ยาก หรือข้อผิดพลาดในการให้เหตุผลหลายขั้นตอน
  • การตรวจจับ: เปรียบเทียบกับข้อมูลอ้างอิงที่ถูกต้อง ตรวจสอบโดยมนุษย์ หรือเรียก LLM เพื่อตรวจสอบ
# Example: wrong answer failure
prompt = 'What year was Python first released?'
response = 'Python was first released in 1994.'  # Wrong — it was 1991

# Ground truth check
GROUND_TRUTH = '1991'
correct = GROUND_TRUTH in response
print(f'Correct: {correct}')  # False

ประเภทความล้มเหลวที่ 2: รูปแบบผิด

ความล้มเหลวแบบรูปแบบผิดเกิดขึ้นเมื่อโมเดลตอบคำถามถูกต้องและให้ข้อมูลถูกต้อง แต่ไม่ปฏิบัติตามคำสั่งด้านรูปแบบ

ตัวอย่างเช่น ส่งคืนข้อความธรรมดาเมื่อขอ JSON เพิ่มมาร์กดาวน์เมื่อกำหนดให้ใช้ข้อความธรรมดา หรือส่งคืนรายการเมื่อขอค่าเดียว

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

response_text = 'Sure! Here is the result: {"name": "Alice", "age": 30}'

try:
    data = json.loads(response_text)
    print('Format OK:', data)
except json.JSONDecodeError as e:
    print(f'FORMAT FAILURE: {e}')
    # 'Sure! Here is the result:' prefix broke JSON parsing

ประเภทความล้มเหลวที่ 3: คำตอบไม่ตรงประเด็น

ความล้มเหลวแบบไม่ตรงประเด็นหมายความว่าโมเดลตอบคำถามคนละข้อกับที่ถาม คำตอบอาจถูกต้องตามข้อเท็จจริงและมีรูปแบบดี แต่ไม่ตอบเจตนาที่แท้จริงของผู้ใช้

ตัวอย่างเช่น ขอฟังก์ชันภาษาไพธอน แต่ได้รับฟังก์ชัน JavaScript ขอคำตอบหนึ่งบรรทัด แต่ได้รับเรียงความฉบับเต็ม หรือขอให้แก้ข้อบกพร่อง แต่ได้รับคำอธิบายข้อบกพร่องแทนวิธีแก้

  • สาเหตุ: คำสั่งกำกวม บริบทขัดแย้งกัน หรืองานเบี่ยงเบนระหว่างการสนทนาที่ยาว
# Off-topic example
prompt = 'Write a Python function that reverses a list.'
response = '''
In JavaScript, you can reverse an array like this:
const reversed = arr.reverse();
'''

# Detection: check that output contains the correct language keyword
def check_language(response, expected_lang='def '):
    if expected_lang not in response:
        print(f'OFF-TOPIC FAILURE: expected {expected_lang} in response')
        return False
    return True

check_language(response)  # False — no Python def

ประเภทความล้มเหลวที่ 4: การสร้างข้อมูลหลอน

การสร้างข้อมูลหลอนเป็นความล้มเหลวที่อันตรายที่สุด โมเดลแต่งข้อเท็จจริงที่ไม่มีอยู่จริงขึ้นมา ข้อมูลเหล่านี้ดูน่าเชื่อถือและมีความมั่นใจ จึงสังเกตได้ยาก

ตัวอย่างเช่น การอ้างอิงที่แต่งขึ้น (ชื่อบทความฟังดูเหมือนมีอยู่จริงแต่ไม่มีอยู่จริง) จุดปลายทาง API ที่แต่งขึ้น สถิติปลอม หรือบุคคลที่ไม่มีอยู่จริง

  • สาเหตุ: โมเดลเติมช่องว่างทางความรู้ด้วยข้อความที่ดูเป็นไปได้จากการจับคู่รูปแบบ
  • การตรวจจับ: ตรวจสอบข้อเท็จจริงกับแหล่งข้อมูลที่เชื่อถือได้ ตรวจสอบการอ้างอิงข้ามแหล่ง และทดสอบการเรียก API
# Hallucination detection via external verification
import requests

def verify_doi(doi):
    url = f'https://doi.org/{doi}'
    resp = requests.head(url, allow_redirects=True, timeout=5)
    return resp.status_code == 200

# Model claimed this paper exists:
fabricated_doi = '10.1234/fake.paper.2023.99999'
if not verify_doi(fabricated_doi):
    print('HALLUCINATION DETECTED: DOI does not exist')

ระบบจำแนกประเภทความล้มเหลวในทางปฏิบัติ

เมื่อพบความล้มเหลว ให้จำแนกประเภทก่อนพยายามแก้ไข ประเภทความล้มเหลวจะเป็นตัวกำหนดกลยุทธ์การแก้ไข:

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

การบันทึกความล้มเหลวอย่างมีโครงสร้าง

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

import json
from datetime import datetime

def log_failure(prompt, response, failure_type, details=''):
    entry = {
        'timestamp': datetime.utcnow().isoformat(),
        'failure_type': failure_type,  # wrong_answer | wrong_format | off_topic | hallucination
        'prompt_hash': hash(prompt),
        'response_snippet': response[:200],
        'details': details
    }
    with open('prompt_failures.jsonl', 'a') as f:
        f.write(json.dumps(entry) + '\n')

log_failure(
    prompt=my_prompt,
    response=bad_response,
    failure_type='wrong_format',
    details='JSON prefix text broke parsing'
)

การจำแนกประเภทความล้มเหลวโดยอัตโนมัติ

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

def classify_failure(prompt, expected, actual):
    classification_prompt = (
        f'You are a QA evaluator for LLM outputs.\n'
        f'Prompt: {prompt}\n'
        f'Expected behavior: {expected}\n'
        f'Actual output: {actual}\n\n'
        'Classify the failure as one of: CORRECT, WRONG_ANSWER, WRONG_FORMAT, OFF_TOPIC, HALLUCINATION.\n'
        'Reply with only the label.'
    )
    resp = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': classification_prompt}]
    )
    return resp.choices[0].message.content.strip()

เมทริกซ์ระดับความรุนแรง

ความล้มเหลวแต่ละประเภทไม่ได้ส่งผลกระทบเท่ากันทั้งหมด เมทริกซ์ระดับความรุนแรงช่วยจัดลำดับความสำคัญของการแก้ไข:

  • การสร้างข้อมูลหลอนในบริบททางการแพทย์หรือกฎหมาย: ระดับวิกฤต — แก้ไขทันที
  • รูปแบบผิดในเครื่องมือภายใน: ระดับสูง — ทำให้การแยกวิเคราะห์ในขั้นถัดไปล้มเหลว
  • คำตอบผิดในกรณีขอบเขตที่พบได้ยาก: ระดับปานกลาง — ติดตามความถี่
  • คำตอบไม่ตรงประเด็นเมื่อข้อมูลเข้ากำกวม: ระดับต่ำ — ยอมรับได้หากเกิดขึ้นไม่บ่อย

ติดตามอัตราความล้มเหลวแยกตามประเภทในแต่ละสัปดาห์ หากหมวดหมู่ใดมีจำนวนเพิ่มขึ้นอย่างฉับพลัน แสดงว่ามีการถดถอยที่ต้องให้ความสนใจ

การสร้างแผงควบคุมความล้มเหลว

แผงควบคุมความล้มเหลวอย่างง่ายจะอ่านบันทึกความล้มเหลวและรายงานจำนวนแยกตามประเภทและส่วนของพรอมต์:

import json
from collections import Counter

def failure_report(log_path='prompt_failures.jsonl'):
    entries = []
    with open(log_path) as f:
        for line in f:
            entries.append(json.loads(line))

    counts = Counter(e['failure_type'] for e in entries)
    total = len(entries)

    print(f'Total failures: {total}')
    for ftype, count in counts.most_common():
        pct = 100 * count / total
        print(f'  {ftype}: {count} ({pct:.1f}%)')

failure_report()

การป้องกันความล้มเหลวเชิงรุก

กลยุทธ์เชิงรุกเพื่อลดความล้มเหลวแต่ละประเภทก่อนที่จะเกิดขึ้น:

  • คำตอบผิด: ให้ข้อความอ้างอิงไว้ในพรอมต์ (RAG) และขอให้โมเดลอ้างอิงแหล่งที่มา
  • รูปแบบผิด: ใช้โหมด JSON หรือการเรียกใช้ฟังก์ชัน และให้ตัวอย่างรูปแบบไว้ในพรอมต์
  • ไม่ตรงประเด็น: วางงานไว้ในประโยคแรก และหลีกเลี่ยงบทเกริ่นนำยาวที่ทำให้เจตนาจางลง
  • การสร้างข้อมูลหลอน: สั่งว่า 'ใช้เฉพาะข้อมูลที่ให้ไว้ด้านล่างเท่านั้น' และเพิ่มว่า 'หากไม่แน่ใจ ให้บอกว่าไม่ทราบ'

ตรวจสอบความรู้

ความล้มเหลวประเภทใดเกิดขึ้นเมื่อโมเดลแต่งข้อเท็จจริงที่ไม่มีอยู่จริงขึ้นมา เช่น แต่งการอ้างอิงหรือจุดปลายทาง API ที่ไม่มีอยู่จริง

สรุปทบทวน: การวินิจฉัยผลลัพธ์ที่ไม่คาดคิด

ความล้มเหลวของ LLM สี่ประเภทและลักษณะสำคัญ:

  • คำตอบผิด: รูปแบบถูกต้อง หัวข้อถูกต้อง แต่เนื้อหาผิด — ตรวจสอบข้อเท็จจริงกับข้อมูลอ้างอิงที่ถูกต้อง
  • รูปแบบผิด: เนื้อหาถูกต้อง แต่ไม่ปฏิบัติตามคำสั่งด้านรูปแบบ — การตรวจสอบโครงสร้างข้อมูลจะตรวจพบปัญหานี้
  • ไม่ตรงประเด็น: รูปแบบถูกต้อง แต่ตอบคำถามคนละข้อ — ตรวจสอบว่าภาษาและงานสอดคล้องกัน
  • การสร้างข้อมูลหลอน: แต่งข้อเท็จจริงขึ้นมา — ตรวจสอบกับแหล่งข้อมูลภายนอก

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

เริ่มต้นได้ฟรี

เรียนรู้ AI Prompt Engineering ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
53
บทเรียน
199

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

บทเรียน “การวินิจฉัยผลลัพธ์ที่ไม่คาดคิด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การวินิจฉัยผลลัพธ์ที่ไม่คาดคิด”

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

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

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

บทเรียน “การวินิจฉัยผลลัพธ์ที่ไม่คาดคิด” ใช้เวลานานแค่ไหน

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

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

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

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

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