AI-agenter · leksjon

Mønstre for trigger- og handlingsagenter

Hendelsesdeteksjon → avgjørelse → handling: kjernen i automatiseringsløkken.

Leksjon 1 av 413 trinn

Mønstre for trigger- og handlingsagenter er en gratis leksjon i AI-agenter på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-agenter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Hva er en agent for utløsere og handlinger

En agent basert på utløsere og handlinger overvåker hendelser og svarer med handlinger. Sløyfen består av tre deler: oppdag hendelse → LLM avgjør handling → utfør handling.

Eksempler: e-post mottatt → oppsummer og svar; fil lastet opp → valider og behandle; klokken 09 hver dag → generer daglig rapport.

Typer utløsere

Utløsere faller i tre kategorier:

  • Hendelsesbaserte: en webhook utløses når en e-post kommer inn eller en fil lastes opp
  • Tidsbaserte: en cron-plan kjører agenten med faste intervaller
  • Polling-baserte: agenten sjekker et API gjentatte ganger etter nye data

Valget av riktig utløsertype bestemmer agentens latenstid og ressursbruk.

Oppdagelsesfasen

Oppdagelse betyr å motta eller gjenkjenne en hendelse. For webhooks mottar serveren en POST-forespørsel. Ved polling spør agenten et API og sammenligner resultatene med tilstanden som sist ble registrert.

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

Avgjørelsesfasen

Etter å ha oppdaget en hendelse sender agenten konteksten til en LLM og spør hvilken handling som skal utføres. LLM-en velger enten et verktøy eller returnerer et direkte 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)

Utførelsesfasen

Utførelsen kjører den valgte handlingen. Dette kan innebære å kalle et API, skrive en fil, sende en melding eller utløse en annen arbeidsflyt. Håndter alltid feil og logg resultatene.

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)

Tilstandsmaskinmodell

En tilstandsmaskin er en kraftig modell for automatiseringsagenter. Tilstander kan være: IDLE, DETECTING, DECIDING, EXECUTING, ERROR. Overganger skjer ved hendelser eller betingelser.

Tilstandsmaskiner gjør agentens atferd forutsigbar og enklere å feilsøke.

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

Utløsermønster for mottatt e-post

Gmail-pushvarsler bruker Pub/Sub. Når en ny e-post kommer inn, publiserer Google til emnet. Agenten mottar en webhook, henter e-posten og behandler den.

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

Utløsermønster for filopplasting

S3-hendelsesvarsler eller overvåkere av det lokale filsystemet kan utløse agenter når filer dukker opp. Biblioteket watchdog overvåker kataloger etter nye 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()

Tidsbasert utløsermønster

Tidsbaserte utløsere kjører agenter etter en tidsplan. Bruk APScheduler til planlegging i prosessen eller en systembasert cron-jobb til planlegging på prosessnivå.

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 utførelse av handlinger

Automatiseringsagenter må være idempotente: Hvis den samme handlingen kjøres to ganger, skal det ikke føre til dupliserte effekter. Bruk idempotensnøkler og mønstre der du kontrollerer før du utfører handlingen.

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

Feiltilstander og gjenoppretting

Robuste agenter håndterer feil på en kontrollert måte. Når utførelsen mislykkes, kan agenten prøve på nytt med eksponentiell tilbakekobling, varsle en person eller flytte hendelsen til en dead-letter-kø for manuell gjennomgang.

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)

Test kunnskapene: Mønstre for utløsere og handlinger

Test forståelsen av mønstre for agenter basert på utløsere og handlinger.

Slik settes alt sammen

En komplett agent basert på utløsere og handlinger kombinerer alle delene: en utløserkilde (e-post, fil eller tidsur), et oppdagelseslag, LLM-basert beslutningstaking, idempotent utførelse, logikk for nye forsøk og tilstandssporing.

Begynn enkelt: én utløsertype og én handling. Legg gradvis til kompleksitet etter hvert som tilliten til agentens atferd øker.

Gratis å komme i gang

Lær deg AI-agenter med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
60
Leksjoner
239

Ofte stilte spørsmål

Er leksjonen «Mønstre for trigger- og handlingsagenter» gratis?

Ja – hele teksten i «Mønstre for trigger- og handlingsagenter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av AI-agenter-kurset, kan du oppgradere til CoddyKit PRO. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Hva lærer jeg i «Mønstre for trigger- og handlingsagenter»?

Hendelsesdeteksjon → avgjørelse → handling: kjernen i automatiseringsløkken. Du øver på AI-agenter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med AI-agenter?

Ingen tidligere erfaring er nødvendig. AI-agenter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Mønstre for trigger- og handlingsagenter»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne AI-agenter-leksjonen?

Ja. Alle AI-agenter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Mønstre for trigger- og handlingsagenter
  2. Koble agenter til webhooks
  3. Planlegging og cron-baserte agenter
  4. Bygging av en automatiseringspipeline for flere apper
← Tilbake til AI-agenter