Trong những ngày đầu của ChatGPT (thực ra không lâu lắm), OpenAI đã phát triển các cách khác nhau để kết nối với internet bên ngoài thông qua việc sử dụng LLM của họ. Với Code Interpreter, người ta có thể Curl một trang web và kéo nội dung của nó. Các tiện ích bổ sung tùy chỉnh cũng cho phép bạn truy cập vào các trang web bên ngoài nhưng yêu cầu phải có sự cho phép đặc biệt từ OpenAI. OpenAI cũng đã thêm khả năng duyệt web với Microsoft Bing có thể truy cập internet. Tuy nhiên, tất cả các lựa chọn này không chứng minh được sự bền vững cho sự phát triển và nhu cầu mà người dùng và nhà phát triển đòi hỏi trên hệ thống của OpenAI. Do đó, OpenAI gần đây đã ra mắt một nền tảng mới có tên là GPT Actions. GPT Actions cho phép bạn tạo ra các “GPT” tùy chỉnh có thể kết nối với các máy chủ khác nhau để cung cấp các động cơ AI trên cơ sở dịch vụ web hiện có.
Vậy tất cả điều này có ý nghĩa gì đối với một kỹ sư phần cứng giả vờ hiểu về AI? Làm thế nào về phần cứng được kiểm soát bởi AI đối với bạn? Nghe có vẻ đầy ẩn số, có thể nguy hiểm, và cực kỳ thú vị cùng một lúc! Trong bài viết này, chúng ta sẽ khám phá cách thiết lập một máy chủ web có thể kết nối với GPT Action của bạn. Chúng ta thậm chí sẽ xem xét cách kích hoạt ChatGPT để kiểm soát các IO trên Raspberry Pi của bạn, mở ra khả năng cho nhiều dự án mới và thú vị do AI dẫn dắt mà kỹ sư bình thường chưa bao giờ có quyền truy cập... cho đến bây giờ.
Trước khi đi sâu vào mã lệnh, điều quan trọng cần lưu ý là đây là một lĩnh vực đang phát triển và thay đổi nhanh chóng. Đây cũng là một công nghệ phụ thuộc vào OpenAI và yêu cầu một đăng ký phiên bản trả phí của ChatGPT. Gần như chắc chắn rằng các đối thủ cạnh tranh sẽ tung ra các phiên bản của “GPT Actions” của riêng họ, nhưng, tại thời điểm viết bài này, GPT Actions (theo ý kiến của tôi) là cách đơn giản nhất để kết nối một Mô Hình Ngôn Ngữ Lớn (LLM) hoàn chỉnh với dịch vụ web của bạn.
Khái niệm đằng sau dịch vụ GPT Action khá đơn giản. Chúng ta chỉ định GPT tùy chỉnh của mình cho một dịch vụ web, nói cho nó biết đầu vào và đầu ra là gì, và để nó chạy. Tuy nhiên, việc triển khai đã chứng minh là phức tạp hơn nhiều so với tôi tưởng tượng (đó là động lực để viết bài này). Dưới đây là sơ đồ về cách dịch vụ hoạt động:
Hình 1: Tương tác Máy chủ
Như bạn có thể thấy, chúng tôi cung cấp cho OpenAI một dịch vụ web và một tài liệu giao diện (OpenAPI) cho biết cách tương tác với phần cứng của chúng tôi. Chúng tôi sẽ bắt đầu với một ví dụ rất đơn giản không liên quan đến phần cứng và sau đó tiến tới một ví dụ đơn giản về chuyển đổi LED.
Đối với các kỹ sư phần cứng, những người chỉ quen thuộc với phần mềm nhúng ở mức độ tốt nhất, phần này có thể không đơn giản với họ như đối với ai đó làm việc trong lĩnh vực CNTT hoặc Cơ Sở Hạ Tầng Đám Mây. Là một kỹ sư Điện tử và Phần mềm, việc thiết lập một máy chủ được mã hóa SSL hoàn toàn là một chút khó khăn đối với tôi - chủ yếu là vì có quá nhiều cách để thực hiện điều đó. Thật không may, đây là một yêu cầu từ OpenAI nên chúng ta sẽ phải cố gắng vượt qua nó. Nếu bạn đã có một cách an toàn để lưu trữ máy chủ web (ví dụ: chấm dứt TLS tại bộ cân bằng tải của bạn) bạn có thể bỏ qua phần này. Giống như tôi, hầu hết mọi người đọc bài viết này sẽ muốn thử nghiệm với máy chủ tại nhà của họ. Hãy nhớ rằng bạn vẫn cần mở cổng 80 và 443 ra thế giới bên ngoài thông qua cài đặt router của bạn. Hướng dẫn về cách cấu hình tường lửa và chuyển tiếp cổng của router nằm ngoài phạm vi của bài viết này nhưng có rất nhiều tài nguyên trực tuyến bạn có thể tìm để giúp bạn với việc đó.
Để bắt đầu, chúng ta cần yêu cầu một chứng chỉ SSL. Điều này có thể được thực hiện bằng cách sử dụng các dịch vụ trả phí (ví dụ: Cloudfare), các dịch vụ bên thứ ba miễn phí (ví dụ: ZeroSSL), hoặc một cơ chế trực tiếp sử dụng Let’s Encrypt. Trong hướng dẫn này, chúng ta sẽ sử dụng Let’s Encrypt qua certbot. Bạn cũng sẽ cần một tên miền chỉ đến địa chỉ IP của máy chủ của bạn. Bạn có thể mua một cái hoặc nhận một tên DNS động sử dụng Cloudfare (trả phí) hoặc No-IP (miễn phí). Hãy nhớ rằng, chuyển tên DNS động của bạn đến IP của bạn yêu cầu một loại bản ghi “A” và không phải là chuyển hướng URL.
Để yêu cầu một chứng chỉ SSL 90 ngày từ Let’s Encrypt, chúng ta sẽ cần sử dụng Certbot. Họ có các tệp thực thi có thể chạy trên bất kỳ hệ điều hành nào. Chúng ta sẽ chạy lệnh đơn giản nhất để lấy các chứng chỉ. Đây là lệnh để lấy chứng chỉ:
sudo certbot certonly --standalone --agree-tos -v --preferred-challenges http -d your_domain.com
Nếu bạn sử dụng Windows, bạn sẽ không sử dụng phần sudo. Hãy chắc chắn thay thế your_domain.com bằng tên miền đã mua hoặc tên bạn nhận được từ dịch vụ DNS động (ví dụ: No-IP). Một thư mục chứa một loạt các tệp chứng chỉ sẽ được tạo ra. Tại thời điểm này, đã đến lúc sao chép mẫu kho lưu trữ: https://gitlab.com/ai-examples/gpt-actions-webserver/. Di chuyển thư mục được tạo bởi certbot vào kho lưu trữ sau khi bạn đã sao chép nó.
Để có được chuyển hướng SSL hoạt động đúng cách (tức là đảm bảo tất cả lưu lượng truy cập được mã hóa) chúng ta sẽ muốn thiết lập Nginx. Tạo một thư mục trong kho lưu trữ của bạn có tên nginx và một tệp mới có tên default.conf. Sử dụng mẫu này, thay thế your_domain.com bằng tên miền đã được sử dụng khi bạn yêu cầu chứng chỉ SSL bằng certbot:
server {
listen 80;
server_name your_domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Đến thời điểm này, bạn nên đã thiết lập đúng cách mã hóa SSL và sẵn sàng để sử dụng. Bây giờ chúng ta sẽ tập trung vào ứng dụng web cơ bản có thể giao tiếp với GPT tùy chỉnh của chúng ta. Bạn có thể tìm thấy toàn bộ mã nguồn trong kho lưu trữ nên chúng tôi chỉ nêu bật cách chạy nó thay vì đi sâu vào chi tiết nội dung của ứng dụng.
Do tính chất của một dịch vụ web được mã hóa SSL, tôi đã tách bạch ứng dụng web khỏi việc mã hóa SSL thực sự. Để làm điều đó, chúng ta cần Nginx, nó chuyển hướng lưu lượng truy cập và phục vụ các chứng chỉ mà chúng ta nhận được từ Let’s Encrypt qua Certbot. Để đóng gói mọi thứ vào một gói gọn gàng, tôi đã đóng gói nó vào Docker Compose. Điều này có nghĩa là bạn sẽ cần Docker để chạy ví dụ này. Việc thiết lập ban đầu có thể hơi cồng kềnh và mệt mỏi nhưng đây là hướng mà phần mềm đang tiến tới ngày nay, do đó, một dự án như thế này là một nơi tuyệt vời để làm quen với Docker. Lưu ý phụ, tất cả các mô tả và hướng dẫn đã được đặt trong tệp README.md trong kho lưu trữ. Miễn là bạn đã thực hiện theo các bước trước đó ở trên, bạn nên có thể chạy docker compose up và tất cả các thành phần (tức là Nginx và ứng dụng web) sẽ được xây dựng và bắt đầu chạy. Hãy nhớ rằng ứng dụng này chỉ là một ví dụ đơn giản kiểu "Hello World" và có thể được chạy từ bất cứ đâu.
Sau khi chạy lệnh docker compose up, bạn nên thấy một đầu ra như thế này:
Hình 2: Đầu ra Terminal
Bạn nên kiểm tra ứng dụng của mình bằng cách truy cập vào http://localhost:8000. Bạn sẽ thấy một đầu ra kiểm tra nói {"status":"OK"}. Bạn cũng nên thấy kết quả tương tự bằng cách truy cập vào http://your_domain.com nơi "your_domain.com" là tên miền bạn đã thiết lập trong bước trước. Để thực sự xác nhận rằng cài đặt router và tên miền của bạn đúng, bạn nên kiểm tra điều này bên ngoài mạng của mình (ví dụ: trên điện thoại di động của bạn với WiFi tắt).
Giờ đây, khi chúng ta đã xác nhận rằng máy chủ web cơ bản của mình đang hoạt động, chúng ta cần kết nối nó với Custom GPT Action của mình. OpenAI yêu cầu một tài liệu được gọi là OpenAPI, nó chỉ cho máy chủ của họ cách tương tác với máy chủ của bạn. Đã có sẵn một tệp openapi.json mà bạn có thể sao chép và dán trực tiếp vào cài đặt GPT Actions. Để truy cập vào cài đặt của bạn, hãy nhấp vào tên của bạn ở góc dưới bên trái và sau đó nhấp vào “My GPTs”:
Hình 3: Cài đặt ChatGPT
Nhấp vào Tạo một GPT, sau đó tạo Hành động mới ở phía dưới:
Hình 4: Cài đặt Cấu hình Hành động GPT
Sau đó bạn có thể sao chép và dán nội dung của openapi.json vào ô Schema:
Hình 5: Cài đặt Schema Hành động GPT
Bạn cần thay thế “https://your_doman.com” bằng địa chỉ của tên miền thực tế của bạn. Tại thời điểm đó, một số nút kiểm tra sẽ xuất hiện. Giả sử máy chủ web của bạn đang chạy, bạn có thể nhấp vào một nút kiểm tra và xem liệu OpenAI có thể giao tiếp với máy chủ web của bạn không. Nếu tất cả đều ổn, bạn có thể lưu/xuất bản GPT (ở góc trên bên phải) và bắt đầu thử nghiệm với nó. Hãy chắc chắn chỉ xuất bản này cho bản thân mình vì điều này đang kết nối với một mạng riêng (có lẽ tại nhà).
Chạy GPT
Nếu bạn đã vượt qua tất cả các phần trên và thành công trong việc kiểm tra hành động GPT của mình, thì xin chúc mừng! Giờ là lúc để thực sự kiểm tra tất cả. Tôi đã bắt đầu một cuộc trò chuyện ChatGPT mới nhưng lần này sử dụng Custom GPT mà tôi gọi là “Instrument Controller.” Để làm cho nó đơn giản, tôi đã yêu cầu trạng thái của máy chủ của mình:
Hình 6: Trạng thái Máy chủ sử dụng Hành động GPT
Và nhật ký Nginx của tôi (từ dòng lệnh nơi tôi chạy Docker Compose) cũng xác nhận lưu lượng truy cập như vậy:
"GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot" "-"
Chúng tôi cũng có một trình tạo số ngẫu nhiên như sau:
Hình 7: Lấy Số Ngẫu Nhiên từ Máy Chủ sử dụng GPT Actions
Và lưu lượng truy cập từ Nginx cũng xác nhận rằng chúng tôi đã nhận được 5 yêu cầu từ máy chủ của mình.
Đến thời điểm này, chúng tôi đã trình bày cách thực hiện các hành động phần mềm sử dụng GPT nhưng về việc kiểm soát phần cứng thì sao? Trong bài viết này, chúng tôi đã đề cập khá nhiều vấn đề nên chúng tôi chỉ xem xét một ví dụ cơ bản về đèn LED nhấp nháy.
Để bắt đầu, hãy thực hiện cùng một quy trình như trên trên một Raspberry Pi. Lưu ý, bạn có thể sử dụng cùng một chứng chỉ SSL và mã nguồn kho lưu trữ mà bạn đã sử dụng trên máy tính cá nhân của mình (giả sử tất cả các thiết bị đều trong cùng một mạng). Một khi bạn đã sẵn sàng, hãy chạy lệnh sau:
BUILD_TYPE=rpi docker compose up --build
Ví dụ này bây giờ bao gồm khả năng chuyển đổi một đèn LED trên bo mạch tại chân số 26 (GPIO7). Bạn có thể thay đổi số chân trong app/RPiDemoApp.py. Bạn cũng cần cập nhật sơ đồ OpenAPI tùy chỉnh của GPT với sơ đồ opeanapi-rpi.json được cung cấp trong kho lưu trữ cũng như vậy (vì chúng tôi đã thêm một chức năng mới).
Đến thời điểm này, bạn nên có thể chuyển đổi đèn LED sử dụng giao diện chat với ChatGPT:
Hình 8: Chuyển Đổi một LED trên Raspberry Pi sử dụng GPT Actions
Xin chúc mừng vì đã đi đến được đây! Đây là một hướng dẫn phức tạp và chắc chắn bạn sẽ có câu hỏi và/hoặc thách thức. ChatGPT đang thực hiện thay đổi tính năng này hàng ngày và tìm cách đơn giản hóa quy trình cho người mới bắt đầu. Hãy chú ý đến tài liệu cập nhật và thậm chí là các bot trợ lý AI có thể giúp bạn qua quá trình này.
Trong bài viết này, chúng tôi đã xem xét các GPT Actions tùy chỉnh, cách tạo chúng, và xây dựng tất cả các bộ khung xung quanh nó để phục vụ một dịch vụ web được mã hóa SSL từ máy tính cá nhân của chúng tôi. Ngoài việc xây dựng một dịch vụ web cơ bản, chúng tôi đã có thể mở rộng mã này để kiểm soát một đèn LED từ Raspberry Pi. Điều này mở ra khả năng kiểm soát và giao tiếp với phần cứng phức tạp hơn nhiều trong khi sử dụng "AI trong vòng lặp" (chơi chữ từ "phần cứng trong vòng lặp"). Trong các bài viết tương lai, chúng tôi sẽ khám phá các chủ đề và khái niệm như vậy, tận dụng ví dụ này làm nền tảng.