Sử dụng AI Sinh sản để Viết và Chạy Mã Nhúng

Ari Mahpour
|  Created: Tháng Năm 15, 2024  |  Updated: Tháng Bảy 1, 2024
Sử dụng AI Sinh sản để Viết và Chạy Mã Nhúng

Trong Cách Xây Dựng Hành Động GPT Tùy Chỉnh để Nói Chuyện với Phần Cứng của BạnXây Dựng Trợ Lý Phòng Thí Nghiệm AI, chúng ta đã học cách kiểm soát phần cứng của mình sử dụng AI Sinh Động. Bằng cách sử dụng Hành Động GPT Tùy Chỉnh trong ChatGPT, chúng tôi đã có thể cho phép ChatGPT không chỉ làm nhấp nháy LED trên Raspberry Pi mà còn kiểm soát và thu thập dữ liệu từ các thiết bị phòng thí nghiệm. Điều này có nghĩa là chúng tôi có thể sử dụng trí tuệ nhân tạo như một trợ lý phòng thí nghiệm và cũng xử lý dữ liệu cho chúng tôi mà nó thu thập từ các thiết bị của chúng tôi. Trong bài viết này, chúng tôi tiến xa hơn một bước nữa bằng cách không chỉ cho AI Sinh Động viết mã cho chúng tôi mà còn thực thi nó trên các mục tiêu nhúng và nhận phản hồi trong quá trình đó.

Bối Cảnh

Sử dụng AI Sinh Động để viết mã, ngay cả cho các hệ thống nhúng, không phải là điều mới mẻ. Có rất nhiều công cụ đã được đề xuất hoặc hoàn toàn viết mã từ đầu. Hầu hết các Mô Hình Ngôn Ngữ Lớn phổ biến, như ChatGPT, Gemini, và Claude, đều đã trở nên khá giỏi trong việc viết mã (xem Gemini so với ChatGPT: Ai Viết Mã Tốt Hơn? để so sánh). Tôi đã viết về việc ChatGPT tạo mã hơn một năm nay (xem Sử Dụng ChatGPT cho Kiểm Thử Tự Động) và tuyên bố rằng đó là cách duy nhất để phát triển ngày nay. Thách thức thực sự là đưa AI vào vòng lặp phát triển của bạn.

Việc tạo mã chỉ đưa bạn đi được một đoạn nhưng để có thể xác nhận và đảm bảo nó hoạt động đòi hỏi một cách tiếp cận khác khi nói đến AI Sinh Động. Code Interpreter với ChatGPT cung cấp một môi trường Python đóng gói có thể, ở một mức độ nhất định, chạy mã được tạo và xác nhận rằng nó hoạt động cho bạn. Tôi muốn tiến xa hơn một bước và xem liệu chúng tôi có thể đạt được điều tương tự với các hệ thống nhúng hay không. Có hai hướng mà người ta có thể tiếp cận với ChatGPT của OpenAI. Hướng phổ biến nhất là tạo một ứng dụng vòng lặp kín sử dụng API của OpenAI. Nó sẽ nhắc và lấy mã từ Mô Hình Ngôn Ngữ Lớn (LLM) sử dụng API, biên dịch nó, tải nó lên Arduino, và sử dụng thêm mã tùy chỉnh để xác nhận chức năng của mã được tạo. Tôi quyết định tiếp cận theo một cách khác sử dụng Hành Động GPT để làm cho nó trở thành một “trải nghiệm ghép mã.” Đây là trải nghiệm đó trông như thế nào:

Ví dụ về Hành Động GPT

Hình 1: Ví dụ về Hành Động GPT

Mặc dù ví dụ có thể đơn giản (tức là làm cho đèn LED trên bo mạch nhấp nháy) nhưng màn trình diễn trên đây đã tóm tắt tất cả. Tôi đã có thể đưa ra hướng dẫn rõ ràng cho GPT tùy chỉnh của mình và nó đã thực hiện theo đúng như tôi mong đợi. Tôi cũng có thể xác nhận rằng nó đã thực sự tải lên thiết bị của tôi và làm cho đèn LED nhấp nháy với tốc độ 1 giây. Điều tốt về việc sử dụng GPT tùy chỉnh so với hệ thống kín là tôi có thể lặp lại khá dễ dàng trong lời nhắc:

Lặp lại với bản vẽ Arduino

Hình 2: Lặp lại với bản vẽ Arduino

Bây giờ bạn đã thấy một số ví dụ, hãy xem cách tất cả điều này hoạt động như thế nào.

Cách nó hoạt động

Giống như chúng ta đã thấy với các bài viết GPT tùy chỉnh khác, cài đặt GPT Actions cho dự án này, ít nhiều, vẫn giống nhau. Dockerfile, Docker Compose, chứng chỉ SSL, và cấu trúc tổng thể của kho lưu trữ không thay đổi nhiều. Tất nhiên, mã thiết kế và tệp YAML OpenAPI đều khác biệt đáng kể (như mong đợi).

Sự thay đổi lớn nhất xảy ra trong mã này (so với các ví dụ trước) là chúng tôi giới thiệu một "tiến trình con" trong Python để gọi một chương trình bên ngoài, trong trường hợp này là Arduino IDE. Tệp YAML OpenAPI của chúng tôi (openapi.yaml) là thứ cung cấp cấu trúc cho ChatGPT về thông tin nào nên được giao và cách nó nên được giao. Khi xem xét phần "components" ở cuối tệp YAML, bạn sẽ nhận thấy các phần khác nhau của đối tượng trả về mà chúng tôi mong đợi:

  

components:

  schemas:

    CodeSnippet:

      type: object

      properties:

        language:

          type: string

        code:

          type: string

        description:

          type: string

          nullable: true

      required:

        - language

        - code

Chúng tôi đã yêu cầu ChatGPT không chỉ cung cấp mã lệnh mà còn cả ngôn ngữ và, tùy chọn, một mô tả về mã lệnh đó. Chúng tôi xử lý payload đó trong app.py. Quan trọng hơn việc chỉ xử lý lệnh là chúng tôi cũng trả về các phản hồi HTTP có ý nghĩa nếu có điều gì đó hỏng trong quá trình đó. Điều này giúp cung cấp ngữ cảnh và nói cùng một "ngôn ngữ" với máy chủ web/AI bot của ChatGPT.

Việc triển khai, mặc dù có phần thô sơ, nhưng rất đơn giản: chúng tôi đổ đoạn mã vào một tệp INO tạm thời, xác minh và/hoặc tải lên Arduino, và xóa tệp INO tạm thời. Rõ ràng, có rất nhiều cách mà điều này có thể sai sót bao gồm một lượng lớn các rủi ro về an ninh không thể vượt qua. Luôn luôn rất quan trọng, để hạn chế môi trường phát triển của bạn và, nếu mở nó ra cho thế giới bên ngoài, thực hiện tất cả các biện pháp an ninh cần thiết để đảm bảo môi trường của bạn an toàn.

Chỉ cho vui, tôi cũng đã triển khai một lệnh đọc serial cơ bản rất đơn giản cho phép GPT Action tùy chỉnh của chúng tôi có khả năng đọc từ cổng serial của Arduino. Điều này cho phép chúng tôi xác minh rằng cổng serial đang hoạt động mà không cần kiểm tra thủ công từ máy tính của chúng tôi. Một kịch bản mẫu có thể là nếu bạn yêu cầu ChatGPT viết và tải mã lên Arduino của bạn từ điện thoại thông minh của bạn. Điều này, tất nhiên, có thể được mở rộng thành một triển khai serial kiểu get/set chính thức hơn nơi bạn gửi lệnh và đọc lại phản hồi qua serial (như được triển khai trong Cấu hình một Dự án Vòng Lặp Phần Cứng).

Kết luận

Trong bài viết này, chúng tôi đã cho thấy AI có thể làm nhiều hơn là chỉ viết mã - nó còn có thể đảm bảo mã hoạt động bằng cách chạy nó trên các thiết bị thực tế. Điều này giống như việc có một nhà phát triển không chỉ viết dự án cho bạn mà còn kiểm tra nó để đảm bảo nó đúng. Với các ví dụ chúng tôi đã sử dụng, bạn có thể thấy điều này có thể thay đổi cách chúng ta tạo và kiểm tra dự án của mình, làm cho mọi thứ nhanh chóng và dễ dàng hơn. Tất cả các bước và mã lệnh chúng tôi đã sử dụng được chia sẻ, vì vậy bất kỳ ai quan tâm cũng có thể thử nghiệm và xem AI có thể giúp ích như thế nào trong công việc của họ.

Khám phá thêm về dự án tiên phong này và tham gia vào cuộc cách mạng tại: https://gitlab.com/ai-examples/ai-arduino-code-builder.

About Author

About Author

Ari is an engineer with broad experience in designing, manufacturing, testing, and integrating electrical, mechanical, and software systems. He is passionate about bringing design, verification, and test engineers together to work as a cohesive unit.

Related Resources

Tài liệu kỹ thuật liên quan

Back to Home
Thank you, you are now subscribed to updates.