Xe đua là một môi trường đòi hỏi khắt khe về tốc độ cao, nhiệt độ và các giới hạn về đo từ xa. Làm cách nào để một tác nhân trên thiết bị có thể giúp xử lý dữ liệu xe theo thời gian thực cho các ứng dụng thể thao và kỹ thuật?
Phiên kỹ thuật này khám phá một kiến trúc kết hợp thử nghiệm, kết hợp phần cứng biên và tác nhân đám mây. Chúng tôi sẽ hướng dẫn bạn thực hiện một bằng chứng về khái niệm nghiên cứu bằng cách sử dụng Raspberry Pi để truyền dữ liệu đo từ xa của bus CAN, một chiếc điện thoại Pixel chạy tác nhân trò chuyện trên thiết bị dựa trên Bộ công cụ học máy và Gemini Nano, cùng một kết nối đám mây giữa các tác nhân (A2A) cho quy trình làm việc sau cuộc đua.
Bản chép lời
Chào bạn!
Tôi là Alastair. Hôm nay, tôi rất vui được chia sẻ với các bạn về một dự án mà chúng tôi đã thực hiện vào năm ngoái cùng với Formula E.
Hôm nay, Oli cũng có mặt ở đây để chia sẻ đôi điều về những việc chúng tôi đã cùng nhau thực hiện.
Tôi làm việc tại văn phòng Giám đốc công nghệ của Google Cloud. Chúng tôi thường tìm cách vượt qua ranh giới của những gì có thể làm được trên thiết bị di động và Cloud hiện nay, cũng như cách hai nền tảng này có thể kết hợp với nhau.
Tôi sẽ cho bạn xem một video ngắn giới thiệu sơ lược về những việc chúng tôi đã làm.
Xe Gen 4 là một quái thú đua xe có công suất 600 kW.
Chạy hoàn toàn bằng điện, dẫn động bốn bánh toàn thời gian.
Tôi có thể mô tả là nhanh như chớp.
Chúng ta có thể dùng một tác nhân trên điện thoại Pixel được kết nối với dữ liệu đo từ xa từ ô tô không?
Khi lái xe lên đồi tại Goodwood, người lái xe thực sự có thể trò chuyện với chiếc xe.
Thật thú vị!
Gemma ơi, lốp xe của tôi thế nào rồi?
Áp suất lốp có vẻ ổn, khoảng 1,4 bar.
Có một chiếc điện thoại được cắm trực tiếp vào ECU, đọc rất nhiều điểm dữ liệu về những gì tôi đang làm với tư cách là người lái xe.
Đây là lần đầu tiên điều này xảy ra trên một chiếc xe đua.
Tôi chỉ nghĩ rằng không có nơi nào phù hợp hơn để giới thiệu tính năng này.
Gemma ơi, chúng ta đã sẵn sàng chưa?
Sẵn sàng khi bạn muốn.
Vì vậy, chúng tôi đã thấy một dự án mà chúng tôi muốn thử đưa một tác nhân phụ lái vào buồng lái cùng với người lái xe.
Và về cơ bản, điều chúng tôi đang cố gắng làm ở đây là vượt qua giới hạn của những gì có thể làm được với các tác nhân ở biên, vì đây là một ví dụ điển hình về một thách thức thực sự khó khăn.
Thách thức mà bạn gặp phải trong một chiếc xe đua rõ ràng là nhiệt độ cao.
Xe đua nổi tiếng là nóng và đó là một trong những thách thức lớn nhất.
Kết nối không ổn định.
Vì vậy, chúng tôi thực sự đang làm điều này tại Lễ hội tốc độ Goodwood, nơi có hàng trăm nghìn người hâm mộ môn thể thao đua xe tụ tập để đến xem những chiếc xe đua lên đồi.
Và như bạn có thể hình dung, khi có hàng trăm nghìn người trong một khu vực, việc kết nối có thể khá khó khăn.
Bluetooth.
Ví dụ, chiếc xe này về cơ bản là một lồng Faraday, nên bạn có thể hình dung ra những thách thức để có thể kết nối với mũ bảo hiểm của tay đua.
Và cuối cùng là các yêu cầu về độ trễ thấp.
Tài xế này đang lái xe với tốc độ hơn 200 km/giờ, nên điều quan trọng là câu trả lời mà họ nhận được từ tác nhân trợ lái phải thật nhanh chóng và chính xác.
Và về cơ bản, chúng tôi thực sự quan tâm đến điều này vì chúng tôi tin rằng tác nhân sẽ trở nên phổ biến.
Chúng ta đã bắt đầu thấy điều này.
Chúng không chỉ có trong máy tính của chúng ta nữa.
Chúng có trong điện thoại, đồng hồ, kính, nhà thông minh và thậm chí cả ô tô của chúng ta.
Vì vậy, về cơ bản, chúng tôi thực sự muốn xem mình có thể đạt được gì trong tình huống khó khăn như thế này.
Và khi chúng tôi suy nghĩ về cách xây dựng hệ thống này, chúng tôi có nên xây dựng một máy vi tính nhỏ có bộ tăng tốc nhỏ để có một mô hình ở đó không?
Chúng tôi chợt nhận ra rằng tất cả những yếu tố cần thiết đều đã có sẵn, và đó chính là Android.
Android là nền tảng lý tưởng cho việc này vì chúng tôi có ADK, tức là Bộ công cụ phát triển tác nhân.
Đây là một thư viện rất hay, cho phép bạn xây dựng các tác nhân ngay trong ứng dụng của mình.
Có hàng tỷ người dùng, và bạn biết đấy, có nhiều kiểu dáng thiết bị mà chúng tôi có thể chạy ứng dụng này một cách dễ dàng, vì vậy, việc kiểm thử và phân phối mã rất dễ dàng.
Công cụ cho nhà phát triển giúp bạn gỡ lỗi, thử nhiều cách và tìm ra vấn đề.
AI trên thiết bị, điện thoại Google Pixel hiện được trang bị TPU ngay trong điện thoại, được tối ưu hoá cho mô hình trên thiết bị nằm ngay trong điện thoại, giúp bạn dễ dàng sử dụng các API như Bộ công cụ học máy để truy cập vào một mô hình thực sự mạnh mẽ.
Sau đó, chúng tôi cũng có những tính năng như chuyển văn bản sang lời nói và nhận dạng lời nói, các API hoàn toàn ngoại tuyến cho phép bạn có được trải nghiệm đàm thoại thực sự mạnh mẽ.
Và cuối cùng, rõ ràng là khả năng kết nối.
Điện thoại được thiết kế để kết nối, cho dù là qua mạng di động, Wi-Fi hay các phương tiện khác.
Tuy nhiên, một trong những thách thức là các tác nhân ở biên không thể làm mọi thứ, vậy làm thế nào để chúng có thể hoạt động với các tác nhân trên đám mây?
Vậy nếu giải pháp là kết hợp thì sao?
Điều gì sẽ xảy ra nếu một tác nhân trên điện thoại có thể trò chuyện trực tiếp với một tác nhân trên đám mây để thực hiện các hành động phức tạp hơn?
Ví dụ: bạn có thể tưởng tượng rằng tay đua muốn biết vị trí của họ trong cuộc đua.
Bản thân chiếc xe sẽ không biết vị trí của nó trong cuộc đua, nhưng có thể một tác nhân trên đám mây sẽ biết.
Chúng tôi cũng có một giao thức gọi là tác nhân với tác nhân, nghĩa là bạn có thể tạo tác nhân trên thiết bị biên và trên đám mây, đồng thời cho phép các tác nhân này trò chuyện trực tiếp với nhau để thực hiện những hành động phức tạp hơn.
Vậy chúng tôi đã xây dựng nó như thế nào?
Vì vậy, tôi sẽ giới thiệu cho bạn các thành phần của hệ thống này.
Bắt đầu từ dây nịt.
Giờ đây, bộ điều khiển ở đây về cơ bản là một ứng dụng Android chạy Bộ công cụ dành cho nhà phát triển tác nhân cho Android.
Phần thứ hai là một mô hình.
Bạn cần có một mô hình để hỗ trợ tính năng này và chúng tôi đã sử dụng Gemini Nano thông qua Bộ công cụ học máy, một mô hình thực sự mạnh mẽ trên thiết bị mà bạn có thể dễ dàng sử dụng.
Sau đó là dữ liệu.
Oli sẽ nói một chút về vấn đề này trong giây lát, nhưng bạn có dữ liệu đến từ ô tô, nhưng cũng có thể là nhận dạng giọng nói từ người lái xe.
Cuối cùng, bạn cũng có các hành động mà tác nhân có thể thực hiện.
Đó có thể là tính năng chuyển văn bản sang lời nói để có thể trò chuyện lại với tài xế và đặt câu hỏi nối tiếp hoặc cung cấp thông tin cần thiết, hoặc như đã đề cập trước đó, giao tiếp giữa các tác nhân với một tác nhân trên đám mây để thực hiện một số hành động phức tạp hơn.
Bây giờ, tôi muốn mời Oli lên sân khấu để chia sẻ một chút về cách chúng tôi thực hiện việc này với Formula E.
Cảm ơn Alastair.
Vậy là chúng ta đã có các thành phần, giờ đến phần khó: Làm thế nào để tích hợp một tác nhân AI vào xe đua Formula E?
Vì vậy, quá trình này bắt đầu từ đây, tại VCU, hay bộ điều khiển xe.
Giờ đây, mọi cảm biến và mọi thành phần trên xe đều báo cáo lại cho xe thông qua một thứ gọi là CAN bus.
Và chiếc xe đang tạo ra hàng nghìn điểm đo từ xa mỗi giây, những thứ như tốc độ, gia tốc, ga, phanh, v.v.
Vì vậy, để đọc dữ liệu đo từ xa này, chúng tôi quyết định cắm trực tiếp một chiếc Raspberry Pi vào VCU của ô tô thông qua kết nối CAN này.
Giờ đây, Raspberry Pi có thể làm một số việc khác.
Đầu tiên, nó giải mã các tín hiệu thô, biến đổi chúng và giảm tần số lấy mẫu xuống khoảng 10 Hz, đây là lượng thông tin dồi dào cho một người lái phụ.
Sau đó, Raspberry Pi sẽ xuất bản dữ liệu đã tinh chỉnh này qua MQTT đến một chiếc Pixel 10 Pro đặt trong buồng lái của ô tô.
Và đây là một dữ liệu đầu vào mà ứng dụng App Hosting lưu trữ ứng dụng tác nhân của chúng ta có thể chấp nhận.
Thứ hai là tính năng nhận dạng lời nói của Android.
Vì vậy, khi tài xế nói, ứng dụng sẽ chuyển đổi dữ liệu đầu vào thành văn bản và Gemini Nano có thể suy luận dựa trên cả hai dữ liệu đầu vào này.
Giờ đây, tác nhân có thể đưa ra hai quyết định: Thứ nhất, tác nhân có thể sử dụng công cụ chuyển văn bản sang lời nói của Android để nói chuyện lại với người lái xe.
Và thứ hai, như Alastair đã đề cập trước đó, nó có thể nói chuyện lại với tác nhân đám mây thông qua giao thức A2A.
Giờ đây, quy trình của tác nhân khá đơn giản: Nói câu lệnh kích hoạt, trong trường hợp này là "Ok Gemma", đặt câu hỏi và nhận câu trả lời.
Sau đó, nhân viên hỗ trợ sẽ tiếp tục lắng nghe trong khoảng 5 giây để bạn có thể đặt câu hỏi tiếp theo mà không cần phải bắt đầu lại, giống như khi trò chuyện với một kỹ sư đua xe thực thụ.
Ứng dụng này cũng là một tác nhân nhiều lượt, nghĩa là ứng dụng có thể truy cập vào nhật ký trò chuyện để trò chuyện tự nhiên hơn.
Vậy nên, bạn có thể nghĩ rằng mã cho việc này sẽ hơi phức tạp, đúng không?
Thực ra, việc này khá đơn giản.
Vài dòng đầu tiên gọi onDeviceModel bằng Bộ công cụ học máy và gói dưới dạng 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 */
)
)Sau đó, chúng ta xác định tác nhân bằng ADK.
Đặt tên cho chỉ dẫn và đưa ra hai loại chỉ dẫn: Loại đầu tiên là chỉ dẫn tĩnh, tức là tính cách và danh tính của chỉ dẫn.
Và điều này có thể bao gồm những thứ như cách nó nói chuyện lại với người lái xe và một số thông tin về đường đua.
Thứ hai là chỉ dẫn động.
Giờ đây, thông tin này được tạo cho mọi truy vấn cùng với bản tóm tắt dữ liệu đo từ xa mới nhất, nhờ đó, nhân viên hỗ trợ luôn biết tài xế đang làm gì vào bất kỳ thời điểm nào.
Như đã đề cập trước đó, nhật ký trò chuyện hiện tại cũng được đưa vào.
Ngoài ra, chúng tôi cũng xác định một số công cụ, chẳng hạn như cung cấp cho công cụ này khả năng phản hồi dữ liệu của phiên trước, khả năng phản hồi tác nhân đám mây và khả năng phản hồi tài xế bằng tính năng chuyển văn bản sang lời nói.
Bây giờ, hãy xem một bản minh hoạ ngắn về tác nhân hoạt động trên thiết bị mô phỏng của chúng tôi tại văn phòng Formula E.
Gemma ơi, tôi có đánh lái quá mạnh không?
Mượt mà và có kiểm soát.
Góc đánh lái tối đa là 48 độ và bạn đã đánh lái với tốc độ trung bình là 11 độ/giây.
Gemma ơi, lực G cao nhất của tôi là bao nhiêu?
Lực G tối đa là 2,2 G, khi vào cua.
Gemma ơi, buổi chạy của tôi thế nào?
Chạy tốt lắm, Dan.
Tốc độ tối đa 306 km/h, trung bình 186 km/h trong 35 giây.
Bạn đã chạy hết tốc lực trong 58% thời gian và đạt đỉnh ở mức 2, 2 G.
Vậy là xong.
Đó là Gemini Nano trên điện thoại đang trò chuyện với tài xế, trả lời câu hỏi của họ theo thời gian thực.
Buồng lái mô phỏng là một chuyện, còn xe đua Công thức E lại là chuyện hoàn toàn khác.
Vậy chúng tôi đã kết hợp tất cả những điều này như thế nào?
Đầu tiên, chúng tôi phải đến Spark Racing Technology ở Paris, nơi sản xuất xe của chúng tôi.
Đây là tôi, ở bên trái, đang nối dây Raspberry Pi vào bộ điều khiển xe thực tế của chiếc xe Formula E.
Mọi thứ chúng ta đã xây dựng cho đến nay đều chạy trên dữ liệu mô phỏng và được phát lại từ một phiên kiểm thử, vì vậy, chúng ta không thực sự biết liệu nó có hoạt động với dữ liệu thực hay không.
Vì vậy, chúng tôi đã cắm điện, bật nguồn, chờ đợi, chờ đợi thêm một chút và cuối cùng, dữ liệu đo từ xa bắt đầu xuất hiện trên thiết bị, chứng minh rằng dữ liệu đang di chuyển qua hệ thống như chúng tôi mong đợi.
Ở bên phải, bạn có thể thấy hệ thống hoàn chỉnh và bạn có thể thấy điện thoại thực sự được triển khai vào buồng lái, ngay bên cạnh nơi người lái xe sẽ ngồi.
Vậy là chúng tôi đã sẵn sàng cho Goodwood.
Vậy, điều gì thực sự đã xảy ra vào ngày hôm đó?
Bạn còn nhớ 4 thách thức mà Alastair đã đề cập trước đó không?
Goodwood thực sự đã thử thách hai người trong số họ.
Đầu tiên là nhiệt độ.
Giờ đây, ở Anh, chúng tôi thường chỉ lên kế hoạch cho mọi kiểu thời tiết, ngoại trừ nắng.
Vì vậy, dĩ nhiên là chúng tôi đã trải qua một trong những tuần nóng nhất từ trước đến nay, ngay giữa một đợt nắng nóng.
Thời điểm hoàn hảo để đặt máy tính vào trong xe đua Formula E.
Nhưng có một điều bất ngờ.
Điện thoại thực ra vẫn ổn.
Android không thực sự bị ảnh hưởng.
Hoá ra Raspberry Pi là thiết bị gặp nhiều khó khăn nhất.
Và vì không thể cắm trực tiếp vào ô tô, chúng tôi phải sử dụng một thứ gọi là UPS, nếu bạn chưa biết, về cơ bản trông giống như một loạt pin được gắn vào mặt dưới của Pi.
Nhưng may mắn là chúng tôi đã khắc phục được vấn đề này bằng cách thỉnh thoảng nạp thêm năng lượng trong ngày. Nếu không, chiếc xe có lẽ đã không thể leo lên dốc mà không có tác nhân AI nào.
Tiếp theo là Bluetooth.
Vào thời điểm đó, chúng tôi chưa từng thử nghiệm với mũ bảo hiểm của tài xế, vốn kết nối với ứng dụng qua Bluetooth.
Và điều này có vẻ hơi khó khăn.
Vì vậy, để thử nghiệm điều này, chúng tôi đã ngồi xuống bãi cỏ và có vẻ như chúng tôi đang có một khoảng thời gian thực sự vui vẻ, phải không?
Chúng tôi lấy máy tính xách tay ra và trò chuyện vui vẻ.
Nhưng thực tế, đó có lẽ là một trong những giai đoạn căng thẳng nhất trong sự nghiệp của tôi cho đến nay.
Chúng tôi đã cố gắng hết sức để mã đó hoạt động ổn định và kết nối mũ bảo hiểm Bluetooth với ứng dụng trước khi xe chạy lên đồi vào buổi chiều.
Nhưng nhờ một số bản sửa lỗi nóng vào phút chót và các công cụ gỡ lỗi tuyệt vời của Android, chúng tôi đã khắc phục được vấn đề kịp thời và chiếc xe đã leo lên đồi với tác nhân AI hoạt động hiệu quả.
Bây giờ, tôi xin nhường lời lại cho Alastair. Anh ấy sẽ chia sẻ thêm một chút về những bài học rút ra từ dự án này.
Cảm ơn bạn.
Cảm ơn Oli.
Vậy chúng ta đã học được gì từ dự án này?
Đầu tiên, Android là một nền tảng lưu trữ thực sự hoàn hảo cho các tác nhân của bạn.
Tôi rất khuyến khích bạn tận dụng tính linh hoạt của Android, các API có sẵn, các mô hình trên thiết bị và ADK.
Hãy thử trải nghiệm vì bạn sẽ ngạc nhiên trước những điều tuyệt vời mà một thứ đơn giản như vậy có thể mang lại.
Vấn đề tích hợp vẫn còn tồn tại.
Hầu hết mọi người trong phòng này có lẽ đã từng trải qua điều này vào một thời điểm nào đó trong sự nghiệp của họ.
Bạn xây dựng tất cả các thành phần phụ riêng biệt, và sau đó khi bạn cuối cùng cũng kết nối chúng lại với nhau, có gì đó không hoạt động.
Và mũ bảo hiểm của tay đua chính là chiếc mũ này.
Nhưng may mắn là chúng tôi đã khắc phục được vấn đề ngay trong ngày, và điều này thực sự chứng minh rằng việc kiểm thử vẫn rất quan trọng.
Và cuối cùng là Gemini Nano.
Gemini Nano là một trợ thủ đắc lực trong trường hợp này.
Đây là một mô hình thực sự hiệu quả, chạy rất nhanh trên thiết bị của bạn và có thể thực hiện các tác vụ thực sự phức tạp, nhưng không phải ngay lập tức.
Đó là một ý tưởng thực sự sâu sắc.
Bạn phải thiết kế câu lệnh.
Bạn phải thử nghiệm.
Bạn phải nghĩ đến cách bạn muốn cung cấp chỉ dẫn động so với chỉ dẫn tĩnh.
Bạn phải nghĩ đến những công cụ mà bạn sẽ cung cấp cho mô hình và cách tốt nhất để hướng dẫn mô hình thực hiện việc đó.
Tuy nhiên, nếu thử nghiệm và đánh giá đúng cách, bạn có thể khai thác rất nhiều lợi ích từ một mô hình như Gemini Nano ngay trên thiết bị.
Cảm ơn các bạn rất nhiều.
Chúng tôi sẽ có mặt tại gian hàng sau, vì vậy, bạn có thể đến tham gia và đặt câu hỏi cho chúng tôi.
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 */
)
)