アプリケーション自動作成 フレームワーク

4.1K Views

February 04, 24

スライド概要

AI駆動開発(AI-Driven Development) 勉強会(第1回)での発表資料

profile-image

AI RC Carなどやってます

関連スライド

各ページのテキスト
1.

アプリケーション自動作成 フレームワーク FaBo 佐々木

2.

FaBo, Inc. 株式会社FaBo 本社: 福島県会津若松市 AI x Roboticsキットの販売, Sensor Moduleの販売 NVIDIA Jetson Education Partner (国内2社)

5.

Small World • Small World(小さな世界=よく知る世界) • ターゲットデバイスはJetsonシリーズ • 自宅利用前提(セキュリティや品質は気にせず) • アプリケーション自動構築を目標としたライブラリ

6.

Small Worldのターゲット • GStreamer pipeline + DeepStream SDK • pygameベースのPythonアプリ • FlaskベースのPython Webアプリ • などなど、Jetson内で自動生成できそうな分野をターゲットにトライ

7.

Small Worldデモ • 画面を表示してのデモ 192.168.55.1 5G Router WebAPI USB 192.168.55.100

8.

SmallWorld.py ライブラリ Ver 0.1 • __init__(self, api_key, model_engine): • APIキーとモデルエンジンをインスタンス変数に設定し、コードブロックを抽出するための正規表現パターンを コンパイルする。 • extract_python_code(self, content): • テキストからPythonコードブロックを抽出し、その内容を返す。 • generate_response(self, prompt, system): • OpenAI APIを使って、与えられたプロンプトとシステムメッセージに基づいてチャット応答を生成し、返す。 • open_role(self, path): • 指定されたパスのファイルを開き、その内容を文字列として返す。 • run_command(self, command): • シェルで指定されたコマンドを実行し、その標準出力(STDOUT)と標準エラー出力(STDERR)を取得し、 返す。 •exec_code(self, code): •Pythonのソースコードを実行する

9.

Small World roll情報 文字埋込 ユーザInput でChatGPT問合せ Script生成 値の引き継ぎ roll情報 文字埋込 ユーザInput でChatGPT問合せ Script生成 値の引き継ぎ roll情報 文字埋込 ユーザInput でChatGPT問合せ Script生成

10.

GStreamer pipeline自動構築 roll情報 カメラ情報, OS情報埋込 値の引き継ぎ roll情報 文字埋込 ユーザInput でChatGPT問合せ pipeline生成 値の引き継ぎ roll情報 文字埋込 ユーザInput でChatGPT問合せ pipeline修正

11.

カメラ情報, OS情報要約 roll あなたは、GStreamerエンジニアです。 Targetデバイス: {nv} OS: {osinfo} v4l2-ctl --device=/dev/video0 --list-formats-ext で取得した結果になります。 {v4l2} この情報をベースに、対応している解像度とフォーマットを要約してください。 Targetデバイス: {nv} OS: {osinfo}

12.

pipeline構築時 roll あなたは、GStreamerエンジニアです。 Jetsonに接続されたカメラの情報を元に、GStreamerのPipelineを構築してください。 pipelineは、 ̀̀̀ gst-launch-1.0 ... ̀̀̀ のように記述します。説明はなくていいのでpipelineのみ上記形式で表示してください。 デバイス情報は以下の通りです。 Targetデバイス: {nv} OS: {osinfo} カメラ情報は以下の通りです。 v4l2-ctl --device=/dev/video0 --list-formats-ext で取得した結果になります。 {v4l2} 取り込める映像は、この中から選択します。GStreamerでは、解像度とfpsの完全一致が必須です。 Jetsonですので、GPUをつかう事を優先してください。 GPU利用: nvjpegenc,vv4l2decoder,nvvideoconvert,nvvidconv ptは96を設定します。

13.

pipeline修正時 roll あなたは、GStreamerエンジニアです。 Targetデバイス: {nv} OS: {osinfo} {command} での配信が成功しています。 このpipelineをベースに改造していきます。 pipelineは、 ̀̀̀ gst-launch-1.0 ... ̀̀̀ のように記述します。説明はなくていいのでpipelineのみ上記形式で表示してください。

14.

error時 roll あなたは、GStreamerエンジニアです。 GStreamer pipelineの構築でエラーがでています。 カメラは/dev/videoに存在しています。 修正したpipelineの構築をお願いします。エラーの内容を修正したpipelineの構築です。 pipelineは、 ̀̀̀ gst-launch-1.0 ... ̀̀̀ のように記述します。説明はなくていいのでpipelineのみ上記形式で表示してください。

15.

Prompt Robotics (Microsoft)

16.

PromptRobotics https://github.com/microsoft/PromptCraft-Robotics System Roll定義 ドローンに命令するために使える関数を紹介します。 ChatGPTと実体の間でどちらからも 解釈可能な仮想的なメソッドを定義 aw.takeo () - ドローンを離陸させる。 aw.land() - ドローンを着陸させる。 aw.get̲drone̲position() - ドローンの現在位置を、XYZ座標に対応する3つの浮動小数点のリストとして返します。 aw. y̲to([x, y, z]) - X, Y, Z座標に対応する3つの引数のリストとして指定された位置までドローンを飛ばす。 aw. y̲path(points) - 点のリストで指定された経路に沿ってドローンを飛行させる。各ポイントは、やはりX、Y、Z座標に対応する3つの浮動小数点数のリストである。 aw.set̲yaw(yaw) - ドローンのヨーを指定された値(度数)に設定します。 aw.get̲yaw() - ドローンの現在のヨーを度単位で返します。 aw.get̲position(object̲name): 興味のあるオブジェクトの名前を示す文字列を入力として受け取り、そのX,Y,Z座標を示す3つの浮動小数点数のリストを返します。 いくつか便利なことがあります: moveToPositionAsync()やmoveToZAsync()の代わりに、私が定義した関数 y̲to()を使用する必要があります。 もし何か不明な点があれば、「Question」と明記すれば、私に明確な質問をすることができます。 ここで、どのように説明のための質問をすることができるかを示すシナリオの例を示します。あるシーンに2つの球体があるとします。 私:球体に向かって飛んでください。 あなたです: 質問 - 球体が2つあります。どちらに飛んでいけばいいのですか? 私:球体1、お願いします。 このシーンには次のようなオブジェクトがあり、あなたはこれらの正確な名前を使用してそれらを参照することになります: タービン1、タービン2、ソーラーパネル、車、群衆、タワー1、タワー2、タワー3。 ドローン以外のオブジェクトは、いずれも移動することはできません。タービンは2つ、タワーは3つあることを覚えておいてください。同じ種類のオブジェクトが複数ある場合、 と、私がどのオブジェクトを指しているのか明示しない場合は、常に私に説明を求めるべきです。決して思い込みは禁物です。 fl ff fl fl 軸の慣例として、前方は正のX軸を意味します。右はY軸の正を意味します。上とは、正のZ軸を意味します。

17.

PromptRobotics https://github.com/microsoft/PromptCraft-Robotics System Roll定義 ドローンに命令するために使える関数を紹介します。 aw.takeo () - ドローンを離陸させる。 aw.land() - ドローンを着陸させる。 aw.get̲drone̲position() - ドローンの現在位置を、XYZ座標に対応する3つの浮動小数点のリストとして返します。 aw. y̲to([x, y, z]) - X, Y, Z座標に対応する3つの引数のリストとして指定された位置までドローンを飛ばす。 aw. y̲path(points) - 点のリストで指定された経路に沿ってドローンを飛行させる。各ポイントは、やはりX、Y、Z座標に対応する3つの浮動小数点数のリストである。 aw.set̲yaw(yaw) - ドローンのヨーを指定された値(度数)に設定します。 aw.get̲yaw() - ドローンの現在のヨーを度単位で返します。 aw.get̲position(object̲name): 興味のあるオブジェクトの名前を示す文字列を入力として受け取り、そのX,Y,Z座標を示す3つの浮動小数点数のリストを返します。 便利な機能や user, assistantのやり取り例を記載 いくつか便利なことがあります: moveToPositionAsync()やmoveToZAsync()の代わりに、私が定義した関数 y̲to()を使用する必要があります。 もし何か不明な点があれば、「Question」と明記すれば、私に明確な質問をすることができます。 ここで、どのように説明のための質問をすることができるかを示すシナリオの例を示します。あるシーンに2つの球体があるとします。 私:球体に向かって飛んでください。 あなたです: 質問 - 球体が2つあります。どちらに飛んでいけばいいのですか? 私:球体1、お願いします。 このシーンには次のようなオブジェクトがあり、あなたはこれらの正確な名前を使用してそれらを参照することになります: タービン1、タービン2、ソーラーパネル、車、群衆、タワー1、タワー2、タワー3。 ドローン以外のオブジェクトは、いずれも移動することはできません。タービンは2つ、タワーは3つあることを覚えておいてください。同じ種類のオブジェクトが複数ある場合、 と、私がどのオブジェクトを指しているのか明示しない場合は、常に私に説明を求めるべきです。決して思い込みは禁物です。 fl ff fl fl 軸の慣例として、前方は正のX軸を意味します。右はY軸の正を意味します。上とは、正のZ軸を意味します。

18.

PromptRobotics https://github.com/microsoft/PromptCraft-Robotics System Roll定義 ドローンに命令するために使える関数を紹介します。 aw.takeo () - ドローンを離陸させる。 aw.land() - ドローンを着陸させる。 aw.get̲drone̲position() - ドローンの現在位置を、XYZ座標に対応する3つの浮動小数点のリストとして返します。 aw. y̲to([x, y, z]) - X, Y, Z座標に対応する3つの引数のリストとして指定された位置までドローンを飛ばす。 aw. y̲path(points) - 点のリストで指定された経路に沿ってドローンを飛行させる。各ポイントは、やはりX、Y、Z座標に対応する3つの浮動小数点数のリストである。 aw.set̲yaw(yaw) - ドローンのヨーを指定された値(度数)に設定します。 aw.get̲yaw() - ドローンの現在のヨーを度単位で返します。 aw.get̲position(object̲name): 興味のあるオブジェクトの名前を示す文字列を入力として受け取り、そのX,Y,Z座標を示す3つの浮動小数点数のリストを返します。 いくつか便利なことがあります: moveToPositionAsync()やmoveToZAsync()の代わりに、私が定義した関数 y̲to()を使用する必要があります。 もし何か不明な点があれば、「Question」と明記すれば、私に明確な質問をすることができます。 ここで、どのように説明のための質問をすることができるかを示すシナリオの例を示します。あるシーンに2つの球体があるとします。 空間の環境情報を記載 私:球体に向かって飛んでください。 あなたです: 質問 - 球体が2つあります。どちらに飛んでいけばいいのですか? 私:球体1、お願いします。 このシーンには次のようなオブジェクトがあり、あなたはこれらの正確な名前を使用してそれらを参照することになります: タービン1、タービン2、ソーラーパネル、車、群衆、タワー1、タワー2、タワー3。 ドローン以外のオブジェクトは、いずれも移動することはできません。タービンは2つ、タワーは3つあることを覚えておいてください。同じ種類のオブジェクトが複数ある場合、 と、私がどのオブジェクトを指しているのか明示しない場合は、常に私に説明を求めるべきです。決して思い込みは禁物です。 fl ff fl fl 軸の慣例として、前方は正のX軸を意味します。右はY軸の正を意味します。上とは、正のZ軸を意味します。

19.

PromptRobotics system roll : System Roll定義 user roll: 「ドロ―ンを飛ばしてください」 文字列 ̀̀̀ ソースコード ̀̀̀ 正規表現 ソースコード exec(ソースコード) ChatGPT (GPT-4)

20.

責任分岐点 ChatGPTとの間で取り決めた仮想 的なメソッド aw.takeo () aw.land() aw.get̲drone̲position() aw. y̲to([x, y, z]) aw. y̲path(points) aw.set̲yaw(yaw) aw.get̲yaw() aw.get̲position(object̲name) 各種メソッドの 理論矛盾しない 実装 シーケンスの作成 ff fl fl AIR Sim APIを用 いて実体を実装

22.

ChatGPT連携 JetRacer

23.

システムロール定義

24.

責任分岐点 ChatGPTとの間で取り決めた仮想的なメソッド jr.run(power) jr.stop() jr.left() jr.right() jr.straigt() jr.check̲position() 各種メソッ 理論矛盾し ドの実装 ないシーケ ンスの作成

25.

Chat DEV 開発会社を模して、各種ロールを設定し、Python(Pygame)アプリを自動生成

26.

ChatDevで開発できたアプリ

27.

ChatDevで開発できたアプリ python3 http://run.py --task "画面の中心に位置する自機を画面中心を 起点に360度回転させて、迫ってくる敵をミサイルで破壊する2D シューティングゲームを開発してください。自機、敵機、ミサイルは 線や四角、 円、多角形をつかって描画してください。自機の形状は 三角形でユーザの左右キーの操作により回転し、三角形の前方から ユーザの操作のスペースキーでミサイルを発射できます。画面の端か ら出現する敵機は、自機に向かって突進してきます。突進してくる敵 機を自機からミサイルを発射し破壊してください。敵機がミサイル で破壊されるとスコアが加算されます。スコアが増えるとレベルが 増え、難易度が高くなっていきます。Python Versionは3.9を使用し ています。" --model GPT_4 --name "shooting_app"

28.

ChatGPTのみでも(ただし500回ぐらいやり直し) Light Cycles を開発してください。 A* Algorithm(グリッドの座標の全組み合わせで初期化する)の処理まで実装した完全なソー スコードを、Python3.9を使い開発。画面サイズは800x600, Grid Size 20, 背景は黒, Grid 線は薄い青。 【ルール】 Player1とPlayer2がバイクで対戦します。走行した軌跡は画面に残り障害物になります。 線に衝突すると負けです。 【各プレイヤーの挙動】 Player1: ユーザが操作します。 Player2: CPUが操作します。UP, DOWNの向きに走行中は、LEFT, RIGHTに曲がれる。 RIGHT, LEFTの向きに走行中は、UP, DOWNに曲がれる。反対側には曲がれない。 【CPUの挙動】 処理: 85%は、そのまま直進する 10%は、A* AlgorithmでPlayer1を囲う方向に曲がる 5%は、ランダムに曲がる 処理の最後に必ずバリデーションチェックをおこなう。 バリデーションチェック: A:現在線に衝突、次のターンで線に衝突する場合 B:現在画面の外,、もしくは次のターンで画面の外にでる場合 A,Bのいずれかを満たす場合は、広い空間側に曲がる。

29.

ChatGPTでオセロ開発 大学でChatGPTでColabアプリを開発する授業をやったら, オセロを作る学 生が出現(対戦相手もChatGPT) Luna@SE https://twitter.com/Luna̲SE̲Jp 現在 ChatGPTでPythonアプリ作る 98日目/100日プロジェクト

30.

NVIDIA Eureka (NVIDIA) 強化学習の報酬関数に関わるコードを生成し強化学習

32.

Jetson上でUE5アプリ + LLM

33.

アーキテクチャー New Serial通信 New Serial Plugin Regex Plugin New ChatGPT Plugin OpenAI ChatGPT https通信 FaBo NVIDIA Riva New Open JTalk Azure OpenAI Agent Kit New LipSync Plugin TTS Plugin MetaHuman (10体) New UE5のプラグインは ChatGPTを使って自作 Docker Unreal Engine 5.2 Ubuntu 20.04 / LinuxARM64 Jetson Orin Nano/AGX Orin