AI-agenter · Lektion

Mönster för trigger–åtgärd-agenter

Händelsedetektering → beslut → åtgärd: den centrala automationsloopen.

Lektion 1 av 413 steg

Mönster för trigger–åtgärd-agenter är en gratis lektion i AI-agenter på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI-agenter, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-agenter innehåller totalt 4 lektioner.

Vad är en trigger-action-agent?

En trigger-action-agent bevakar händelser och svarar genom att utföra åtgärder. Loopen består av tre delar: upptäck händelse → LLM fattar beslut om åtgärd → utför åtgärd.

Exempel: e-post tas emot → sammanfatta och svara; fil laddas upp → validera och bearbeta; klockan 9 varje dag → generera daglig rapport.

Typer av triggers

Triggers delas in i tre kategorier:

  • Händelsebaserade: en webhook utlöses när e-post anländer eller en fil laddas upp
  • Tidsbaserade: ett cron-schema kör agenten med fasta intervall
  • Polling-baserade: agenten kontrollerar ett API upprepade gånger efter nya data

Valet av rätt triggertyp avgör agentens latens och resursanvändning.

Detekteringsfasen

Detektering innebär att ta emot eller identifiera en händelse. För webhooks tar servern emot en POST-begäran. Vid polling frågar agenten ett API och jämför resultaten med det senast observerade tillståndet.

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])

Beslutsfasen

Efter att en händelse har upptäckts skickar agenten kontext till en LLM och frågar vilken åtgärd som ska utföras. LLM:en väljer antingen ett verktyg eller returnerar ett direkt svar.

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)

Exekveringsfasen

Exekveringen utför den valda åtgärden. Det kan innebära att anropa ett API, skriva en fil, skicka ett meddelande eller utlösa ett annat arbetsflöde. Hantera alltid fel och logga resultaten.

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)

Tillståndsmaskinmodell

En tillståndsmaskin är en kraftfull modell för automationsagenter. Tillstånd kan vara: IDLE, DETECTING, DECIDING, EXECUTING, ERROR. Övergångar sker vid händelser eller när villkor uppfylls.

Tillståndsmaskiner gör agentens beteende förutsägbart och enklare att felsöka.

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'})

Trigger-mönster för mottagen e-post

Gmails push-aviseringar använder Pub/Sub. När ett nytt e-postmeddelande anländer publicerar Google ett meddelande till ert topic. Er agent tar emot en webhook, hämtar e-postmeddelandet och bearbetar det.

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'}

Trigger-mönster för filuppladdning

S3-händelseaviseringar eller bevakare av det lokala filsystemet kan utlösa agenter när filer dyker upp. Biblioteket watchdog bevakar kataloger efter nya filer.

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()

Tidsbaserat triggermönster

Tidsbaserade triggers kör agenter enligt ett schema. Använd APScheduler för schemaläggning i processen eller ett system-cron-jobb för schemaläggning på processnivå.

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()

Idempotent åtgärdskörning

Automationsagenter måste vara idempotenta: att köra samma åtgärd två gånger ska inte orsaka dubbla effekter. Använd idempotensnycklar och mönster där ni kontrollerar före åtgärden.

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

Feltillstånd och återställning

Robusta agenter hanterar fel på ett bra sätt. När exekveringen misslyckas kan agenten försöka igen med exponentiell backoff, avisera en människa eller flytta händelsen till en dead-letter queue för manuell granskning.

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)

Kunskapskontroll: Trigger-action-mönster

Testa er förståelse av trigger-action-mönster.

Sätt ihop delarna

En komplett trigger-action-agent kombinerar alla delar: en triggerkälla (e-post, fil eller timer), ett detekteringslager, LLM-baserat beslutsfattande, idempotent exekvering, logik för återförsök och tillståndsspårning.

Börja enkelt: en triggertyp och en åtgärd. Lägg till komplexitet stegvis när ni blir säkrare på agentens beteende.

Gratis att börja

Lär dig AI-agenter med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
60
Lektioner
239

Vanliga frågor

Är lektionen ”Mönster för trigger–åtgärd-agenter” gratis?

Ja – hela texten till ”Mönster för trigger–åtgärd-agenter” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI-agenter, kan Ni uppgradera till CoddyKit PRO. Kursen i AI-agenter innehåller totalt 4 lektioner.

Vad lär jag mig i ”Mönster för trigger–åtgärd-agenter”?

Händelsedetektering → beslut → åtgärd: den centrala automationsloopen. Ni övar på AI-agenter med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AI-agenter?

Du behöver inga förkunskaper. Utbildningen i AI-agenter på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Mönster för trigger–åtgärd-agenter”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AI-agenter-lektionen?

Ja. Varje AI-agenter-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Mönster för trigger–åtgärd-agenter
  2. Anslut agenter till webhooks
  3. Schemalagda och cron-baserade agenter
  4. Bygga en automatiseringspipeline för flera appar
← Tillbaka till AI-agenter