AI Engineering Academy · บทเรียน

รูปแบบผู้ประสานงาน-เอเจนต์ย่อย

สร้างรูปแบบผู้ประสานงาน-เอเจนต์ย่อย โดยให้เอเจนต์วางแผนแบ่งงานเป็นงานย่อย มอบหมายให้เอเจนต์ผู้เชี่ยวชาญ และสังเคราะห์ผลลัพธ์เป็นผลลัพธ์สุดท้าย

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

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

กรอบความคิดของเอเจนต์ผู้ประสานงานและเอเจนต์ย่อย

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

หน้าที่รับผิดชอบของเอเจนต์ผู้ประสานงาน

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

from openai import OpenAI

client = OpenAI()

def orchestrator(goal: str) -> dict:
    # Step 1: Decompose
    plan = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'You are a task planner. Decompose the goal into subtasks. Return JSON with keys: researcher_task, writer_task, coder_task.'},
            {'role': 'user', 'content': goal}
        ],
        response_format={'type': 'json_object'}
    )
    return plan.choices[0].message.content

การออกแบบเอเจนต์ย่อยเฉพาะด้าน

เอเจนต์ย่อยแต่ละตัวได้รับการปรับให้เหมาะกับความรับผิดชอบเพียงหนึ่งอย่าง ความเชี่ยวชาญเฉพาะด้านประกอบด้วย คำสั่งระบบที่มุ่งเน้นและกำหนดบทบาท ชุดเครื่องมือขนาดเล็ก (3–5 รายการ) ที่เกี่ยวข้องเฉพาะกับบทบาทนั้น และหน้าต่างบริบทที่มีเฉพาะข้อมูลซึ่งจำเป็นต่องานย่อยดังกล่าว เอเจนต์ที่มีขอบเขตชัดเจนจะตัดสินใจได้ดีขึ้น และประเมินผลรวมถึงแก้ไขข้อบกพร่องได้ง่ายกว่า

def create_researcher_agent():
    return {
        'model': 'gpt-4o',
        'system': '''You are a research specialist. Your only job is to find accurate,
            cited information. Return structured findings with sources.
            Do NOT write prose or code - only research findings.''',
        'tools': ['search_web', 'fetch_url', 'query_arxiv'],  # 3 tools only
        'max_iterations': 10
    }

def create_writer_agent():
    return {
        'model': 'gpt-4o',
        'system': '''You are a technical writer. Transform research findings into clear,
            engaging prose. You receive structured data and return polished text.''',
        'tools': ['format_markdown', 'check_readability'],  # 2 tools only
        'max_iterations': 5
    }

โพรโทคอลการมอบหมาย

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

from dataclasses import dataclass
from typing import Optional

@dataclass
class TaskPacket:
    task_id: str
    assignee: str          # which subagent receives this
    goal: str              # specific, actionable goal
    context: str           # only relevant background
    output_format: str     # JSON schema or description
    constraints: list[str] # e.g. ['max 500 words', 'cite sources']
    deadline_steps: int    # max iterations allowed

def delegate(packet: TaskPacket, subagent_fn) -> str:
    prompt = f'Goal: {packet.goal}\nContext: {packet.context}\nOutput format: {packet.output_format}\nConstraints: {packet.constraints}'
    return subagent_fn(prompt)

การรวบรวมและสังเคราะห์ผลลัพธ์

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

def synthesize_results(research: str, draft: str, code: str, goal: str) -> str:
    synthesis_prompt = f'''You are given outputs from three specialist agents.
    Your job is to synthesize them into one coherent final answer for this goal: {goal}

    RESEARCH FINDINGS:
    {research}

    WRITTEN DRAFT:
    {draft}

    CODE EXAMPLES:
    {code}

    Resolve any conflicts, fill gaps, and produce a unified final response.
    '''
    response = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': synthesis_prompt}]
    )
    return response.choices[0].message.content

การมอบหมายงานแบบลำดับต่อเนื่องเทียบกับแบบขนาน

ผู้ควบคุมสามารถมอบหมายงานแบบ ลำดับต่อเนื่อง (ผลลัพธ์ของตัวแทนย่อยตัวหนึ่งส่งต่อให้ตัวถัดไป) หรือแบบ ขนาน (ตัวแทนย่อยหลายตัวทำงานพร้อมกัน) การมอบหมายงานแบบลำดับต่อเนื่องเข้าใจง่ายกว่าและเหมาะเมื่อขั้นตอนถัดไปต้องอาศัยผลลัพธ์จากขั้นตอนก่อนหน้า ส่วนการมอบหมายงานแบบขนานจะเร็วกว่าเมื่อภารกิจย่อยเป็นอิสระต่อกันและทำงานพร้อมกันได้ โดยมักลดเวลาตามนาฬิกาจริงลงได้ 3–5 เท่า

import asyncio

# Sequential: writer needs research first
async def sequential_pipeline(goal):
    research = await researcher_agent(goal)
    draft = await writer_agent(research)  # depends on research
    return draft

# Parallel: all three tasks are independent
async def parallel_pipeline(topics):
    tasks = [
        researcher_agent(topics[0]),
        researcher_agent(topics[1]),
        researcher_agent(topics[2])
    ]
    results = await asyncio.gather(*tasks)  # runs simultaneously
    return orchestrator_synthesize(results)

การจัดการความล้มเหลวของตัวแทนย่อย

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

def delegate_with_retry(packet: TaskPacket, subagent_fn, max_retries=2):
    for attempt in range(max_retries + 1):
        try:
            result = subagent_fn(packet)
            validate_output(result, packet.output_format)
            return result
        except ValidationError as e:
            if attempt < max_retries:
                # Clarify the task for retry
                packet.goal += f'\n\nPrevious attempt failed: {str(e)}. Please fix.'
                print(f'Retry {attempt + 1} for task {packet.task_id}')
            else:
                return {'error': str(e), 'task_id': packet.task_id, 'status': 'failed'}

การเขียนพรอมต์ให้ผู้ควบคุมอย่างเหมาะสม

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

ORCHESTRATOR_SYSTEM_PROMPT = '''
You coordinate a team of specialist agents to complete complex tasks.

Available agents:
- researcher: Finds and cites factual information. Input: question string. Output: JSON with findings and sources.
- writer: Writes polished prose from structured data. Input: JSON findings. Output: markdown text.
- coder: Writes Python code. Input: natural language spec. Output: Python code string.

Workflow:
1. Analyze the goal and decide which agents are needed.
2. Identify dependencies: can any tasks run in parallel?
3. Delegate tasks with clear, specific goals.
4. Validate each result before proceeding.
5. Synthesize all results into a unified final answer.
'''

การแยกบริบทคือความสามารถสำคัญ

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

การติดตามร่องรอยและการตรวจสอบสถานะการทำงาน

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

import time

def logged_delegate(packet: TaskPacket, subagent_fn):
    start = time.time()
    print(f'[DELEGATE] task_id={packet.task_id} assignee={packet.assignee}')
    print(f'[INPUT] {packet.goal[:100]}...')
    
    result = subagent_fn(packet)
    elapsed = time.time() - start
    
    print(f'[RESULT] task_id={packet.task_id} elapsed={elapsed:.2f}s')
    print(f'[OUTPUT] {str(result)[:100]}...')
    return result

รูปแบบการใช้งานจริง: เครื่องมือสร้างรายงาน

ตัวอย่างที่ชัดเจนของรูปแบบผู้ควบคุม–ตัวแทนย่อยคือเครื่องมือสร้างรายงานวิเคราะห์คู่แข่ง ผู้ควบคุมได้รับคำสั่งว่า 'เขียนการวิเคราะห์คู่แข่งสำหรับบริษัท X' จากนั้นจะแบ่งงานดังนี้ มอบหมายภารกิจค้นคว้าให้กับ ตัวแทนนักค้นคว้า (ค้นหาราคา คุณลักษณะ และรีวิว) มอบหมายภารกิจวิเคราะห์ให้กับ ตัวแทนนักวิเคราะห์ (ระบุจุดแข็งและจุดอ่อน) และมอบหมายภารกิจจัดรูปแบบให้กับ ตัวแทนนักเขียน (จัดทำรายงานฉบับสุดท้าย) ผู้เชี่ยวชาญแต่ละตัวจะทำสิ่งที่ตนถนัดที่สุด

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับรูปแบบผู้ควบคุม–ตัวแทนย่อยจากบทเรียนนี้

ทบทวนบทเรียน

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

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

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

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

คอร์ส
30
บทเรียน
120

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

บทเรียน “รูปแบบผู้ประสานงาน-เอเจนต์ย่อย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบผู้ประสานงาน-เอเจนต์ย่อย”

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

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

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

บทเรียน “รูปแบบผู้ประสานงาน-เอเจนต์ย่อย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เหตุใดเอเจนต์เดี่ยวจึงไปต่อไม่ได้
  2. รูปแบบผู้ประสานงาน-เอเจนต์ย่อย
  3. การสร้างกระบวนการหลายเอเจนต์ด้วย LangGraph
  4. หน่วยความจำร่วมและการสื่อสารระหว่างเอเจนต์
← กลับไปที่ AI Engineering Academy