חקירת נתונים בקרנל מתמשך
המדריך הזה מראה איך לגרום לסוכן לטעון פעם אחת משהו יקר ואז לשאול עליו כמה שאלות, במקום לשלם את מחיר הטעינה בכל שאלה.
הכלי eval מריץ מפרש מתמשך. משתנים, ייבואים ונתונים שנטענו ממשיכים להתקיים בין קריאה לקריאה.
למה לא פשוט להריץ סקריפט
קטע בשם “למה לא פשוט להריץ סקריפט”הרצה חד-פעמית של python -c משלמת את מחיר ההכנה בכל שאלה. טעינת dataframe עולה שניות ומאה מגהבייט; יצירת גרף ממנה עולה אלפיות שנייה. כשכל שאלה גובה את מחיר הטעינה, הסוכן שואל פחות שאלות משכדאי — וכל תשובה חוזרת כטקסט שעליו לנתח מחדש.
לטעון פעם אחת, ואז לשאול
קטע בשם “לטעון פעם אחת, ואז לשאול”טען את
data/runs.csvותגיד לי מה משך ה־p95 לפי סוכן.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)הביטוי האחרון מוצג חזרה כפי שמחברת עושה, כך ש־len(runs) מדווח את מספר השורות בלי print.
ואז, בקריאה נפרדת:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs עדיין טעון. DataFrame של pandas חוזר מרונדר כטבלה ולא כ־repr.
גרפים נוחתים בצ’אט
קטע בשם “גרפים נוחתים בצ’אט”import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()איורים נקלטים אחרי התא ומוחזרים כתמונות, שאותן התמלול מציג. אתם רואים את הגרף; גם הסוכן רואה אותו.
האיורים נסגרים לאחר הקליטה. איור שלא נאסף היה מצויר מחדש ונשלח שוב גם בידי התא הבא, כך שסשן בן חמישה תאים היה פולט את הגרף הראשון חמש פעמים.
הקיצורים שתקלידו ממילא
קטע בשם “הקיצורים שתקלידו ממילא”אלה נכתבים מחדש כקוד רגיל במקום להחזיר שגיאה:
| אתם מקלידים | מה קורה |
|---|---|
%pip install x |
מריץ pip, ואז מנקה את מטמון המודולים כך שה־import הבא יראה אותו |
%cd path |
os.chdir |
!command |
תהליך בן שפלטו נקלט |
%%bash |
שארית התא כסקריפט מעטפת |
%%timeit |
1000 הרצות מתוזמנות |
פינוי המטמון של %pip הוא החשוב: התקנה לתוך מפרש חי לא עושה דבר למודול שכבר יובא, ולכן בלעדיו הגרסה שהרגע התקנתם אינה זו שרצה.
קריאה לכלים שלכם מתוך תא
קטע בשם “קריאה לכלים שלכם מתוך תא”paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args) נכנס מחדש למרשם הכלים של הסוכן עצמו. כלומר, תא יכול להסתעף על מאה קבצים, או להאציל דרך task, בלי שהמודל יבזבז סבב על כל פריט.
קריאה דרך הגשר משהה את הזמן הקצוב של התא בזמן שהיא מתבצעת. התקציב מודד אי־פעילות, לא זמן שעון — תא שמסתעף לסוכני משנה וממתין ארבע דקות אינו תקוע, והריגה שלו באמצע הפרישה תאבד את מצבו של הקרנל כולו.
התחלה מחדש
קטע בשם “התחלה מחדש”eval(code: "…", reset: true, description: "Start a clean interpreter")משליך את המפרש ומתחיל מפרש נקי. כל מה שנטען נעלם — וזו בדיוק המטרה.
היכן הקרנל רץ
קטע בשם “היכן הקרנל רץ”בתוך המתחם המבודד של השיחה כשיש לה כזה, ואחרת במארח.
מפרש מתמשך שמופעל בידי מודל שקורא מאגר שאינו מהימן הוא בדיוק המקרה שלשמו קיימת הרצה במתחם מבודד בלבד: קריאת bash חד-פעמית לפחות נגמרת, ואילו קרנל הוא מעטפת שזוכרת.
הוא לא מפעיל מתחם מבודד לשם כך — אותו כלל שמונע מלשונית תחנה לעלות מעצמה. אם אתם רוצים שהקרנל יהיה בתוך מתחם מבודד, פתחו קודם את המעטפת של השיחה. ראו תנו לסוכן מחשב לבדיקות.
מגבלות
קטע בשם “מגבלות”- תא אחד בכל פעם לכל קרנל. שני תאים שמתחרים במפרש אחד הם שני חצאים של שתי תוכניות שמשתלבים במרחב שמות אחד.
- הפלט מוגבל. תא בלולאת הדפסה נחתך במקום שיורשה לו למלא את חלון ההקשר.
- ארבע תמונות לתא. לולאת ציור יכולה לפלוט איור בכל איטרציה, וכל תמונה היא עלות קבועה גדולה בבקשה שנושאת אותה.
- הקרנל מת עם ההרצה. קרנל שמחזיק dataframe אחרי שהשיחה הסתיימה הוא דליפה.
מושגים קשורים
קטע בשם “מושגים קשורים”- ארגז חול ואבטחה — מה המשמעות של “בתוך מתחם מבודד” כאן
- תנו לסוכן מחשב לבדיקות — פתיחת המתחם המבודד
- כלי סוכן מובנים — הארגומנטים