รูปแบบผู้ประสานงาน-เอเจนต์ย่อย
สร้างรูปแบบผู้ประสานงาน-เอเจนต์ย่อย โดยให้เอเจนต์วางแผนแบ่งงานเป็นงานย่อย มอบหมายให้เอเจนต์ผู้เชี่ยวชาญ และสังเคราะห์ผลลัพธ์เป็นผลลัพธ์สุดท้าย
รูปแบบผู้ประสานงาน-เอเจนต์ย่อย เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดเอเจนต์เดี่ยวจึงไปต่อไม่ได้
- รูปแบบผู้ประสานงาน-เอเจนต์ย่อย
- การสร้างกระบวนการหลายเอเจนต์ด้วย LangGraph
- หน่วยความจำร่วมและการสื่อสารระหว่างเอเจนต์