מכונית מרוץ היא סביבה תובענית עם מהירות גבוהה, חום ומגבלות טלמטריה. איך סוכן במכשיר יכול לעזור לעבד נתוני רכב בזמן אמת לאפליקציות ספורט והנדסה?
במפגש הטכני הזה נבחן ארכיטקטורה היברידית ניסיונית שמשלבת חומרת קצה וסוכני ענן. אנחנו נציג הוכחת היתכנות (PoC) מחקרית באמצעות Raspberry Pi להזרמת נתוני טלמטריה של CAN bus, טלפון Pixel שמריץ סוכן בממשק שיחה במכשיר שמופעל על ידי ML Kit ו-Gemini Nano, וחיבור לענן מסוכן לסוכן (A2A) לתהליכי עבודה אחרי המרוץ.
תמליל
שלום.
קוראים לי אליסטר, והיום אני שמח מאוד לדבר איתכם על פרויקט קטן שעשינו בשנה שעברה עם פורמולה E.
אולי הצטרף אלינו היום כדי לדבר קצת על מה שעשינו ביחד.
אז, ב-- אני עובד ב-Google Cloud במשרד של ה-CTO, ולעתים קרובות אנחנו מנסים לפרוץ את הגבולות של מה שאפשר לעשות בנייד היום, ובענן, ואיך הם יכולים לעבוד ביחד.
אני אראה לכם סרטון קצר שייתן לכם קצת רקע על מה שעשינו.
למכונית מדור 4 יש מנוע מרוצים עוצמתי של 600kW.
הנעה חשמלית מלאה, הנעה קבועה לכל הגלגלים.
הייתי מתאר אותו כמהיר בטירוף.
האם אפשר להשתמש בסוכן בטלפון Pixel שמחובר לנתוני הטלמטריה שמגיעים מהרכב?
כשהנהג יעלה על הגבעה בגודווד, הוא יוכל לדבר עם המכונית.
מגניב, נכון?
Gemma, מה מצב הצמיגים שלי?
הלחץ בצמיגים נראה טוב, בערך 1.4 באר.
יש טלפון שמחובר ישירות ליחידת הבקרה האלקטרונית (ECU), שקוראת הרבה מאוד נקודות על הגרף של מה שאני עושה כנהג.
זו הפעם הראשונה שזה קורה במכונית מרוץ.
אני פשוט חושב שאין מקום טוב יותר להציג את זה.
Gemma, אנחנו מוכנים?
אני מוכן בזמן שלך.
אז מה שראינו שם היה פרויקט שבו רצינו לנסות להביא סוכן נהג משנה לתא הנהג עם הנהג.
ובאופן בסיסי, מה שאנחנו מנסים לעשות כאן הוא לדחוף את גבולות האפשרי עם סוכנים בקצה, כי זו דוגמה מצוינת לאתגר קשה מאוד.
האתגרים שמתמודדים איתם במכונית מרוץ הם כמובן חום גבוה.
מכוניות מרוץ ידועות בכך שהן מתחממות, וזה, אתם יודעים, חלק מהאתגר הכי גדול.
קישוריות לא יציבה.
אנחנו עושים את זה בפסטיבל המהירות של גודווד, שבו מתאספים מאות אלפי אוהדי ספורט מוטורי כדי לצפות במכוניות שמתחרות במעלה הגבעה.
וכמו שאתם יכולים לתאר לעצמכם, כשיש מאות אלפי אנשים בשטח, הקישוריות יכולה להיות מאתגרת.
וגם Bluetooth.
למשל, המכונית הזו היא בעצם כלוב פאראדיי, אז אתם יכולים רק לדמיין את סוג האתגרים כדי להתחבר לקסדה של נהג המרוצים.
ולבסוף, הדרישות לזמן אחזור קצר.
הנהג הזה נוסע במהירות של יותר מ-200 קמ"ש, ולכן חשוב מאוד שהתשובות שהוא מקבל מסוכן ה-AI של נהג המשנה יהיו מהירות וקצרות.
ובאופן בסיסי, אנחנו ממש מתעניינים בזה כי אנחנו מאמינים שסוכנים יהיו בכל מקום.
אנחנו כבר מתחילים לראות את זה.
הם כבר לא רק במחשבים שלנו.
הם נמצאים בטלפונים, בשעונים, במשקפיים, בבתים החכמים ואפילו במכוניות שלנו.
ובאופן בסיסי, רצינו לראות מה אנחנו יכולים להשיג בתרחיש קשה כזה.
וכשחשבנו איך לבנות את זה, האם לבנות מיקרו-מחשב קטן עם מאיץ קטן כדי שיהיה שם מודל?
פתאום הבנו שכל המרכיבים שהיינו צריכים כבר היו קיימים, וזה היה Android.
Android הוא המארח המושלם לזה, כי יש לכם את ADK, ערכת הפיתוח שלנו לסוכנים.
זו ספרייה ממש נחמדה שמאפשרת לכם ליצור סוכנים ישירות באפליקציה.
יש מיליארדי משתמשים, אז, אתם יודעים, יש גורמי צורה שונים שאנחנו יכולים להריץ את זה עליהם בקלות, אז ממש קל לבדוק את זה ולהפיץ את הקוד עצמו.
כלים למפתחים שמאפשרים לנפות באגים, לנסות דברים שונים ולמצוא את מקור הבעיה.
AI במכשיר: טלפונים מדגמי Google Pixel כוללים עכשיו TPU בטלפון עצמו, שעבר אופטימיזציה למודל במכשיר שנמצא בטלפון. כך קל מאוד להשתמש בממשקי API כמו ML Kit כדי לקבל גישה למודל חזק מאוד.
יש לנו גם דברים כמו המרת טקסט לדיבור וזיהוי דיבור, ממשקי API אופליין לחלוטין שמאפשרים לכם לקבל חוויות שיחה חזקות מאוד.
ולבסוף, כמובן, הקישוריות.
טלפונים נועדו לקישוריות, בין אם באמצעות רשתות סלולריות, Wi-Fi או אמצעים אחרים.
אחד האתגרים הוא שסוכנים בקצה לא יכולים לעשות הכול, אז איך הם יעבדו עם סוכנים, אולי, בענן?
ומה אם הפתרון היה היברידי?
מה אם סוכן שפועל בטלפון יכול לדבר ישירות עם סוכן בענן כדי לבצע פעולות מורכבות יותר?
לדוגמה, נניח שהנהג רוצה לדעת באיזה מקום הוא נמצא במרוץ.
המכונית עצמה לא תדע מה המיקום שלה במרוץ, אבל אולי סוכן בענן כן.
ויש לנו פרוטוקול שנקרא "סוכן לסוכן", שמאפשר ליצור סוכנים בקצה ובענן ולגרום להם לשוחח זה עם זה כדי לבצע פעולות מורכבות יותר.
אז איך יצרנו את זה?
אז אני אעבור איתכם על המרכיבים של המערכת הזו.
מתחילים ברתמה.
עכשיו, הרתמה כאן היא בעצם אפליקציה ל-Android שמריצה את ערכת הפיתוח של Agent ל-Android.
החלק השני הוא המודל.
צריך מודל שיפעיל אותה, ואנחנו השתמשנו ב-Gemini Nano דרך ML Kit, מודל חזק מאוד במכשיר שזמין לכם.
ואז הנתונים.
אולי ידבר על זה קצת עוד רגע, אבל יש לכם את הנתונים שמגיעים מהרכב, וגם, אולי, את זיהוי הדיבור של הנהג.
ולבסוף, יש גם את הפעולות שהסוכן יכול לבצע.
זה יכול להיות המרת טקסט לדיבור (TTS) כדי לדבר עם הנהג ולשאול שאלות המשך או לתת את המידע הנדרש, או כמו שצוין קודם, תקשורת בין סוכנים עם סוכן בענן כדי לבצע חלק מהפעולות המורכבות יותר.
עכשיו אני רוצה להזמין את אולי לבמה כדי שיספר קצת על איך עשינו את זה בפועל עם Formula E.
תודה, Alastair.
אז יש לנו את הרכיבים, ועכשיו החלק הקשה: איך משלבים בפועל סוכן AI במכונית פורמולה E?
התהליך מתחיל כאן, ב-VCU, או ביחידת הבקרה של הרכב.
עכשיו, כל חיישן וכל רכיב ברכב מדווחים לו דרך משהו שנקרא CAN bus.
והמכונית מייצרת אלפי נקודות של טלמטריה בשנייה, דברים כמו מהירות, תאוצה, מצערת, בלימה ועוד.
אז כדי לקרוא את הטלמטריה הזו, החלטנו לחבר Raspberry Pi ישירות ל-VCU של המכונית דרך חיבור ה-CAN הזה.
עכשיו, ה-Raspberry Pi עושה כמה דברים שונים.
קודם כל, הוא מפענח את האותות הגולמיים, משנה אותם ומפחית את קצב הדגימה שלהם לכ-10Hz, שזה מספיק מידע לנהג משנה.
לאחר מכן, ה-Raspberry Pi מפרסם את הנתונים המעובדים האלה באמצעות פרוטוקול MQTT למכשיר Pixel 10 Pro שנמצא בתא הנהג של המכונית.
וזה קלט אחד שהאפליקציה שמארחת את אפליקציית הנציג שלנו יכולה לקבל.
השני הוא זיהוי הדיבור של Android.
כך, כשהנהג מדבר, האפליקציה ממירה את הקלט לטקסט, ו-Gemini Nano יכול להסיק מסקנות משני סוגי הקלט האלה.
עכשיו הסוכן יכול לקבל שתי החלטות: קודם כול, הוא יכול להשתמש במנוע המרת הטקסט לדיבור (TTS) של Android כדי לענות לנהג.
שנית, כמו שאליסטר ציין קודם, הוא יכול לתקשר עם הסוכן בענן באמצעות פרוטוקול A2A.
עכשיו, תהליך העבודה של הסוכן די פשוט: אומרים את מילת הקסם, במקרה הזה "Hey, Gemma", שואלים שאלה ומקבלים תשובה.
הסוכן ממשיך להאזין במשך כ-5 שניות לאחר מכן, כדי שתוכלו לשאול שאלת המשך בלי להתחיל מחדש, בדיוק כמו בשיחה עם מהנדס מרוצים אמיתי.
האפליקציה היא גם סוכן עם יכולת לנהל שיחה בכמה שלבים, כלומר היא יכולה לגשת להיסטוריית השיחות כדי לנהל שיחה טבעית יותר.
אז אתם בטח מצפים שהקוד של זה ייראה קצת מסובך, נכון?
מסתבר שזה די פשוט.
השורות הראשונות מפעילות את onDeviceModel באמצעות ML Kit ועוטפות אותו כ-Gemini Nano.
val generativeModel: GenerativeModel = Generation.getClient()
val onDeviceModel = GenaiPrompt.create(
generativeModel = generativeModel,
name = "gemini-nano",
)
val agent = LlmAgent(
name = "race_engineer",
model = onDeviceModel,
staticInstruction = /* System prompt */,
instruction = Instruction {
/* Dynamic context */
},
tools = listOf(
/* Custom tools */
)
)אחר כך אנחנו מגדירים את הסוכן באמצעות ADK.
נותנים לו שם ושני סוגים של הוראות: הסוג הראשון הוא ההוראה הסטטית, שקובעת את האישיות שלו ואת הזהות שלו.
זה יכול לכלול דברים כמו איך הוא מדבר בחזרה לנהג ומידע על מסלול המרוצים.
השני הוא ההוראה הדינמית.
עכשיו, זה נוצר בכל שאילתה עם סיכום הטלמטריה האחרון, כך שהסוכן תמיד יודע מה הנהג עושה בכל רגע נתון.
הוא כולל גם את היסטוריית השיחות הנוכחית, כמו שצוין קודם.
בנוסף, אנחנו מגדירים כמה כלים, למשל, נותנים לו את היכולת לתקשר עם נתונים מסשנים קודמים, לתקשר עם הסוכן בענן וגם לתקשר עם הנהג באמצעות המרת טקסט לדיבור (TTS).
עכשיו נראה הדגמה קצרה של הסוכן בפעולה בסימולטורים שלנו במשרד של פורמולה E.
Gemma, עד כמה ההיגוי שלי אגרסיבי?
קול חלק ומדוד.
הנעילה המקסימלית הייתה 48 מעלות, והזזת את ההגה ב-11 מעלות לשנייה בממוצע.
Hey Gemma, what is my peak G-force?
כוח ה-G המקסימלי היה 2.2G, בפניות.
Gemma, איך הייתה הריצה שלי?
ריצה טובה, דן.
המהירות המקסימלית היא 306 קמ"ש, והמהירות הממוצעת היא 186 קמ"ש במשך 35 שניות.
נסעת במהירות המקסימלית 58% מהזמן, והגעת לשיא של 2.2G.
זהו זה.
זה Gemini Nano בטלפון, שמדבר עם נהג ועונה על השאלות שלו בזמן אמת.
סימולטור נהיגה זה דבר אחד, אבל מכונית פורמולה E זה דבר אחר לגמרי.
אז איך חיברנו את כל החלקים?
קודם כל היינו צריכים לנסוע ל-Spark Racing Technology בפריז, שם מייצרים את המכוניות שלנו.
זה אני בצד שמאל, מחבר את ה-Raspberry Pi ליחידת בקרת הרכב (VCU) של מכונית הפורמולה E.
כל מה שבנינו עד עכשיו פעל על נתונים מדומים והופעל מחדש מסשן בדיקה, אז לא באמת ידענו אם זה יעבוד עם הדבר האמיתי.
אז חיברנו אותו, הפעלנו אותו, חיכינו, חיכינו עוד קצת, ולבסוף הטלמטריה התחילה להגיע למכשיר, מה שהוכיח שהנתונים עוברים במערכת כפי שציפינו.
בצד שמאל אפשר לראות את המערכת המוגמרת, ואפשר לראות שהטלפון למעשה מוטמע בתא הנהג, ממש ליד המקום שבו הנהג יישב.
אז היינו מוכנים לגודווד.
אז מה בעצם קרה באותו יום?
זוכרים את ארבעת האתגרים שאלסטר דיבר עליהם קודם?
בגודווד באמת בדקו שתיים מהן.
הראשון היה החום.
בבריטניה, בדרך כלל אנחנו מתכננים את הפעילויות שלנו בהתאם לכל מזג אוויר, חוץ משמש.
אז באופן טבעי, קיבלנו את אחד השבועות הכי חמים בהיסטוריה, ממש באמצע גל חום.
הזמן המושלם לשים מחשב בתוך מכונית פורמולה E.
אבל יש טוויסט.
הטלפון היה בסדר.
מערכת Android לא באמת נפגעה.
מסתבר ש-Raspberry Pi התקשה הכי הרבה.
ומכיוון שלא יכולנו לחבר אותו ישירות למכונית, היינו צריכים להשתמש במשהו שנקרא UPS, שאם אתם לא יודעים, בעצם נראה כמו ערימה של סוללות תקועות בחלק התחתון של ה-Pi.
למזלנו, הצלחנו לפתור את הבעיה הזו על ידי טעינה מדי פעם במהלך היום, ובלי זה, כנראה שהמכונית לא הייתה עולה על הגבעה הזו בלי סוכן AI בכלל.
אחר כך הגיע ה-Bluetooth.
בשלב הזה, עדיין לא בדקנו את הקסדה של הנהג, שמתחברת לאפליקציה באמצעות Bluetooth.
וזה היה קצת מאתגר.
אז כדי לבדוק את זה, ישבנו על הדשא, ונראה שאנחנו ממש נהנים, נכון?
הוצאנו את המחשבים הניידים שלנו, ואנחנו מנהלים שיחה נחמדה.
למעשה, זו הייתה כנראה אחת התקופות הכי מלחיצות בקריירה שלי עד עכשיו.
ניסינו נואשות לגרום לקוד לפעול כמו שצריך ולחבר את קסדת ה-Bluetooth לאפליקציה לפני שהרכב התחיל לנסוע במעלה הגבעה אחר הצהריים.
אבל בזכות תיקון חם של הרגע האחרון וכלי ניפוי הבאגים הנהדרים של Android, הצלחנו לתקן את הבעיה בדיוק בזמן, והרכב עלה במעלה הגבעה כשסוכן ה-AI פעל בצורה נהדרת.
עכשיו אעביר את רשות הדיבור לאלסטר, שיספר לנו קצת יותר על הלקחים שהופקו מהפרויקט.
תודה.
תודה, אולי.
אז מה למדנו מהפרויקט הזה?
הסיבה הראשונה היא ש-Android הוא מארח מושלם לסוכנים שלכם.
אני ממליץ לכם להשתמש במגוון האפשרויות של Android, בממשקי ה-API שזמינים לכם, במודלים במכשיר וב-ADK.
כדאי לנסות אותם, כי תופתעו לגלות כמה חוויות עוצמתיות אפשר לקבל מדבר כל כך פשוט.
עדיין יש בעיות בשילוב.
רוב האנשים בחדר הזה כנראה חוו את זה בשלב כלשהו בקריירה שלהם.
אתה בונה את כל רכיבי המשנה בנפרד, וכשאתה מחבר אותם יחד, משהו לא עובד כמו שצריך.
וקסדת המרוצים של הנהג הייתה בדיוק כזו.
למזלנו, הצלחנו לתקן את זה באותו יום, וזה באמת מוכיח שהבדיקות עדיין קריטיות.
ולבסוף, Gemini Nano.
Gemini Nano היה ממש גיבור במקרה הזה.
זה מודל יעיל מאוד, שפועל במהירות במכשיר ויכול לבצע משימות מורכבות מאוד, אבל הוא לא עושה את זה מיד.
יש מאחורי זה מחשבה אמיתית.
אתם צריכים לבצע הנדסת פרומפטים.
אתם חייבים לבדוק את זה.
צריך לחשוב על הדרך שבה רוצים להזין את ההוראה הדינמית לעומת ההוראה הסטטית.
צריך לחשוב על הכלים שאתם הולכים לתת לו ואיך אתם יכולים להנחות אותו בצורה הכי טובה לעשות את זה.
אבל עם הבדיקות וההערכות הנכונות, אתם יכולים להפיק הרבה ממודל כמו Gemini Nano ישירות במכשיר.
תודה רבה לכולם.
אנחנו נהיה בדוכן מאוחר יותר, אז אתם יכולים לבוא, להצטרף ולשאול אותנו כמה שאלות.
val generativeModel: GenerativeModel = Generation.getClient()
val onDeviceModel = GenaiPrompt.create(
generativeModel = generativeModel,
name = "gemini-nano",
)
val agent = LlmAgent(
name = "race_engineer",
model = onDeviceModel,
staticInstruction = /* System prompt */,
instruction = Instruction {
/* Dynamic context */
},
tools = listOf(
/* Custom tools */
)
)