מעבר לנקודה מסוימת, העתקת אותו רצף צמתים לעשרה pipelines הופכת לחוב. תת-פייפליינים מאפשרים ל-pipeline לקרוא לאחר כמו לפונקציה: מגדירים לוגיקה פעם אחת, משתמשים בה בכל מקום — כולל בין ארגונים.
שתי לבנות סימטריות:
pipeline_callable(receiver, מוצהר על צומת Start) חושף pipeline מאחורי URL, עם חוזה קלטים ופלטים עם טיפוסים מוגדרים.pipeline_call(צומת) קורא ל-pipeline זה: הוא ממפה קלטיו מהקונטקסט הנוכחי, ומאחסן את התוצאה במפתח פלט.
חשיפת pipeline (pipeline_callable)
על ה-pipeline "השירות", אתם מוסיפים receiver pipeline_callable שמצהיר:
- קלטים — רשימת הפרמטרים הצפויים (שם, סוג, נדרש או לא).
- פלטים — המפתחות של התוצאה שמוחזרת.
- מפתח תגובה — איזה ערך מהקונטקסט מהווה את התגובה (
exchange.resultכברירת מחדל). - מצב תגובה —
sync(הקורא ממתין לתגובת JSON) אוstream(התקדמות בזמן אמת). - תקציב זמן — השהיית ביצוע מקסימלית (60 שניות כברירת מחדל, 300 שניות מקסימום).
קלט שהוצהר כחובה וחסר בקריאה גורם לכישלונה (400).
ה-pipeline מקבל אז URL ציבורי (עם אסימון), להעברה ל-pipeline הקורא. האסימון ניתן לרוטציה בכל עת לביטול גישה.
קריאה ל-pipeline (pipeline_call)
על ה-pipeline "הצרכן", הצומת pipeline_call מוגדר עם:
- ה-URL של ה-pipeline היעד (קבוע, אינו ניתן לתבנית: הוא מנותח בעת השמירה לזיהוי לולאות).
- מיפוי קלטים — לכל פרמטר צפוי, הסלקטור מהקונטקסט שממלא אותו.
- מפתח הפלט — היכן לאחסן את התוצאה (
exchange.subresultכברירת מחדל). - המצב (
sync,ack,stream) ו-timeout (30 שניות כברירת מחדל, 300 שניות מקסימום).
במקרה של כישלון (timeout, שגיאה, תגובה פגומה), ה-pipeline ממשיך: מפתח הפלט מקבל null ומפתח ._error מתאר מה קרה. עליכם לתזמר את ההמשך (ענף נסיגה, התראה).
קריאות בין ארגונים: opt-in ומבוקר
תת-pipeline יכול להיקרא על-ידי ארגון אחר — זו הבסיס לשיתוף יכולות בין גופים. המודל נשאר קפדני:
- נדחה כברירת מחדל. קריאה בין-ארגונית אפשרית רק אם מנהל ה-pipeline החושף מאשר זאת במפורש (
allow_cross_org). - חתימת HMAC מומלצת. ברגע שפותחים קריאה בין-ארגונית, מפעילים סוד משותף בשני הצדדים: כל בקשה חתומה (header
X-Pipeline-Signature), וה-receiver דוחה חתימה חסרה או לא תקינה (401). לאחר שנשמר, סוד זה אינו מוצג שוב לעולם, בשני הצדדים (ראו העורך החזותי, סעיף סודות); הסרתו בצד הקורא מבטלת את החתימה, הסרתו בצד החשוף מבטלת את האימות. - הכל מתועד. כל הפעלה כותבת שורת ביקורת (ארגון קורא, צומת, עומק, זמן תגובה, סטטוס) — לפני הביצוע, כדי שעקבות יישמר גם במקרה של תקרית. שני הצדדים מעיינים ביומנים שלהם (בצד הקורא כמו בצד הנקרא), בהתאם לזכות הגישה של GDPR.
חיוב: הארגון הנקרא משלם על המשאבים (LLM, קול...) שנוצלו במהלך הביצוע. לוגיקת האורח: אתם משתמשים במשאבי המארח שלכם.
הגנה מפני לולאות אינסוף
pipeline שיקרא לעצמו, ישירות או דרך שרשרת, יצרוך קרדיטים ללא הגבלה. שתי הגנות:
- זיהוי סטטי ברישום (בתוך ארגון): העורך מסרב לפרסם מחזור ישיר (
A → A) או עקיף (A → B → C → A), תוך ציון השרשרת הבעייתית. - מנגנון הגנה בזמן ריצה (בין ארגונים, שבהם ראות סטטית אינה אפשרית): כל קריאה מפיצה את עומקה; מעבר ל-10 רמות, הקריאה נדחית.
מצבי ביצוע
- סינכרוני (
sync) — הצומת ממתין לתגובה המלאה. מתאים לעיבוד קצר. - ללא המתנה (
ack) — הקריאה משוגרת וה-pipeline הקורא ממשיך מיד; מפתח הפלט נשאר ריק. - Streaming (
stream) — עבור תת-pipeline ארוך (הסקה LLM, עיבוד אצווה), ההתקדמות מתקבלת בזמן אמת (תחת<מפתח הפלט>._progress); ה-timeout חל אז על ההשהיה המרבית ללא אירוע, לא על משך הזמן הכולל.
מתי להשתמש
- פקטורינג של רצף שנוצל על-ידי כמה pipelines (סיכום שרשור, כישור lead, אימות מסמך).
- שיתוף יכולת בין ארגונים — גוף אחד חושף "אימות חשבונית מול ERP", אחר צורך אותה, עם ביקורת משני הצדדים.
- מקבוליות על מניפה של עיבודי-משנה עצמאיים מתוך לולאה.