- Pipeline orchestrator פעיל ב-Python או TypeScript — לפחות 4 stages עם הגדרת input/output/criteria לכל אחד
- מנגנון checkpoint מלא — שמירת state אחרי כל stage מוצלח, עם resume logic שממשיך מהנקודה שנפלה
- Error handling plan מתועד — Error Matrix עם strategy (retry/skip/abort/escalate) לכל stage ולכל סוג שגיאה
- Prompt versioning system — תיקיית prompts/ עם קבצי version נפרדים לכל stage, orchestrator שקורא מהם
- Structured logging פעיל — כל stage רושם start_time, end_time, tokens_used, cost, model, outcome
- Domain-specific pipeline — pipeline מותאם לדומיין שלכם (code generation, data processing, content, או DevOps)
- מסמך שגרת עבודה מעודכן — כולל pipeline maintenance: cost review, prompt updates, performance monitoring
- תוכלו להבדיל בין pipeline (סדרתי), team (מקבילי), ו-script (קריאה בודדת) ולבחור את הדפוס הנכון לכל workflow
- תוכלו לתכנן pipeline רב-שלבי מ-0 — Stage Specification Template עם input, output, agent config, success criteria, failure action
- תוכלו לממש orchestrator ב-Python או TypeScript שמריץ stages בסדר, מעביר data, עושה checkpoint, ומטפל בשגיאות
- תוכלו להוסיף monitoring מקצועי — structured logging, cost tracking, performance metrics, ו-alerting
- תוכלו להתאים את Universal Pipeline Template לדומיין שלכם ולהריץ pipeline end-to-end על input אמיתי
- פרקים קודמים: פרק 1 (Headless Mode — הבנת
claude -p), פרק 3 או 4 (Agent SDK — Python או TypeScript), פרק 5 (Agent Teams — להבנת ההבדל בין pipeline לצוות) - כלים נדרשים: Python 3.10+ או Node.js 18+, Agent SDK מותקן (
pip install claude-agent-sdkאוnpm install @anthropic-ai/claude-agent-sdk), מפתח ANTHROPIC_API_KEY פעיל, IDE או עורך טקסט - ידע נדרש: כתיבת scripts ב-Python או TypeScript, הבנת async/await (ראו תזכורת למטה), ידע בסיסי ב-JSON, הבנת מושג ה-Agent Loop מפרקים 3-4
- זמן משוער: 4-5 שעות | עלות משוערת: ~$10-25 (ריצות pipeline הן הכי כבדות בטוקנים בקורס)
הריצו את הפקודות הבאות לפי השפה שלכם. אם משהו נכשל — תקנו לפני שממשיכים.
# Python:
python3 --version # צריך 3.10 ומעלה
python3 -c "import claude_agent_sdk; print('SDK OK')"
echo $ANTHROPIC_API_KEY # צריך להתחיל ב-sk-ant-
# TypeScript:
node --version # צריך 18 ומעלה
npx tsx -e "import { Agent } from '@anthropic-ai/claude-agent-sdk'; console.log('SDK OK')"
echo $ANTHROPIC_API_KEY # צריך להתחיל ב-sk-ant-
async/await תזכורת קצרה: בפרק הזה כל stage הוא פונקציה async שמחזירה Promise. קוראים לה עם await. ב-Python: result = await stage.run(). ב-TypeScript: const result = await stage.run(). אם אתם לא בטוחים — חזרו לפרק 3 (Python) סעיף async או פרק 4 (TypeScript) סעיף async/await.
בפרק 5 הרכבתם צוותי סוכנים שעובדים במקביל — Lead + Teammates שחוקרים, בונים, וסוקרים בו-זמנית. עכשיו אנחנו עוברים מעבודה מקבילית לשרשראות סדרתיות (Pipelines) — כל שלב בונה על הקודם, עם checkpoint, error handling, ו-monitoring. ההבדל: צוותים מתאימים כשתת-משימות עצמאיות, pipelines מתאימים כשכל שלב מזין את הבא. בפרק 7 ניקח את ה-pipelines שבנינו ונפרוס אותם בDocker, שרתים מרוחקים, וסביבות enterprise — כדי שהם ירוצו באופן אמין ומאובטח בייצור.
| מונח (English) | תרגום | הסבר |
|---|---|---|
| Production Pipeline | צינור עבודה לפרודקשן | שרשרת עיבוד רב-שלבית אוטומטית — פלט של שלב הופך לקלט של הבא, עם error handling ו-monitoring |
| Orchestrator | מנצח / מתאם | הקוד שלכם (Python/TypeScript) שמנהל את ה-pipeline: מריץ stages בסדר, מעביר data, מטפל בשגיאות |
| Stage | שלב | יחידת עבודה בודדת ב-pipeline: קלט מוגדר, agent config, פלט, קריטריון הצלחה, פעולה בכישלון |
| Checkpoint | נקודת שמירה | שמירת state של ה-pipeline אחרי כל stage מוצלח — מאפשר resume בלי התחלה מחדש |
| Error Matrix | מטריצת שגיאות | טבלה שממפה לכל stage ולכל סוג שגיאה את אסטרטגיית ה-recovery: retry, skip, abort, escalate |
| Prompt Versioning | ניהול גרסאות Prompts | שמירת prompts כקבצים נפרדים עם גרסאות (v1.md, v2.md) במקום inline — מאפשר השוואה ו-rollback |
| Structured Logging | רישום מובנה | לוגים בפורמט קבוע: start_time, end_time, tokens, cost, model, outcome — לא טקסט חופשי |
| Backpressure | לחץ נגדי | דפוס שמאט את קצב הקלט כשהפלט מיוצר מהר מדי ל-downstream — מונע הצפה |
מה זה Pipeline ולמה הוא שונה
Pipeline (צינור עבודה) הוא שרשרת עיבוד רב-שלבית שבה הפלט של שלב אחד הופך לקלט של הבא. זה כמו פס ייצור במפעל: כל תחנה עושה את שלה, מעבירה לתחנה הבאה, ובסוף יוצא מוצר מוגמר.
ההבדל מ-script פשוט (פרק 1) ומצוות (פרק 5):
- Script = קריאה בודדת ל-Claude, תוצאה בודדת. אין שלבים, אין recovery.
- Pipeline = כמה קריאות ברצף, כל אחת בונה על הקודמת. שלבים מוגדרים, error handling, logging.
- Team = כמה קריאות במקביל, סינתזה בסוף. מתאים כשתת-משימות עצמאיות.
ההבדל הקריטי מ-ad-hoc automation: pipelines מתוכננים מראש עם שלבים מוגדרים, error handling, logging, ותוכננו לרוץ באופן אמין וחוזר — שוב ושוב, באותה איכות.
מתי צריך pipeline ולא script:
- התהליך כולל 3+ שלבים שכל אחד בונה על הקודם
- צריך recovery — אם שלב 5 מ-7 נכשל, לא רוצים להתחיל מ-1
- צריך monitoring — לדעת כמה עלה, כמה זמן לקח, מה הצליח ומה נכשל
- התהליך חוזר על עצמו — ירוץ שוב מחר, בשבוע הבא, בכל PR
מה הטעות: לכתוב prompt אחד ענק ל-Claude: "תחקור את הנושא, תכתוב outline, תכתוב draft, תערוך, ותפרסם".
למה זה מפתה: פשוט יותר — שורה אחת, בלי orchestrator, בלי stages.
מה לעשות במקום: כל stage נפרד עם input/output מוגדר. Single-prompt pipelines נשברים ב-scale: אי אפשר לדבג stage ספציפי, אי אפשר לעשות retry לשלב בודד, אי אפשר לחסוך עלות של שלבים שכבר הצליחו, ואי אפשר להחליף model לשלב ספציפי.
חשבו על תהליך שאתם עושים שוב ושוב בפרויקט (deploy, code review, report generation, content creation). כתבו את השלבים שלו ברשימה ממוספרת. כמה שלבים יצאו? אם 3+, יש לכם pipeline פוטנציאלי.
| קריטריון | Script | Pipeline | Team |
|---|---|---|---|
| מספר קריאות ל-Claude | 1 | 3-10 (סדרתי) | 3-5 (מקבילי) |
| תלויות בין שלבים | אין | סדרתיות — כל שלב תלוי בקודם | אין — עצמאיים |
| Error recovery | אין — הכל או כלום | retry/skip/abort per stage | partial success |
| Monitoring | בסיסי | per-stage logging, cost tracking | per-teammate tracking |
| הכי טוב ל... | one-off tasks | repeatable multi-step workflows | parallel independent tasks |
תכנון Pipeline רב-שלבי
התחילו מהפלט. לפני שחושבים על שלבים — הגדירו בדיוק מה ה-pipeline מייצר. פיצ'ר מפורס? מאמר מפורסם? דוח בדיקה? מהפלט עובדים אחורה: מה השלב האחרון? מה הוא צריך כקלט? מי מייצר את הקלט הזה?
ה-Stage Specification Template: לכל stage צריך להגדיר 6 שדות:
| שדה | תיאור | דוגמה |
|---|---|---|
| Name | שם השלב | "Research Stage" |
| Input | מה מקבל מהשלב הקודם | topic string + config JSON |
| Agent Config | model, tools, max_turns, instructions | Opus, WebSearch+Read, 20 turns |
| Output | מה מייצר לשלב הבא | research-bundle.json |
| Success Criteria | איך יודעים שעבד | JSON exists, 5+ sources |
| Failure Action | מה עושים אם נכשל | retry with different queries |
כמה stages? 5-8 stages זה ה-sweet spot. פחות מ-3? script מספיק. יותר מ-10? חלקו ל-sub-pipelines.
קחו את התהליך שזיהיתם. הגדירו לכל שלב את 6 השדות של Stage Specification Template: Name, Input, Agent Config, Output, Success Criteria, Failure Action. כתבו את זה כטבלה.
ספרו את השלבים. פחות מ-3: האם script מספיק? יותר מ-10: איפה אפשר לאחד? סמנו שלבים שיכולים לרוץ במקביל (אין תלות ביניהם).
הדפוס Orchestrator
ה-Orchestrator (מנצח) הוא הקוד שלכם שמנהל את ה-pipeline — הוא לא Claude. הוא קוד Python או TypeScript שמריץ stages בסדר, מעביר data ביניהם, מטפל בשגיאות, ומנהל logging.
עיקרון מפתח: Separation of Concerns.
- Orchestrator — flow control, error handling, logging, checkpointing
- Stages — agent configuration, prompt engineering, output parsing
- Agents — tool use, reasoning, execution (Claude Code)
ה-Orchestrator לעולם לא קורא ל-Claude ישירות — הוא מאציל ל-stage objects שמכמסים את הלוגיקה.
Python Orchestrator — skeleton:
import json
from claude_agent_sdk import Agent
class Stage:
def __init__(self, name, model, prompt_file, tools, max_turns=10):
self.name = name
self.model = model
self.prompt_file = prompt_file
self.tools = tools
self.max_turns = max_turns
def execute(self, input_data):
prompt = open(self.prompt_file).read()
prompt = prompt.replace("{INPUT}", json.dumps(input_data))
agent = Agent(model=self.model, max_turns=self.max_turns)
result = agent.run(prompt)
return json.loads(result.text)
class Orchestrator:
def __init__(self, stages, checkpoint_dir="./checkpoints"):
self.stages = stages
self.checkpoint_dir = checkpoint_dir
def run(self, initial_input):
data = initial_input
for i, stage in enumerate(self.stages):
print(f"[Stage {i+1}/{len(self.stages)}] {stage.name}...")
data = stage.execute(data)
self._save_checkpoint(i, stage.name, data)
print(f" Done: {stage.name}")
return data
def _save_checkpoint(self, index, name, data):
path = f"{self.checkpoint_dir}/stage_{index}_{name}.json"
with open(path, 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
TypeScript Orchestrator — skeleton:
import { Agent } from '@anthropic-ai/claude-agent-sdk';
import fs from 'fs/promises';
interface StageConfig {
name: string;
model: string;
promptFile: string;
maxTurns?: number;
}
async function runPipeline(stages: StageConfig[], initialInput: any) {
let data = initialInput;
for (let i = 0; i < stages.length; i++) {
const stage = stages[i];
console.log(`[Stage ${i+1}/${stages.length}] ${stage.name}...`);
const prompt = await fs.readFile(stage.promptFile, 'utf-8');
const agent = new Agent({ model: stage.model, maxTurns: stage.maxTurns ?? 10 });
const result = await agent.run(prompt.replace('{INPUT}', JSON.stringify(data)));
data = JSON.parse(result.text);
await fs.writeFile(
`./checkpoints/stage_${i}_${stage.name}.json`,
JSON.stringify(data, null, 2)
);
console.log(` Done: ${stage.name}`);
}
return data;
}
העתיקו את ה-skeleton (Python או TypeScript) והתאימו: שנו רשימת stages, הגדירו model לכל stage, צרו prompt ראשוני לכל stage. הריצו עם 2 stages פשוטים כדי לוודא שהזרימה עובדת.
תקשורת בין שלבים וניהול Data Flow
שלבים ב-pipeline צריכים להעביר data ביניהם. שלוש גישות:
1. File-based (דיסק): Stage A כותב output לקובץ, Stage B קורא. פשוט, debuggable, אבל איטי ל-data גדול.
2. In-memory (זיכרון): Stage A מחזיר dict/object, ה-orchestrator מעביר ל-Stage B. מהיר, אבל אובד ב-crash.
3. Hybrid (שניהם): data עובר in-memory, וכל stage גם כותב checkpoint לדיסק. זו הגישה המומלצת.
ה-Checkpoint Pattern: אחרי כל stage מוצלח, שמרו state לדיסק. Crash ב-stage 6 = resume מ-stage 6, לא מ-1.
מה הטעות: להריץ pipeline של 7 stages בלי שמירת state. Stage 6 נכשל — חוזרים ל-stage 1.
למה זה מפתה: "למה לבזבז זמן על כתיבה לדיסק?" — כי ב-crash אחד אתם מפסידים $5-8 ו-20 דקות.
מה לעשות במקום: תמיד checkpoint. 10 שורות קוד חוסכות שעות ודולרים.
Resume Logic — דוגמה:
def run_with_resume(self, initial_input):
last_checkpoint = self._find_last_checkpoint()
if last_checkpoint:
start_index = last_checkpoint['stage_index'] + 1
data = last_checkpoint['data']
print(f"Resuming from stage {start_index + 1}...")
else:
start_index = 0
data = initial_input
for i in range(start_index, len(self.stages)):
stage = self.stages[i]
data = stage.execute(data)
self._save_checkpoint(i, stage.name, data)
return data
Data Validation at Boundaries: לפני שמעבירים output מ-stage A ל-stage B, ולדו שהוא בפורמט הנכון. schema mismatch ב-stage 5 קשה לדבג — עדיף לתפוס מיד אחרי stage A.
הוסיפו checkpoint ל-orchestrator: שמירת state לקובץ JSON אחרי כל stage. הוסיפו resume logic שבודק checkpoints. הריצו, עצרו באמצע (Ctrl+C), הריצו שוב — וודאו שממשיך מהנקודה הנכונה.
טיפול בשגיאות ו-Recovery
ב-pipeline, שגיאות הן עניין של "מתי", לא "האם". API timeouts, rate limits, agent confusion, malformed output — כל אלה יקרו.
5 אסטרטגיות Recovery:
- Retry Same: שגיאות חולפות (API timeout, rate limit 429) — נסו שוב עם exponential backoff. 3 ניסיונות מקסימום.
- Retry Different: הגישה נכשלה — prompt שונה או model שונה. אם Sonnet נכשל, נסו Opus.
- Skip: שלבים אופציונליים (polish, formatting) — pipeline ממשיך עם תוצאה בת-שימוש.
- Abort: שלבים קריטיים (validation, testing) — עצרו. אל תמשיכו עם data שלא עבר בדיקה.
- Human Escalation: שגיאות לא ברורות — עצרו, שלחו notification, המתינו להחלטה אנושית.
ה-Error Matrix: לפני שמריצים, כתבו טבלה שממפה לכל stage את ה-strategy לכל סוג שגיאה:
| Stage | API Timeout | Bad Output | Missing Data |
|---|---|---|---|
| Research | retry x3 | retry different prompt | abort |
| Write | retry x3 | retry with more context | abort |
| Edit | retry x2 | skip | skip |
| Validate | retry x3 | abort | abort |
- Retry Same — אותו prompt, אותו model. לשגיאות חולפות.
- Retry Different — prompt שונה, model חזק יותר. כשהגישה נכשלה.
- Skip Stage — דלגו על שלב אופציונלי. ה-pipeline ממשיך.
- Pause for Human — עצרו, notification, המתינו להחלטה.
- Abort Pipeline — עצרו הכל. checkpoint. דווחו מה נכשל.
תמיד התחילו מלמעלה ורדו: retry קודם, abort רק כמוצא אחרון.
כתבו Error Matrix ל-pipeline שלכם: לכל stage, מפו 2-3 שגיאות אפשריות ואת ה-strategy לכל אחת. שמרו — היא תנחה את ה-error handling code.
Versioning ו-Rollback
Pipelines משתנים: prompts מתעדכנים, models חדשים יוצאים, stages מתווספים. בלי versioning, אי אפשר לדעת למה התוצאה השתנתה.
3 סוגי versioning:
1. Pipeline Versioning: שינוי ב-orchestrator = commit + tag (v1.0, v1.1). כל output מסומן באיזה version ייצר אותו.
2. Prompt Versioning: Prompts משתנים לעיתים קרובות. שמרו כקבצים נפרדים:
prompts/
research-v1.md
research-v2.md
write-v1.md
write-v2.md
לעולם אל תמחקו גרסה ישנה. אם v2 לא עובד — חזרו ל-v1.
3. Output Versioning: כל ריצה מייצרת output בתיקייה עם timestamp:
output/
2026-03-31_14-30_v1.2/
research.json
draft.md
final.html
pipeline-log.json
מה הטעות: לשנות prompt inline, להריץ, לראות תוצאה גרועה, ולא לזכור מה היה לפני.
למה זה מפתה: מהיר. "רק שינוי קטן."
מה לעשות במקום: קבצים נפרדים עם גרסאות. כל שינוי = קובץ חדש. אל תמחקו ישנים.
A/B Testing: הריצו גרסה ישנה וחדשה על אותו input, השוו quality. ככה תדעו אם שינוי שיפר או הרע.
צרו תיקיית prompts/. העבירו prompt של stage אחד ל-prompts/stage1-v1.md. שנו את ה-orchestrator לקרוא משם. שנו prompt, שמרו כ-v2, הריצו שניהם — השוו.
Logging ו-Monitoring
Pipeline בלי logging הוא כמו מכונית בלי dashboard — רצה, אבל אתם לא יודעים כמה דלק נשאר.
Structured Logging — דוגמה:
{
"stage": "research",
"start_time": "2026-03-31T14:30:00Z",
"end_time": "2026-03-31T14:32:15Z",
"duration_seconds": 135,
"model": "claude-opus-4-6",
"tokens_input": 2500,
"tokens_output": 8200,
"cost_usd": 0.45,
"status": "success",
"output_summary": "Found 8 sources, 15 key facts"
}
Log Levels:
- DEBUG — full agent conversation (לפיתוח, לא production)
- INFO — stage start/end, key decisions, output summaries
- WARN — recoverable errors, retries, skipped stages
- ERROR — failures, aborts, unrecoverable issues
Pipeline Dashboard: דף HTML פשוט: ריצות אחרונות, timing per stage, total cost, success rate. JSON file + HTML table מספיק להתחלה.
Alerting: thresholds שמפעילים alerts:
- עלות > $X — Slack notification
- זמן > Y דקות — Slack notification
- failure rate > Z% — הודעה דחופה
Cost Tracking: צברו עלויות per stage, per run, per day. זהו stages יקרים — אולי אפשר להוריד model (Opus → Sonnet) בלי לפגוע באיכות.
הוסיפו structured logging ל-stage אחד: רשמו start_time, end_time, duration, model, tokens, cost, status. הריצו ובדקו שהלוג JSON נכתב.
ביצוע שלבים במקביל
לא כל ה-stages חייבים לרוץ ברצף. אם stage B לא תלוי ב-output של stage A — הם יכולים לרוץ במקביל.
Python:
import asyncio
async def run_parallel(stage_a, stage_b, input_data):
result_a, result_b = await asyncio.gather(
stage_a.execute_async(input_data),
stage_b.execute_async(input_data)
)
return {"outline": result_a, "images": result_b}
TypeScript:
const [resultA, resultB] = await Promise.all([
stageA.execute(inputData),
stageB.execute(inputData)
]);
const merged = { outline: resultA, images: resultB };
מה הטעות: 5 stages במקביל = 5 API calls בו-זמנית — ושגיאות 429 כשחוצים rate limit.
למה זה מפתה: "יותר מקבילי = יותר מהיר" — נכון רק עד גבול ה-rate limit.
מה לעשות במקום: בדקו rate limits לפני. Semaphore / concurrency limiter. התחילו 2-3 במקביל.
הכלל: Stage B יכול להתחיל בלי output של A? הריצו במקביל. B חייב A? סדרתי. B צריך חלק מ-A? פצלו.
זהו 2 stages שלא תלויים. הריצו במקביל עם asyncio.gather או Promise.all. מדדו: כמה זמן חסכתם?
מקרה מבחן: Pipeline תוכן 7-שלבי
זה pipeline אמיתי שבנה את הקורס שאתם קוראים.
nVision Academy משתמשת ב-7 שלבים ליצירת פרקים חינוכיים:
| Stage | Agent | Model | Input | Output | Time |
|---|---|---|---|---|---|
| 1. Research | topic-researcher | Opus | syllabus entry | research.json | 3-5 min |
| 2. Plan | chapter-planner | Opus | research + syllabus | plan.json | 2-3 min |
| 3. Write | content-writer | Opus | plan + Gold Standard | chapter.html + manifest | 8-15 min |
| 4. Structure | structure-reviewer | Sonnet | manifest.json | structure-review.json | 1 min |
| 5. Fact Check | fact-checker | Sonnet | grep claims | fact-check.json | 3-5 min |
| 6. Value Audit | value-audit | Opus | 500-word sample | value-audit.json | 2-3 min |
| 7. Publish Gate | publish-gate | Sonnet | all eval JSONs | publish-decision.json | <1 min |
ביצועים: 7,500-10,000 מילים | 15-25 דקות | $3-8 per chapter | 25-30/30 Gold Standard
עקרונות עיצוב מרכזיים:
- Metadata-first: Evaluators (stages 4-6) עובדים על manifest JSON, לא HTML מלא — חוסך ~90% טוקנים
- Stages 4-6 מקביליים: Structure review, fact check, value audit רצים במקביל
- Model specialization: Sonnet ל-mechanical work, Opus ל-judgment work
- Repair loop: publish-gate = "repair_first" → targeted repair → re-evaluate affected only
חיסכון טוקנים metadata-first: ~2,000 tokens per chapter evaluation vs ~15,000-25,000 for full reads. 10% tokens for 95% coverage.
זהו 3 עקרונות מה-pipeline למעלה שתוכלו ליישם אצלכם: (1) metadata-first, (2) parallel evaluation, (3) model specialization. כתבו איך כל עיקרון יתורגם ל-pipeline שלכם.
דפוסי Pipeline לדומיינים שונים
Pipelines מתאימים לכל דומיין. 5 דפוסים מרכזיים:
1. Code Generation: Requirements → Design → Implementation → Testing → Review → Documentation → Deploy
2. Data Processing: Ingest → Validate → Clean → Transform → Analyze → Report → Archive
3. DevOps: Monitor → Detect → Diagnose → Fix → Test → Deploy → Verify
4. Content Marketing: Ideation → Research → Draft → Edit → SEO → Publish → Promote
5. Customer Support: Receive → Classify → Research → Draft → Review → Send → Follow up
Input → Validate → Process (1-3 stages) → Review → Output → Archive
כל דומיין מתאים את ה-template: ה-Process stages משתנים, ה-Review מותאם, אבל המבנה — Input, Process, Review, Output — אוניברסלי.
טיפ: התחילו עם 3 stages (Process → Review → Output) והוסיפו רק כשאיכות דורשת. Over-engineering של pipelines היא טעות #1.
בחרו דומיין. התאימו Universal Pipeline Template: Input → Validate → Process → Review → Output → Archive. מלאו Stage Specification לכל stage.
- הגדירו 4-5 stages עם Stage Specification Template.
- כתבו orchestrator ב-Python או TypeScript — skeleton מסעיף 6.3 כבסיס.
- הוסיפו checkpoint: שמירת state, resume logic.
- הוסיפו error handling: retry x3 ל-API, abort ל-validation, skip לאופציונליים.
- הוסיפו structured logging: timing, tokens, cost, status per stage.
- הריצו end-to-end על input אמיתי. בדקו checkpoint, error handling, logs.
פלט: Pipeline orchestrator פעיל עם checkpoints, error handling, ו-logging.
- צרו
prompts/עם version files לכל stage. - הוסיפו pipeline version tag ל-output directory.
- בנו dashboard HTML פשוט: runs, timing, cost, success rate.
- הגדירו alert threshold: cost > $X או time > Y minutes.
- הריצו 3 פעמים, בדקו dashboard.
פלט: Pipeline עם prompt versioning, output versioning, monitoring dashboard.
- בחרו domain: code generation, data, content, או DevOps.
- התאימו Universal Pipeline Template — Stage Specification לכל stage.
- הגדירו agent config per stage: model, tools, max_turns.
- כתבו prompt templates ושמרו ב-
prompts/כ-v1. - הריצו end-to-end על input אמיתי.
- תעדו: timing, cost, quality. איפה יש שיפור?
פלט: Domain-specific pipeline עם documentation ו-prompt templates.
- זהו 2+ stages עצמאיים.
- ממשו parallel execution עם asyncio.gather / Promise.all.
- הוסיפו concurrency limiter (max N parallel calls).
- מדדו: parallel vs sequential timing ועלות.
- תעדו: timing comparison, rate limit behavior.
פלט: Pipeline עם parallel stages, מדידת ביצועים.
בנוסף לשגרה מפרקים 1-5:
| תדירות | משימה |
|---|---|
| יומית | בדקו pipeline logs: הצלחות, כישלונות, עלויות. חפשו anomalies. |
| יומית | בדקו checkpoints: pipelines שנעצרו באמצע ומחכים ל-resume? |
| שבועית | סקרו cost per stage: stage שעלה פתאום? מודל יקר מדי? |
| שבועית | עדכנו prompt versions אם נדרש — v(N+1), אל תמחקו ישנים |
| שבועית | A/B test: השוו output של prompt v(N) מול v(N+1) |
| חודשית | סקרו Error Matrix: stages חדשים שאין להם error strategy? |
| חודשית | בדקו SDK version updates — שדרוג יכול לשפר או לשבור |
בנו Pipeline Orchestrator מינימלי: 3 stages, checkpoint after each, retry on failure. skeleton מסעיף 6.3, checkpoint מסעיף 6.4, הריצו end-to-end. ברגע שיש orchestrator פעיל — כל השאר הוא הרחבה.
- למה pipeline עדיף על single-prompt לתהליכים רב-שלביים? (רמז: debugging, retry, cost, model selection per stage)
- מה ההבדל בין Orchestrator ל-Agent, ולמה ההפרדה חשובה? (רמז: separation of concerns)
- למה checkpoint קריטי, ומה קורה בלעדיו? (רמז: crash ב-stage 6 מ-7)
- מתי Skip ומתי Abort? (רמז: שלב אופציונלי vs שלב קריטי)
- למה Prompt Versioning חשוב יותר מ-Code Versioning ב-pipelines? (רמז: prompts משתנים לעיתים קרובות יותר)
4 מתוך 5 נכונות = עברתם.
Production Pipelines הם הדרך להפוך אוטומציה חד-פעמית למערכת אמינה, חוזרת, ומדידה. ה-Orchestrator שלכם מנהל את הזרימה — stages בסדר, checkpoints, error handling, monitoring. כל stage הוא יחידה עצמאית עם input/output מוגדר, agent config ייעודי, ו-error strategy. ה-key insight: pipelines הם לא "scripts ברצף" — הם מערכת עם recovery, versioning, monitoring, ו-cost control שרצה שוב ושוב באותה איכות. בפרק הבא ניקח את ה-pipelines לproduction אמיתי: Docker, שרתים מרוחקים, enterprise.
- ☐ הגדרתי Stage Specification Template לכל stage (Name, Input, Output, Config, Criteria, Failure)
- ☐ כתבתי Orchestrator ב-Python או TypeScript שמריץ stages ומעביר data
- ☐ הוספתי Checkpoint: שמירת state אחרי כל stage, resume logic
- ☐ בדקתי resume: עצרתי באמצע, הרצתי שוב, וודאתי שממשיך מהנקודה הנכונה
- ☐ כתבתי Error Matrix: strategy לכל stage ולכל שגיאה
- ☐ הוספתי error handling: retry, skip, abort לפי ה-Matrix
- ☐ צרתי prompts/ עם version files לכל stage
- ☐ הוספתי structured logging: timing, tokens, cost, status per stage
- ☐ הוספתי output versioning: תיקייה עם timestamp לכל ריצה
- ☐ זיהיתי stages מקביליים ומימשתי parallel execution
- ☐ הרצתי end-to-end על input אמיתי
- ☐ בניתי domain-specific pipeline מותאם
- ☐ תיעדתי: timing, cost, quality
- ☐ עדכנתי שגרת עבודה עם pipeline maintenance