ハードウェアと会話するカスタムGPTアクションの構築方法とAIラボアシスタントの構築で、Generative AIを使用してハードウェアを制御する方法を学びました。ChatGPT内でカスタムGPTアクションを利用することで、ChatGPTにラズベリーパイからLEDを点滅させるだけでなく、実験室の機器を制御しデータを取得する能力を与えることができました。これは、人工知能をラボアシスタントとして使用し、機器から取得したデータを処理することができることを意味します。この記事では、Generative AIによってコードを書くだけでなく、組み込みターゲット上で実行し、その過程でフィードバックを受け取ることによって、さらに一歩進んでいます。
Generative AIを使用してコードを書くことは、組み込みシステムでさえ、新しいことではありません。既にコードを一から完全に書くか、提案するだけの多くのツールがあります。ChatGPT、Gemini、Claudeなどの最も人気のある大規模言語モデルは、すべてコードを書くのがかなり得意になっています(比較については、Gemini vs. ChatGPT: どちらがより良いコードを書くかを参照してください)。私は1年以上前からChatGPTがコードを生成することについて書いてきました(ChatGPTを使用した自動テストを参照)し、それが今日の開発の唯一の方法であると説教してきました。本当の挑戦は、開発のループにAIを取り入れることです。
コード生成はある程度までしか役立ちませんが、Generative AIを使用する場合、それが機能することを検証し保証するには異なるアプローチが必要です。ChatGPTとのコードインタープリターは、ある程度、生成されたコードを実行し、それがあなたのために機能することを検証できるカプセル化されたPython環境を提供します。私はそれをさらに一歩進め、組み込みシステムで同じことを達成できるかどうかを見てみたいと思いました。OpenAIのChatGPTを使用するには2つのルートがあります。最も一般的なルートは、OpenAI APIを使用するクローズドループアプリケーションを作成することです。それはAPIを使用して大規模言語モデル(LLM)からコードをプロンプトして取得し、それをコンパイルし、Arduinoにロードし、生成されたコードの機能を検証するために追加のカスタムコードを使用します。私はGPTアクションを使用して、「コードペアリング体験」にすることで異なるアプローチを取ることにしました。その体験は次のようなものです:
図1: GPTアクションの例
例は単純かもしれません(つまり、オンボードLEDの点滅)が、上記のデモンストレーションで全てがまとまっています。私はカスタムGPTに明確な指示を与えることができ、期待通りに指示に従ってくれました。また、実際にデバイスにアップロードされ、LEDが1秒ごとに点滅することも確認できました。カスタムGPTを閉じたループシステムと比較して使用する良い点は、プロンプト内でかなり簡単に繰り返し作業ができることです:
図2: Arduinoスケッチの反復
いくつかの例を見たところで、これがどのように機能するか見てみましょう。
他のカスタムGPTの記事で見たように、このプロジェクトのGPTアクションの設定は、おおよそ同じです。Dockerfile、Docker Compose、SSL証明書、リポジトリの一般的な構造はあまり変わっていません。もちろん、設計コード自体とOpenAPI YAMLファイルは大きく異なります(予想される通り)。
このコードで起こる最大の変更(以前の例と比較して)は、「サブプロセス」をPythonで導入し、この場合はArduino IDEという外部プログラムを呼び出すことです。OpenAPI YAMLファイル(openapi.yaml)は、ChatGPTにどの情報をどのように提供すべきかの構造を提供します。YAMLファイルの最後にある「components」セクションを見ると、私たちが期待している返り値の異なる部分がわかります:
components:
schemas:
CodeSnippet:
type: object
properties:
language:
type: string
code:
type: string
description:
type: string
nullable: true
required:
- language
- code
ChatGPTには、コードだけでなく、そのコードの言語と、オプションでそのコードの説明も提供してもらいました。そのペイロードをapp.pyで処理します。コマンドを処理することだけが重要なのではなく、何かがプロセスで壊れた場合に意味のあるHTTPレスポンスを返すことも重要です。これにより、コンテキストを提供し、ChatGPTのWebサーバー/AIボットと同じ「言語」で話すことができます。
実装はやや粗末ですが、非常にシンプルです:コードスニペットを一時的なINOファイルにダンプし、Arduinoに検証および/またはアップロードし、一時的なINOファイルを削除します。明らかに、これには多くの問題が発生する可能性があり、包括的なセキュリティリスクがあります。常に開発環境を制限し、外部からアクセス可能にする場合は、環境を安全に保つために必要なすべてのセキュリティ対策を実施することが極めて重要です。
ちょっとした楽しみとして、カスタムGPTアクションがArduinoのシリアルポートから読み取ることができる非常に基本的なシリアル読み取りコマンドも実装しました。これにより、手動でマシンから確認することなく、シリアルポートが動作していることを検証できます。たとえば、スマートフォンからChatGPTにArduinoへのコードの書き込みとアップロードを依頼する場合などが考えられます。もちろん、これはシリアルを介してコマンドを送信し、応答を読み取るより正式なget/setタイプのシリアル実装に拡張できます(Configuring a Hardware in the Loop Projectで実装されているように)。
この記事では、AIがコードを書くだけでなく、実際のデバイスで実行してコードが機能することを確認することもできることを示しました。これは、プロジェクトを書くだけでなく、それが正しいことを確認するためにテストもする開発者を持つようなものです。使用した例から、これがプロジェクトの作成とテストの方法をどのように変えるかがわかります。これにより、物事がより速く、簡単になります。使用したすべてのステップとコードは共有されているので、興味のある人は誰でも試して、AIが仕事にどのように役立つかを確認できます。
この先駆的なプロジェクトについてもっと知り、進化に参加してください:https://gitlab.com/ai-examples/ai-arduino-code-builder。