ToCode
1.43K subscribers
4.06K links
טיפים קצרים למתכנתים מאת ינון פרק
Download Telegram
📌 מתי לבנות סוכן

כשהראיתי היום בקורס AI איך להשתמש ב Pydantic AI כדי לבנות סוכן מאפס התגובה הראשונה שקיבלתי היתה "אבל למה?". אנחנו הרי יודעים להשתמש ב claude -p בתוך סקריפטים או תוכניות קטנות אז מה הבעיה להשתמש בו בכל מקום שנצטרך לשלב בינה מלאכותית בתוכנית-

1. צריכים תרגום? תקראו ל claude עם פרומפט שמבקש תרגום.
2. צריכים לחפש בלוג? שלחו את קלוד למצוא מה מעניין שם.
3. צריכים לסנן איזה PDF הוא חשבונית? פרומפט מתאים לקלוד קוד ותקבלו את הקבצים מסודרים.

אז בשביל מה צריך לכתוב סוכן? אלה התשובות הכי מעניינות שאספנו:

1. ביצועים - כתיבת סוכן מאפשרת להריץ את כל הפניות ל LLM מאותו תהליך במקום להריץ תהליך נפרד לכל פניה.
2. שליטה בטוקנים - כתיבת סוכן מאפשרת לי לקבוע את ה System Prompt ולבחור בדיוק מה יישלח ל LLM.
3. חיבור לתוכנית שלי באמצעות מימוש כלים - במקום לכתוב MCP אני יכול לכתוב פונקציות פייתון פשוטות שיאפשרו למודל להתממשק עם המערכת הקיימת שלי.
4. פלט מובנה - פניה לסוכן בסקריפט עם claude -p מחזירה תמיד תשובה כמחרוזת. סוכן יכול לדרוש Structured Output כדי לקבל מבנה צפוי של התשובה.

בסוף הגבול בין המוצרים דק ואפשר לפתור כל בעיה במספר דרכים. בעולם של סוכני AI ובמיוחד כשהיכולות של הכלים כל הזמן מתעדכנות עדיף לא לבזבז יותר מדי זמן בחשיבה "איך נכון לפתור X" אלא להתמקד ב "מעניין איך זה יראה עם כל כלי". וכמובן התשתית הטכנולוגית לטובתנו כאן - "הי קלוד תראה לי איך זה היה נראה אם הייתי רוצה להשתמש ב claude -p במקום בסוכן כאן" או להיפך.
📌 סיימתי הכל בהצלחה

כשהסוכן כותב ״סיימתי הכל בהצלחה״ למה הוא מתכוון?

נתתי ל-4 סוכנים להוסיף 4 פיצ׳רים במקביל לאפליקציית דוגמה לקראת הוובינר של יום חמישי.

כל אחד מהם כתב שהוא בנה את הפיצ'ר ובדק שהכל עובד דרך כרום וגם הסביר על הפיצ'ר שהוא בנה מה בדיוק זה עושה.

אף אחד מהם לא סיפר ש git לא עבד לו, שסוכן אחר מחק לו קבצים ושינה לו חלקים בקוד תוך כדי תנועה, שהוא היה צריך להפעיל את הדפדפן כמה פעמים כי סוכן אחר שינה לו כל הזמן את שרת הפיתוח או הפעיל בעצמו דפדפן ואז ה MCP נכשל, שהיה צריך להפעיל tsc כמה פעמים כי סוכנים אחרים שינו קוד באמצע בדיקת הטיפוסים.

אף אחד מהם לא סיפר שהוא בזבז הרבה יותר טוקנים ממה שהיה צריך רק בגלל כל ההפעלות הכפולות האלה או שיהיה לו קשה עכשיו להסביר מה השינויים שלו ומה השינויים של הסוכנים האחרים. אף אחד מהם לא חשב להמליץ לי פעם הבאה להריץ כל סוכן בסביבה משלו.

ואם ״סיימתי הכל בהצלחה״ מסתיר כל כך הרבה בעיות ומהמורות ברורות - מה לגבי כל ההתלבטויות הפחות ברורות? איך בדיוק לממש, מה עושים עם החלק הלא סגור באיפיון, באיזה ספריה חיצונית להשתמש או האם לממש לבד. אנחנו נכנסים לתקופה בה הפרטים המעניינים הם הפרטים שלא רואים והמשימה שלנו היא ללמוד להסתכל.
📌 לא רק קוד

למידה היא ההזדמנות הכי מוחמצת עם AI היום. חברים בתעשייה ופוסטים שאני קורא ברשת מתמקדים באותם יעדים שחיפשנו תמיד: יותר פיצ'רים, יותר תיקוני באגים, מערכות יותר ידידותיות, יציבות, מהירות, אבטחה.

ומה איתנו?

נניח שאני רוצה לבנות מערכת API בפייתון שתעבוד להרבה לקוחות. אני מתייעץ עם ה AI והוא ממליץ לי על FastAPI כשהשורה הראשונה בהמלצה "מהיר מאוד ותומך ב-async". אני יכול להמשיך עם "תראה לי דוגמה" או לשאול מה זה asyncio ומה היתרונות שלו ואז אני מבין בגדול על מה מדובר ויכול להתקדם לכתוב את השרת.

אבל כל זה זה למידה של אתמול.

יותר מעניין להמשיך את השיחה עם "מעניין ואיך זה בנוי?" ואפילו "מה הייתי צריך בשביל לממש event loop מאפס?". השאלה השניה מלמדת אותי שזה אפשרי ושהבסיס הוא Generators אז אני ממשיך עם פרומפט יותר ארוך:

בנה מודול לימוד אינטרקטיבי בסגנון Khan Academy על ״מבנה asyncio בפייתון״
במודול לומדים איך עובד asyncio ומה זה mainloop ואיך בונים אותו מאפס. נרצה לראות מימוש פשוט לדוגמה של Task Scheduler, Poller, Time queue ו Ready queue.

אני רוצה משחק סיכום כיפי שמורכב מ-10 ״אתגרים״ בעברית שמוודאים שהתלמיד הבין את הרעיונות המרכזיים במודול

בנה את זה בתור artifact עם HTML/JavaScript/CSS שיהיה יפה מדליק וכיפי לתלמידים

צריך לראות דוגמאות קוד, ללחוץ על שורה בקוד שעונה על שאלה, להשלים מילה מהקוד, להסביר מושגים - והכי חשוב בצורה כיפית


הרבה פעמים פרומפטים לא מייצרים בדיוק את התוצאה שאני רוצה וכך קרה גם במשחק הלימוד. התחלתי אותו וראיתי שהוא מסובך ומבלבל מדי אז המשכתי לגרסה שניה. אני מקווה שמודלים מתקדמים יותר יכללו "מצב לימוד" שיהיה יותר ידידותי לפיתוח משחקים לימודיים ובטח אפשר למצוא או לכתוב סקיל לזה. בכל מקרה זאת הגרסה השניה שניסיתי שכבר עבדה הרבה יותר טוב:

בנה מודול לימוד אינטרקטיבי בסגנון Khan Academy על ״מבנה asyncio בפייתון״
במודול לומדים איך עובד asyncio ומה זה mainloop ואיך בונים אותו מאפס.

אני רוצה משחק סיכום כיפי שמורכב מ-10 ״אתגרים״ בעברית שמוודאים שהתלמיד הבין את הרעיונות המרכזיים במודול

בנה את זה בתור artifact עם HTML/JavaScript/CSS שיהיה יפה מדליק וכיפי לתלמידים

צריך לראות דוגמאות קוד, ללחוץ על שורה בקוד שעונה על שאלה, להשלים מילה מהקוד, להסביר מושגים - והכי חשוב בצורה כיפית

שים לב:

1. המודול צריך להיות פשוט. לא להשתמש במילים מתוך async/await עצמה אלא להראות קודם איך בונים כל מושג מתוך מושגים בסיסיים יותר. אני רוצה להתמקד בפיתוח אינטואיציה לגבי asyncio יותר מאשר היכרות עם הפרטים הטכניים שלו
2. המודול צריך ללמד צעד צעד איך בונים mainloop ופונקציות אסינכרוניות ואיך החלקים מתחברים. אפשר להישאר רק עם sleep בתור פעולה לא צריך עבודת רשת בינתיים.


זה המשחק שיצא - ואם אתם מתכנתי פייתון ותמיד רציתם להבין יותר לעומק איך ה mainloop של פייתון בנוי מבפנים לדעתי הוא די חמוד ושווה לנסות אותו:

https://claude.ai/artifact/S9H8oUouBggjmBizAn6cJF

מוסר ההשכל היותר חשוב הוא שבתור מרצה לייצר כזאת חווית למידה לפני 5 שנים היה לי מאוד קשה ולא פרקטי. אנשים עשו את זה, אני זוכר משחקי לימוד ל CSS Flexbox ו Grid שמאוד אהבתי אבל זה היה בשוליים. רוב הזמן למדנו דרך קריאת קוד ואיפיון ותשומת לב לפרטים כי הם באמת היו מאוד חשובים. היום המשחק השתנה ואני חושב שכדאי להתרגל גם ללמוד אחרת.
👍1
📌 בטח שקוד יכול להיות יפה

קוד מתאר בעיה עד לפרטים הקטנים שלה. לא כל קוד צריך להיות יפה או מעניין אבל במערכות תוכנה היום בוודאי שלפחות חלק ממנו יכול להיות יפה.

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

1. סלאק שולח בהודעה רק מזהה משתמש. הצגת השם דורשת פעולה נוספת מול סלאק של "קריאת שם המשתמש" ודורשת הרשאה גדולה יותר מהאפליקציה. מה עושים עם אפליקציות קיימות? מה אם משתמשים מסוימים יעדיפו לא לתת יותר הרשאות רק בשביל להציג שמות?
2. מתי פונים לסלאק כדי לקבל את שם המשתמש - מיד כשמקבלים הודעה? אולי קצת אחרי שנכנסת הודעה? אולי רק כשמישהו רוצה לקרוא את ההודעות וצריך את המידע?
3. איפה שומרים את המיפוי ממזהים לשמות משתמשים - נשמור אותם בבסיס הנתונים או במיפוי זמני? ואם בבסיס הנתונים איך נדע כשמישהו שינה לעצמו את השם? אם במיפוי זמני לכמה זמן נשמור את המידע?
4. המערכת יכולה לדבר עם משתמשים גם בטלגרם אבל שם כל הודעה מתקבלת עם שם השולח. אם מגיעה הודעה חדשה בטלגרם עם מזהה משתמש שאנחנו כבר מכירים אבל שם אחר צריך לעדכן את ההודעות הישנות מאותו שולח לשם החדש?

קוד יפה בעיניי הוא קוד בו קל לי לראות את השאלות הרלוונטיות ואת התשובות שנבחרו להן וקל לי לשנות תשובה בלי לשבור את כל המנגנון. המטרה היא לא לפתח לאט ולא לכתוב כל שורה. לקרוא קוד זה קודם כל להבין את המערכת. לדרוש קוד יפה זה קודם כל לדרוש מערכת שאפשר להבין.
👍2
📌 שדרוג תשתיות חייב להיכנס כתהליך אוטונומי

ריילס שחררו גרסה שמתקנת 21 בעיות אבטחה השבוע:
https://rubyonrails.org/2026/11/4/Rails-8.0.5.2-and-8.1.4.1-have-been-released

אלפין לינוקס היה פתוח לכניסה לכל אחד בעשר השנים האחרונות פשוט על ידי הכנסת סיסמה ארוכה מ 256 תווים:
https://sshhole.com

באג בספריה בשם ברוטלי אפשר לכל אחד להיכנס להמון שרתי לינוקס באמצעות הרצת סקריפט פשוט:
https://ubuntu.com/security/CVE-2026-111497

כל זה רק כמה ימים אחרי שהתגלה PHP2Shell אוסף חולשות בליבה של PHP ששוב אפשרו השתלטות מלאה על שרתים שמריצים PHP:
https://www.php2shell.com

לפני כמה שנים כל באג כזה היה מעסיק אותנו לחודשים. כש Heartbleed התגלה ב 2014 אתרים שלחו מיילים מבועתים ללקוחות וביקשו מכולם להחליף סיסמאות כי אי אפשר לדעת איזה מידע דלף. היום בעיות בהיקף דומה ואפילו גדול יותר הולכות לאיבוד ברעש הכללי של AI.

הדרך היחידה להתמודד עם העומס (והיא לא מלהיבה) היא שדרוג תשתיות אוטונומי. זה לא מלהיב וכולל סיכונים לנפילות אבל אני חושש שהאלטרנטיבה גרועה יותר. יש יותר מדי שדרוגי אבטחה קריטיים שלא מקבלים מספיק תשומת לב בגלל הכמות.
👍2