JavaScript こういう実験テスト用にはいいけど、実装になるとやっぱPython+C++かなぁ。
でも、これにあとrobot2体、別々の一人称を置いて言語の収束を観たいし、world側のイベントも増やしたい。3人称のNPCに「ma-ma]と云わせたいしね。
デザインは酷いけど、そんな事言ってられない・・・
となると、JavaScriptのボトルネックと云うより、僕の作った構造を変える必要がある。
robot ごとに毎フレーム worldSnapshot を丸ごと作り直す部分は流石に重い。
worldSnapshotとは
どこに何がいるか
適当な大きさ
適当な速度
声
状態
地形
時刻や phase
データベースじゃなくて
robotが読みやすくするための、ただの切り出し断面
ここは負荷がかかる。
entities を object の配列ではなく、たとえば
posX = new Float32Array(maxEntities)posY = new Float32Array(maxEntities)
velX = new Float32Array(maxEntities)
velY = new Float32Array(maxEntities)
kind = new Uint8Array(maxEntities)
state = new Uint8Array(maxEntities)
するとPythonのNumPyみたいな感覚で扱えると思う。
worldSnapshot を毎回 deep copy せず、robot には「配列参照+entityCount」だけ渡せるようにするか・・・
で、実装ロボットだけど、とりあえず候補は
15自由度、姿勢安定、micro:bit / Python 対応が明示されていて、四足としての身体性が最初からある。さらに CM4 版は Raspberry Pi 系なので、Atron の内部をより深く載せ替える余地があるかも。Atron は「一人称で受け取って、引きずりで変わる」側が本体なので、最初から犬っぽく完成していることより、転ぶ・迷う・近づく・回り込むといった身体の手応えがあることのほうが重要だからね。その点で XGO は初期実験のAtronにかなり合うかもしれない。
でも、Linux 環境のOSOYOO や SunFounder の PiCar-X のような車輪型は15000円代だから最初はそれでもいい。
Flashの電源を切っても消えない保存領域
RAMの動いている最中だけ使う作業場
AtronなんかはFlash や SDカードや eMMC みたいな不揮発ストレージに合う。
逆に会話ロボットや完成済みペットロボットはAtronに合わない。Atron に必要なのは、賢そうな応答より、内部の変化が行動に滲む余白だから。
言語はいきなりLLM系は必要ない。
神経系を別に考えているから。
いずれLLMを介在。ことば化、要約、外界との橋渡し、必要時の相談相手程度。
OpenAI の現行APIでは、まず Responses API が中核で、構造化出力やツール呼び出し、会話状態の管理、WebSocket モードなどが用意されている。APIキーはブラウザへ直書きせず、サーバー側で扱う必要がある。
Atron にはだいたい3段。
1. とりあえず
Atron はローカルで自律し続け、一定条件のときだけ LLM に送る形。
たとえば、
発話が連続した
新しい対象に長く注目した
carry が大きく変化した
この時だけ、Atron 側が小さな JSON を作ってサーバーへ送り、LLM には
「今の状態を短い言葉にして」
「返答候補を3つ」
「相手に伝える文にして」
のように頼みます。返ってきた結果を そのまま行動命令にしない 。
Atron は Atron のまま動き、LLM は通訳や編集者になる。Structured Outputs を使えば、LLM の返答を JSON Schema に合わせた形で受け取りやすい。
2. 会話相手としてつなぐやり方
Atron が外に向かって話す時だけ LLM を使う形。
流れは
→ 短い状態要約JSON
→ LLMが相手向けの文を生成
→ 音声またはテキスト出力
この時、LLM に渡すのは全部ではなく、
今の focus直近の impression 上位
recall の主成分
carry の主要値
発話の癖
相手との距離や関係
くらいで十分。
3. 道具を呼ぶ窓口としてつなぐやり方
これは LLM に「考えさせる」のではなく、「外部手段を選ばせる」使い方。
たとえば Atron が
天気を知りたい
人にメッセージを送りたい
ログをまとめたい
という時、LLM に function calling / tool calling を使って、決められた関数だけ呼ばせる。OpenAI の現行APIでは tool calls がサポートされていて、モデルが呼ぶ関数名と引数を返せる。ただし引数は必ず自分の側で検証する必要がある。まぁ当り前だよね。
0 件のコメント:
コメントを投稿