תיעוד

אופרטורים דטרמיניסטיים

צמתי פעולה שאינם עוברים דרך LLM — HTTP, DB, טרנספורמציות, חישובים.

אופרטורים

אופרטור הוא צומת שמבצע פעולה דטרמיניסטית: ללא LLM, ללא אקראיות. לכל קלט נתון, הפלט הוא צפוי.

מדוע להשתמש בהם

כל לוגיקה שניתן לכתוב במפורש חייבת להיות כתובה כך. LLM שמחשב סכום או מעצב תאריך הוא anti-pattern: הוא איטי יותר, יקר יותר, ועלול לטעות.

כלל מעשי: אם אתם יודעים לכתוב את הפונקציה ב-5 שורות Python, זה אופרטור — לא agent.

סוגים זמינים

operator HTTP

מבצע קריאת HTTP (REST, GraphQL). תצורה:

  • URL (עם placeholders מהקונטקסט)
  • Method, headers, body
  • אימות: bearer, basic, api_key_header (header מותאם) או oauth2 (ראו להלן)
  • מיפוי התגובה לתוך slots

operator DB

מבצע שאילתה על בסיס נתונים הרשום ב-Administration ← בסיסי נתונים. תומך ב-Postgres, MySQL, MongoDB, ובבסיס הפנימי של betool עבור טבלאות user-defined.

file_transform

ממיר קובץ. Transformers מסופקים:

  • קריאה (PDF עם OCR, DOCX, XLSX, CSV)
  • חיתוך (לפי עמוד, לפי chunk של tokens)
  • המרה (HTML ← טקסט, Markdown ↔ HTML)
  • חילוץ מבנה (JSON מסכמה)

compute

חישובים ואגרגציות על slots מהקונטקסט:

  • סינון / map / reduce על רשימות
  • סטטיסטיקות עמודה-עמודה (count, total, pct)
  • הקרנות סכמה
  • תנאים לוגיים מורכבים

payload_mapper

הרכבת payload פלט מ-slots של הקונטקסט. שימושי להכנת ה-body של operator HTTP שבזרם.

code_step

כאשר לוגיקה דטרמיניסטית חורגת ממה ש-compute יכול לעשות, שלב קוד מבצע קוד מותאם ב-sandbox — נעול על-ידי סקירה אנושית. ראו שלבי קוד ממושלים.

אימות וסודות

אופרטורים שמתחברים למערכת חיצונית (HTTP, DB) מפנים לחשבון הרשום בארגון. ה-credentials אינם גלויים ב-pipeline עצמו — רק שם חשבון.

כתוצאה מכך: שינוי סיסמה אינו מצריך עריכה מחדש של כל pipeline.

OAuth2 יוצא (client_credentials)

עבור APIs שדורשים אסימון OAuth2 (ענן ארגוני, ERP, ספקים צד שלישי), operator HTTP תומך במצב oauth2. אתם רושמים credential OAuth2 בארגון — token_url, client_id, client_secret, scope — והצומת מפנה אליו רק עם מזהה שאינו סודי.

בזמן הקריאה, betool מקבל אסימון ומשתמש בו כל עוד הוא תקף; הוא מרענן אותו באופן עצלני עם פקיעתו, ללא משימת רקע. ה-client_secret אינו מוחזר בקריאה על-ידי API הניהול (רק אינדיקטור יש סוד נחשף), והאסימון שמתקבל מוצב ב-Authorization: Bearer … על הבקשה היוצאת.

שינוי הסוד לאחר rotation בצד הספק אינו מצריך עריכה מחדש של pipeline: הקריאה הבאה מרעננת אוטומטית.

אידמפוטנטיות

כל אופרטור שמייצר תופעת לוואי (POST HTTP, INSERT DB, שליחת אימייל) חייב להיות אידמפוטנטי בצד היעד. פרקטיקה מומלצת:

  • לכלול idempotency_key ב-payload (בדרך כלל exchange_id).
  • לבדוק בצד היעד האם המפתח כבר טופל.

betool אינו מנסה מחדש אופרטור שנכשל: על ה-pipeline שלכם לתזמר את אסטרטגיית ה-retry (לולאה + תנאי).