המטרה
שמירת מדור החדשות בספרדית של Nodo.ia טרי כל יום בלי עורך ידני — pipeline אוטומטי מקצה לקצה שמושך, משכתב, מאמת, מטפל בתמונות, ופותח PR מול ריפו התוכן, עם digest שבועי.
הפתרון
מודול Node.js (src/newsPipeline/) משולב ב-backend של Nodo.ia שרץ עם node-cron (ברירת מחדל 06:15 America/Santo_Domingo), קורא כתבות/קטגוריות מ-GitHub עם fallback ל-local/MinIO, מושך RSS, scraping למקור, שכתוב עם gpt-4o-mini תחת verify-and-repair, ייצור תמונות webp, הוספה ל-nodo-lab-articles.json ופתיחת PR דרך GitHub App או PAT. Job שבועי נפרד מייצר digest מבוסס analytics.
עיקרי הדברים
- לולאת verify-and-repair מסלקת את רוב ה-hallucinations לפני פרסום
- אספקה בשליטת העורך: PRs במקום כתיבה ישירה
- אותו מודול נפרס ל-dev/staging/prod ללא שינוי — הכל מונע ENV
- תמונות .webp מותאמות מובייל עם תקציב 150KB
האתגר
בקשת שכתוב נאיבית מ-LLM מכניסה hallucinations — שמות, תאריכים, מספרים שגויים.
לולאת verify-and-repair דו-שלבית: אחרי השכתוב קריאה שנייה מוודאת טענות מול המקור; כישלון מפעיל repair עד N ניסיונות, אחרת הכתבה מושלכת.
הצוות רצה אוטומציה אבל לא כתיבות לא מפוקחות לריפו הפרודקשן.
Pipeline פותח PR מול ה-base branch המוגדר (staging ב-dev, main ב-prod) — עורכים מאשרים וממזגים. אימות דרך GitHub App עם fallback ל-PAT.
dev/staging/prod מצפים לרשימות כתבות מעט שונות — סנכרון ידני רגיש לטעויות.
שרשרת load-order GitHub → local → MinIO → defaults, עם NEWS_GITHUB_SOURCE_BRANCH מיושר ל-PR base branch כך שכל סביבה קוראת את המצב שלה.
תמונות RSS/scrape גולמיות כבדות ומאיטות את ה-headers באפליקציה.
כל ריצה מייצרת .webp ברוחב 1024px, גובה 576, תקרת 150KB, עולה ל-MinIO (או local ב-dev) עם feature flags.
iteration מקומי הוביל לעלויות LLM מיותרות ולוגים רועשים.
Mock mode + fixtures דטרמיניסטיים + log file ייעודי רק ל-[news] לניפוי ממוקד.
מה נמסר
- מודול src/newsPipeline/ משולב ב-backend
- RSS fetcher ו-source scraper
- שכבת LLM rewrite + verify-and-repair על gpt-4o-mini
- PR flow ל-GitHub עם App/PAT auth ו-base branches לכל סביבה
- אופטימיזר .webp + אינטגרציית MinIO/local
- Job דיגסט שבועי מבוסס analytics
- תמיכה mock/dry-run + fixtures
- README מתעד את כל משטח NEWS_* env
- ערוץ לוגים [news] ייעודי
תוצאות
Daily 06:15
קצב
GitHub PR/run
אספקה
≤150KB .webp
תקציב תמונה
Weekly LLM
דיגסט
מה זה לימד אותי
- לולאת verify-and-repair חובה לכל pipeline שמפרסם למשתמשי קצה
- אספקה דרך PR במקום כתיבה ישירה שומרת שליטה של העורך
- עיצוב config-first (NEWS_* env) מאפשר לאותו pipeline לרוץ ללא שינוי ב-dev/staging/prod
