0Pricing
AI Agents · Ders

Tetikleyici-Eylem Aracı Kalıpları

Etkinlik tespiti → karar → eylem: temel otomasyon döngüsü.

Tetikleyici-Eylem Aracı Kalıpları, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

Tetikleyici-Eylem Ajanı Nedir?

tetikleyici-eylem ajanı, olayları izler ve eylemlerle yanıt verir. Üç parçalı döngü şöyledir: olayı algıla → LLM eyleme karar verir → eylemi yürüt.

Örnekler: e-posta alındı → özetle ve yanıtla; dosya yüklendi → doğrula ve işle; her gün saat 09.00 → günlük rapor oluştur.

Tetikleyici Türleri

Tetikleyiciler üç kategoriye ayrılır:

  • Olay tabanlı: e-posta geldiğinde veya dosya yüklendiğinde bir web kancası çalışır
  • Zaman tabanlı: cron zamanlaması, ajanı sabit aralıklarla çalıştırır
  • Düzenli sorgulama tabanlı: ajan, yeni verileri almak için bir API'yi tekrar tekrar kontrol eder

Doğru tetikleyici türünü seçmek, ajanın gecikmesini ve kaynak kullanımını belirler.

Algılama Aşaması

Algılama, bir olayı almak veya tanımak anlamına gelir. Web kancalarında sunucunuz bir POST isteği alır. Düzenli sorgulamada ajanınız bir API'yi sorgular ve sonuçları en son görülen durumla karşılaştırır.

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

Karar Verme Aşaması

Bir olayı algıladıktan sonra ajan, bağlamı bir LLM'ye gönderir ve hangi eylemin gerçekleştirileceğini sorar. LLM ya bir araç seçer ya da doğrudan bir yanıt döndürür.

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)

Yürütme Aşaması

Yürütme, seçilen eylemi gerçekleştirir. Bu işlem bir API'yi çağırabilir, dosya yazabilir, mesaj gönderebilir veya başka bir iş akışını tetikleyebilir. Hataları her zaman ele alın ve sonuçları günlüğe kaydedin.

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)

Durum Makinesi Modeli

Durum makinesi, otomasyon ajanları için güçlü bir modeldir. Durumlar şunlar olabilir: IDLE, DETECTING, DECIDING, EXECUTING, ERROR. Geçişler, olaylar veya koşullar gerçekleştiğinde meydana gelir.

Durum makineleri, ajan davranışını öngörülebilir ve hata ayıklamayı daha kolay hâle getirir.

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

E-posta Alındığında Tetikleme Deseni

Gmail anlık bildirimleri Pub/Sub kullanır. Yeni bir e-posta geldiğinde Google, konu başlığınıza bir ileti yayımlar. Ajanınız bir web kancası alır, e-postayı getirir ve işler.

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

Dosya Yükleme Tetikleme Deseni

S3 olay bildirimleri veya yerel dosya sistemi izleyicileri, dosyalar göründüğünde ajanları tetikleyebilir. watchdog kitaplığı, yeni dosyalar için dizinleri izler.

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

Zamana Dayalı Tetikleme Deseni

Zamana dayalı tetikleyiciler, ajanları bir zamanlamaya göre çalıştırır. İşlem içi zamanlama için APScheduler'ı, işlem düzeyinde zamanlama içinse bir sistem cron işini kullanın.

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

İdempotent Eylem Yürütme

Otomasyon ajanları idempotent olmalıdır: aynı eylemi iki kez çalıştırmak, yinelenen etkilere yol açmamalıdır. İdempotentlik anahtarlarını ve eylemden önce kontrol etme kalıplarını kullanın.

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

Hata Durumları ve Kurtarma

Dayanıklı ajanlar hataları sorunsuz biçimde ele alır. Yürütme başarısız olduğunda ajan üstel bekleme artışıyla yeniden deneyebilir, bir kişiyi uyarabilir veya manuel inceleme için işlenemeyenler kuyruğuna taşıyabilir.

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)

Bilgi Kontrolü: Tetikleyici-Eylem Kalıpları

Tetikleyici-eylem ajanı kalıplarını anlayıp anlamadığınızı sınayın.

Hepsini Birleştirme

Tam bir tetikleyici-eylem ajanı tüm parçaları bir araya getirir: bir tetikleyici kaynağı (e-posta, dosya, zamanlayıcı), bir algılama katmanı, LLM tabanlı karar verme, idempotent yürütme, yeniden deneme mantığı ve durum takibi.

Basit başlayın: tek bir tetikleyici türü ve tek bir eylem kullanın. Ajanın davranışına güveniniz arttıkça karmaşıklığı kademeli olarak ekleyin.

Sıkça Sorulan Sorular

“Tetikleyici-Eylem Aracı Kalıpları” dersi ücretsiz mi?

Evet — “Tetikleyici-Eylem Aracı Kalıpları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Tetikleyici-Eylem Aracı Kalıpları” dersinde ne öğreneceğim?

Etkinlik tespiti → karar → eylem: temel otomasyon döngüsü. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Tetikleyici-Eylem Aracı Kalıpları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tetikleyici-Eylem Aracı Kalıpları
  2. Aracıları Web Kancalarına Bağlama
  3. Zamanlama ve Cron Tabanlı Aracılar
  4. Birden Fazla Uygulama İçin Otomasyon Hattı Oluşturma
← AI Agents Sayfasına Dön