AI Agents · บทเรียน

รูปแบบตัวแทนทริกเกอร์-การดำเนินการ

ตรวจจับเหตุการณ์ → ตัดสินใจ → ดำเนินการ: ลูปหลักของระบบอัตโนมัติ

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

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

เอเจนต์ที่ตอบสนองต่อเหตุการณ์ด้วยการดำเนินการคืออะไร

เอเจนต์ที่ตอบสนองต่อเหตุการณ์ด้วยการดำเนินการจะเฝ้าดูเหตุการณ์และตอบสนองด้วยการดำเนินการ วงจรสามส่วนคือ ตรวจจับเหตุการณ์ → ให้ LLM ตัดสินใจเลือกการดำเนินการ → ดำเนินการ

ตัวอย่างเช่น ได้รับอีเมล → สรุปและตอบกลับ อัปโหลดไฟล์ → ตรวจสอบและประมวลผล เวลา 9 นาฬิกาทุกวัน → สร้างรายงานประจำวัน

ประเภทของตัวกระตุ้น

ตัวกระตุ้นแบ่งออกเป็นสามประเภท:

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

การเลือกประเภทตัวกระตุ้นที่เหมาะสมจะกำหนดเวลาแฝงและการใช้ทรัพยากรของเอเจนต์

ขั้นตอนการตรวจจับ

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

import json

def detect_new_email(current_emails, last_seen_id):
    new_emails = [
        e for e in current_emails
        if e['id'] > last_seen_id
    ]
    return new_emails

# Simulate detection
current = [{'id': 3, 'subject': 'Meeting'}, {'id': 4, 'subject': 'Invoice'}]
new = detect_new_email(current, last_seen_id=2)
print('New emails:', [e['subject'] for e in new])

ขั้นตอนการตัดสินใจ

หลังจากตรวจจับเหตุการณ์แล้ว เอเจนต์จะส่งบริบทไปยัง LLM และถามว่าควรดำเนินการใด LLM อาจเลือกเครื่องมือหรือส่งคำตอบโดยตรงกลับมา

import openai

client = openai.OpenAI(api_key='sk-...')

def decide_action(event_description):
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[
            {'role': 'system', 'content': 'You are an automation agent. Decide what action to take for the event.'},
            {'role': 'user', 'content': f'Event: {event_description}'}
        ],
        tools=[
            {'type': 'function', 'function': {'name': 'send_reply', 'description': 'Reply to email', 'parameters': {'type': 'object', 'properties': {'message': {'type': 'string'}}, 'required': ['message']}}}
        ]
    )
    return response.choices[0].message

result = decide_action('New email: Invoice for $500 from supplier')
print(result)

ขั้นตอนการดำเนินการ

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

import logging
import sys

logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger('agent')

def execute_action(action_name, params):
    try:
        if action_name == 'send_reply':
            # In real code, call Gmail API here
            logger.info(f'Sending reply: {params["message"]}')
            return {'status': 'success'}
        elif action_name == 'create_task':
            logger.info(f'Creating task: {params["title"]}')
            return {'status': 'success'}
        else:
            raise ValueError(f'Unknown action: {action_name}')
    except Exception as e:
        logger.error(f'Action failed: {e}')
        return {'status': 'error', 'message': str(e)}

if __name__ == '__main__':
    result = execute_action('send_reply', {'message': 'Thanks for reaching out!'})
    print('Result:', result)

แบบจำลองเครื่องสถานะ

เครื่องสถานะเป็นแบบจำลองที่ทรงพลังสำหรับเอเจนต์อัตโนมัติ สถานะอาจประกอบด้วย IDLE, DETECTING, DECIDING, EXECUTING, ERROR การเปลี่ยนสถานะเกิดขึ้นเมื่อมีเหตุการณ์หรือเงื่อนไขต่าง ๆ

เครื่องสถานะช่วยให้พฤติกรรมของเอเจนต์คาดเดาได้และแก้ไขข้อบกพร่องได้ง่ายขึ้น

from enum import Enum

class AgentState(Enum):
    IDLE = 'idle'
    DETECTING = 'detecting'
    DECIDING = 'deciding'
    EXECUTING = 'executing'
    ERROR = 'error'

class AutomationAgent:
    def __init__(self):
        self.state = AgentState.IDLE
    
    def transition(self, new_state):
        print(f'State: {self.state.value} -> {new_state.value}')
        self.state = new_state
    
    def run_cycle(self, event=None):
        self.transition(AgentState.DETECTING)
        if event:
            self.transition(AgentState.DECIDING)
            self.transition(AgentState.EXECUTING)
        self.transition(AgentState.IDLE)

agent = AutomationAgent()
agent.run_cycle(event={'type': 'email', 'subject': 'Test'})

รูปแบบตัวกระตุ้นเมื่อได้รับอีเมล

การแจ้งเตือนแบบพุชของ Gmail ใช้ Pub/Sub เมื่อมีอีเมลใหม่ Google จะเผยแพร่ข้อมูลไปยังหัวข้อของคุณ เอเจนต์จะได้รับเว็บฮุก เรียกข้อมูลอีเมล แล้วประมวลผล

from fastapi import FastAPI, Request
import base64, json

app = FastAPI()

@app.post('/gmail-push')
async def gmail_push(request: Request):
    body = await request.json()
    # Decode Pub/Sub message
    message = body.get('message', {})
    data = base64.b64decode(message.get('data', '')).decode('utf-8')
    notification = json.loads(data)
    
    email_address = notification.get('emailAddress')
    history_id = notification.get('historyId')
    
    print(f'New email for {email_address}, historyId: {history_id}')
    # Fetch email details and run agent here
    return {'status': 'ok'}

รูปแบบตัวกระตุ้นเมื่อมีการอัปโหลดไฟล์

การแจ้งเตือนเหตุการณ์จาก S3 หรือโปรแกรมเฝ้าดูระบบไฟล์ในเครื่องสามารถเรียกใช้เอเจนต์เมื่อมีไฟล์ปรากฏขึ้น ไลบรารี watchdog จะเฝ้าดูไดเรกทอรีเพื่อค้นหาไฟล์ใหม่

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

class UploadHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            return
        print(f'New file detected: {event.src_path}')
        self.process_file(event.src_path)
    
    def process_file(self, filepath):
        # Run agent logic on new file
        print(f'Processing: {filepath}')

observer = Observer()
handler = UploadHandler()
observer.schedule(handler, path='/tmp/uploads/', recursive=False)
observer.start()

try:
    time.sleep(30)  # Watch for 30 seconds
finally:
    observer.stop()
    observer.join()

รูปแบบตัวกระตุ้นตามเวลา

ตัวกระตุ้นตามเวลาจะเรียกใช้เอเจนต์ตามตารางเวลา ใช้ APScheduler สำหรับการจัดตารางเวลาภายในกระบวนการ หรือใช้ cron ของระบบสำหรับการจัดตารางเวลาระดับกระบวนการ

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

scheduler = BlockingScheduler()

def daily_report_agent():
    print(f'Daily report running at {datetime.now()}')
    # Fetch data, call LLM, send report
    pass

def hourly_check_agent():
    print(f'Hourly check at {datetime.now()}')
    pass

# Run at 8am every day
scheduler.add_job(daily_report_agent, 'cron', hour=8, minute=0)

# Run every 30 minutes
scheduler.add_job(hourly_check_agent, 'interval', minutes=30)

print('Scheduler started')
scheduler.start()

การดำเนินการแบบไม่เกิดผลซ้ำ

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

import hashlib

processed_events = set()  # In production, use Redis or DB

def compute_event_id(event):
    content = f"{event['type']}:{event['source_id']}:{event['timestamp']}"
    return hashlib.sha256(content.encode()).hexdigest()[:16]

def handle_event_idempotent(event):
    event_id = compute_event_id(event)
    
    if event_id in processed_events:
        print(f'Skipping duplicate event: {event_id}')
        return {'status': 'duplicate', 'event_id': event_id}
    
    # Process event
    print(f'Processing event: {event_id}')
    processed_events.add(event_id)
    return {'status': 'processed', 'event_id': event_id}

# Simulate duplicate event
event = {'type': 'email', 'source_id': 'abc123', 'timestamp': '2024-01-01T09:00:00'}
print(handle_event_idempotent(event))
print(handle_event_idempotent(event))  # Duplicate - skipped

สถานะข้อผิดพลาดและการกู้คืน

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

import time

def execute_with_retry(action_fn, max_retries=3):
    for attempt in range(max_retries):
        try:
            result = action_fn()
            print(f'Success on attempt {attempt + 1}')
            return result
        except Exception as e:
            wait = 2 ** attempt  # Exponential backoff: 1s, 2s, 4s
            print(f'Attempt {attempt + 1} failed: {e}. Retrying in {wait}s')
            if attempt < max_retries - 1:
                time.sleep(wait)
            else:
                print('All retries exhausted. Moving to dead-letter queue.')
                raise

# Example usage
call_count = [0]

def flaky_action():
    call_count[0] += 1
    if call_count[0] < 3:
        raise ConnectionError('Service unavailable')
    return 'Done'

execute_with_retry(flaky_action)

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

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

นำทุกส่วนมาประกอบกัน

เอเจนต์ที่ตอบสนองต่อเหตุการณ์ด้วยการดำเนินการอย่างสมบูรณ์จะรวมทุกส่วนเข้าด้วยกัน ได้แก่ แหล่งที่มาของตัวกระตุ้น (อีเมล ไฟล์ หรือตัวจับเวลา) ชั้นการตรวจจับ การตัดสินใจโดยใช้ LLM การดำเนินการแบบไม่เกิดผลซ้ำ ตรรกะการลองใหม่ และการติดตามสถานะ

เริ่มต้นอย่างง่ายด้วยตัวกระตุ้นหนึ่งประเภทและการดำเนินการหนึ่งรายการ แล้วค่อย ๆ เพิ่มความซับซ้อนเมื่อคุณมั่นใจในพฤติกรรมของเอเจนต์มากขึ้น

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

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

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

คอร์ส
60
บทเรียน
239

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

บทเรียน “รูปแบบตัวแทนทริกเกอร์-การดำเนินการ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รูปแบบตัวแทนทริกเกอร์-การดำเนินการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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. ตัวแทนตามกำหนดเวลาและ Cron
  4. การสร้างไปป์ไลน์อัตโนมัติสำหรับหลายแอป
← กลับไปที่ AI Agents