0Pricing
AI Agents · บทเรียน

ความล้มเหลวทั่วไปของลูปตัวแทน

ลูปไม่สิ้นสุด การเรียกใช้เครื่องมือเดิมซ้ำ และการไม่ไปถึงคำตอบสุดท้าย

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

การวนรอบของเอเจนต์และรูปแบบความล้มเหลว

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

การทำความเข้าใจความล้มเหลวเหล่านี้คือขั้นตอนแรกในการป้องกันความล้มเหลวเหล่านั้น

ความล้มเหลว 1: การวนรอบไม่สิ้นสุด

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

# Example of an agent in an infinite loop:
# Step 1: reasoning='Need to search for Python docs'
#         tool='search_web', args={'query': 'Python documentation'}
# Step 2: reasoning='Search result was unhelpful, try again'
#         tool='search_web', args={'query': 'Python documentation'}
# Step 3: reasoning='Search result was unhelpful, try again'
#         tool='search_web', args={'query': 'Python documentation'}
# ... repeats until max_iterations or token budget is exhausted

print('Symptom: same tool + same arguments appearing repeatedly in steps')
print('Fix: detect repeated (tool, args) pairs and break the loop')

ความล้มเหลว 2: สถานะติดค้าง

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

# Example of a stuck agent:
# Step 1: tool='search_web', args={'query': 'topic A'}
# Step 2: tool='search_web', args={'query': 'topic B'}  # different args
# Step 3: tool='search_web', args={'query': 'topic A'}  # back to first
# Step 4: tool='read_document', args={'url': '...'}
# Step 5: tool='search_web', args={'query': 'topic A'}
# ... no FINAL_ANSWER ever produced

print('Symptom: agent takes many steps but never calls FINAL_ANSWER')
print('Fix: max_iterations guard + force final answer if limit is near')

ความล้มเหลว 3: ไม่มีคำตอบสุดท้าย

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

# An agent that never concludes:
def run_agent_bad(query: str, max_steps: int = 20) -> str:
    for step in range(max_steps):
        action = llm_decide_action(query, history)

        if action['type'] == 'tool':
            result = execute_tool(action)
            history.append(result)
        # BUG: No check for 'final_answer' type!
        # The agent loops until max_steps, returning None

    return None  # never actually returns an answer

# Fix: explicitly check for final_answer signal
def run_agent_good(query: str, max_steps: int = 20) -> str:
    for step in range(max_steps):
        action = llm_decide_action(query, history)
        if action['type'] == 'final_answer':
            return action['answer']  # exit cleanly
        execute_tool(action)
    return 'Reached step limit without a conclusion.'

ความล้มเหลว 4: ข้อผิดพลาดในการแยกวิเคราะห์การเรียกใช้เครื่องมือ

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

import json

def safe_parse_tool_call(arguments_str: str) -> dict:
    try:
        return json.loads(arguments_str)
    except json.JSONDecodeError as e:
        print(f'Failed to parse tool arguments: {e}')
        print(f'Raw: {arguments_str}')
        return None

def execute_step(tool_call) -> str:
    args = safe_parse_tool_call(tool_call.function.arguments)
    if args is None:
        # Feed the error back to the LLM in the next step
        return f'ERROR: Could not parse tool arguments. Raw: {tool_call.function.arguments}'
    return run_tool(tool_call.function.name, args)

ความล้มเหลว 5: เครื่องมือไม่ส่งคืนข้อมูลที่เป็นประโยชน์

เครื่องมืออาจทำงานสำเร็จในทางเทคนิค (ไม่มีข้อยกเว้น) แต่ส่งคืนข้อมูลว่างเปล่าหรือไม่มีประโยชน์ เอเจนต์ต้องจัดการกรณีนี้ และไม่ควรสันนิษฐานว่าการเรียกใช้เครื่องมือทุกครั้งจะส่งคืนข้อมูลที่นำไปดำเนินการได้

def run_agent_with_empty_result_handling(query: str) -> str:
    for step in range(20):
        action = decide_next_action(query, history)

        if action['type'] == 'final_answer':
            return action['answer']

        result = execute_tool(action['tool'], action['args'])

        # Detect empty results and provide context
        if not result or result.strip() == '':
            observation = f'Tool {action["tool"]} returned no data. Try a different approach or different arguments.'
        elif 'error' in result.lower():
            observation = f'Tool error: {result}. Consider a different tool or query.'
        else:
            observation = result

        history.append({'tool': action['tool'], 'result': observation})

    return 'Could not complete task within step limit.'

ความล้มเหลว 6: ชื่อเครื่องมือที่สร้างขึ้นเอง

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

REGISTERED_TOOLS = {
    'search_web': search_web_function,
    'get_weather': get_weather_function,
    'calculate': calculate_function
}

def dispatch_tool(tool_name: str, args: dict) -> str:
    if tool_name not in REGISTERED_TOOLS:
        available = ', '.join(REGISTERED_TOOLS.keys())
        return (
            f'ERROR: Unknown tool "{tool_name}". '
            f'Available tools: {available}. '
            f'Please use one of the available tools.'
        )

    tool_fn = REGISTERED_TOOLS[tool_name]
    return tool_fn(**args)

ความล้มเหลว 7: งบประมาณโทเค็นหมดลง

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

def truncate_tool_result(result: str, max_chars: int = 2000) -> str:
    if len(result) <= max_chars:
        return result
    truncated = result[:max_chars]
    return f'{truncated}\n... [result truncated to {max_chars} chars]'

def add_observation_to_history(history: list, tool_name: str, result: str):
    safe_result = truncate_tool_result(result, max_chars=2000)
    history.append({
        'role': 'tool',
        'content': safe_result,
        'tool_name': tool_name
    })
    print(f'[Step] Tool={tool_name}, Result length={len(result)} (stored {len(safe_result)})')

if __name__ == '__main__':
    demo_history = []
    add_observation_to_history(demo_history, 'search_web', 'x' * 3000)

การตรวจจับรูปแบบความล้มเหลวด้วยโปรแกรม

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

def diagnose_agent_failure(steps: list) -> str:
    if not steps:
        return 'No steps recorded'

    # Check for infinite loop: same (tool, args) repeated
    seen = {}
    for s in steps:
        key = (s.get('tool'), str(s.get('args')))
        seen[key] = seen.get(key, 0) + 1
    repeated = {k: v for k, v in seen.items() if v > 2}
    if repeated:
        return f'INFINITE_LOOP: repeated actions: {repeated}'

    # Check for missing final answer
    has_answer = any(s.get('type') == 'final_answer' for s in steps)
    if not has_answer and len(steps) >= 15:
        return 'STUCK_STATE: many steps taken but no final answer'

    # Check for parse errors
    errors = [s for s in steps if 'ERROR' in str(s.get('result', ''))]
    if len(errors) > 2:
        return f'TOOL_ERROR: {len(errors)} tool errors in pipeline'

    return 'OK'

if __name__ == '__main__':
    demo_steps = [{'tool': 'search_web', 'args': {'q': 'weather'}} for _ in range(3)]
    print('Diagnosis:', diagnose_agent_failure(demo_steps))

การใช้ขีดจำกัดขั้นตอนอย่างง่าย

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

def run_agent_with_budget(query: str, max_steps: int = 15) -> dict:
    history = []
    for step in range(1, max_steps + 1):
        print(f'[Step {step}/{max_steps}]')

        action = decide_next_action(query, history)

        if action['type'] == 'final_answer':
            return {
                'status': 'success',
                'answer': action['answer'],
                'steps_taken': step
            }

        result = execute_tool(action['tool'], action['args'])
        history.append({'step': step, 'tool': action['tool'], 'result': result})

        if step == max_steps - 1:
            # Warn the agent it must conclude
            history.append({'role': 'system',
                            'content': 'You must provide a FINAL_ANSWER on the next step.'})

    return {'status': 'timeout', 'answer': None, 'steps_taken': max_steps}

ข้อมูลอ้างอิงฉบับย่อ: รูปแบบความล้มเหลวและวิธีแก้ไข

สรุปรูปแบบความล้มเหลวของการวนรอบเอเจนต์ทั้งหกแบบและวิธีแก้ไข:

  • การวนรอบไม่สิ้นสุด: ตรวจจับคู่ (เครื่องมือ, อาร์กิวเมนต์) ที่ซ้ำกัน แล้วหยุดการวนรอบพร้อมส่งข้อมูลป้อนกลับเกี่ยวกับข้อผิดพลาด
  • สถานะติดค้าง: ใช้ตัวป้องกันจำนวนรอบสูงสุด และบังคับให้ส่งคำตอบสุดท้ายเมื่อใกล้ถึงขีดจำกัด
  • ไม่มีคำตอบสุดท้าย: ตรวจสอบสัญญาณคำตอบสุดท้ายในคำสั่งการทำงานอย่างชัดเจน
  • ข้อผิดพลาดในการแยกวิเคราะห์: ครอบการแยกวิเคราะห์ JSON ด้วยการจัดการข้อผิดพลาด แล้วส่งข้อผิดพลาดกลับไปยัง LLM
  • ผลลัพธ์เครื่องมือว่างเปล่า: ตรวจจับสตริงว่าง และส่งข้อมูลป้อนกลับว่า 'ไม่มีข้อมูล'
  • ชื่อเครื่องมือที่สร้างขึ้นเอง: ตรวจสอบกับรายการเครื่องมือที่ลงทะเบียนไว้ แล้วส่งข้อความข้อผิดพลาดกลับไป

ทดสอบความรู้: ความล้มเหลวของการวนรอบเอเจนต์

ทดสอบความเข้าใจของคุณเกี่ยวกับรูปแบบความล้มเหลวทั่วไปของการวนรอบเอเจนต์

สรุป: ความล้มเหลวทั่วไปของการวนรอบเอเจนต์

ขณะนี้คุณสามารถระบุและป้องกันรูปแบบความล้มเหลวหลักของการวนรอบเอเจนต์ได้แล้ว:

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

การวนรอบของเอเจนต์ที่แข็งแกร่งจะคาดการณ์รูปแบบความล้มเหลวเหล่านี้ทั้งหมดและจัดการได้อย่างเหมาะสม

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

บทเรียน “ความล้มเหลวทั่วไปของลูปตัวแทน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ความล้มเหลวทั่วไปของลูปตัวแทน”

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

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

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

บทเรียน “ความล้มเหลวทั่วไปของลูปตัวแทน” ใช้เวลานานแค่ไหน

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

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

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

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

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