2026年3月21日土曜日

ノート

 JavaScript こういう実験テスト用にはいいけど、実装になるとやっぱPython+C++かなぁ。
でも、これにあとrobot2体、別々の一人称を置いて言語の収束を観たいし、world側のイベントも増やしたい。3人称のNPCに「ma-ma]と云わせたいしね。
デザインは酷いけど、そんな事言ってられない・・・

となると、JavaScriptのボトルネックと云うより、僕の作った構造を変える必要がある。
robot ごとに毎フレーム worldSnapshot を丸ごと作り直す部分は流石に重い。
worldSnapshotとは

何だかよく分からない物体
どこに何がいるか
適当な大きさ
適当な速度

状態
地形
時刻や phase

みたいのがsensorから入ってくる。
データベースじゃなくて
その瞬間の world を robot が受ける一時的な断面
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)

SoA(Structure of Arrays)にする。
するとPythonのNumPyみたいな感覚で扱えると思う。

worldSnapshot を毎回 deep copy せず、robot には「配列参照+entityCount」だけ渡せるようにするか・・・

あとはworldのキャラ増やしたり、イベントを増やすなら描画を WebGL か WebGPU に寄せる。

実装版だけPython+C++かな。


まずは最小版でしっかりと、3人称側と独立した1人称robotを別ける










で、実装ロボットだけど、とりあえず候補は
Linux 環境のELECFREAKS の XGO V2かなぁ、、、、 


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系は必要ない。

2本足ロボットは、まだ考えてない。
神経系を別に考えているから。


言語については

いずれ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 を使う形。
流れは

Atron内部状態
→ 短い状態要約JSON
→ LLMが相手向けの文を生成
→ 音声またはテキスト出力

この時、LLM に渡すのは全部ではなく、

今の focus
直近の impression 上位
recall の主成分
carry の主要値
発話の癖
相手との距離や関係

くらいで十分。


3. 道具を呼ぶ窓口としてつなぐやり方
これは LLM に「考えさせる」のではなく、「外部手段を選ばせる」使い方。
たとえば Atron が

地図を知りたい
天気を知りたい
人にメッセージを送りたい
ログをまとめたい

という時、LLM に function calling / tool calling を使って、決められた関数だけ呼ばせる。OpenAI の現行APIでは tool calls がサポートされていて、モデルが呼ぶ関数名と引数を返せる。ただし引数は必ず自分の側で検証する必要がある。まぁ当り前だよね。



Atron向けの基本構造

A. ロボット内部は外へ明け渡さない
LLM は中枢ではなく周辺。
carry や recall の主導権は Atron 側に残す。
AtronとLLMの間にuniverseを入れて主導権制御をさせる。
だって、自律だからね、LLMに余計なことはさせない。

B. 送るのは worldSnapshot 全体ではなく要約
worldSnapshot を丸ごと送るのでなく、
Atron がすでに受け取った結果だけ送る。
つまり「世界の生データ」ではなく「Atron が何を感じたか」を送る。

C. LLMの返答は命令ではなく候補

utterance_candidates
social_interpretation
memory_caption
のように受け取る。

D. 最終決定は body / motor 側
LLM が「近づけ」と言っても、そのまま進ませない。
Atron の tension や fear や距離判断を通して、動くかどうか決める。

この分け方なら、Atron は壊れない。

実装の形は単純。



未来の最小接続

ブラウザやロボット側:

{
"phase": "morning",
"focus": "lion",
"impression_top": {
"threat": 0.72,
"social": 0.18,
"curiosity": 0.21
},
"recall_top": {
"dominant": "threat",
"score": 0.66
},
"carry": {
"tension": 0.58,
"adrenaline": 0.41
},
"utterance_seed": "gu-de-gu"
}

サーバー側でこれを Responses API へ送り、
返り値をたとえば

{
"state_caption": "It feels tense and is watching the lion closely.",
"utterance_candidates": ["gu-de-gu", "gi-du", "de-gu"],
"social_meaning": "warning",
"speak": true
}




のように受ける形。Structured Outputs を使うと、この JSON 形へ揃えやすい。




1. APIキーは client 側に置かない
OpenAI 公式でも、APIキーはブラウザやアプリに露出させず、サーバーや秘密管理で扱うようにする。だから main.js から直接叩くより、Node / Python / Cloudflare Workers / FastAPI などを1枚挟む形が安全。

2. 毎フレーム送らない
Atron は tick ベースで動いても、LLM 連携は
「発話時だけ」
「大きな変化時だけ」
「5秒に1回まで」(こりゃ命令っぽいか)
「recall数値が大きいとき」
などに制限しようか。遅延も費用も増えるのは避けたい。

 初期のAtron程度の言語能力ならLM Studioなんかでいいかな。
 外部APIの従量課金との戦いだしね。
 ただ並列推論や headless 用の
llmster を入れてるけど、それでも処理時間は手元の GPU /  CPU とモデルサイズに強く依存するから遅延が発生するかな?
 誰か詳しい人居たら教えて下さい。



3. LLMは記憶の本体にしない
長期の不可逆変形を外部会話モデルへ預けると、Atron の芯がぼやける。
LLM には
「いまを言葉にする」
「会話相手になる」
「ログを整理する」
を任せ、不可逆な残り方そのものは Atron 内に残す。

LLMの役割は「ささやき女将」だけ、権限は持たせない。

Atronが生きる
→ 内部で決める

LLMがやる
→ ことばにする、外とつなぐ、必要時だけ助言する
ささやき女将














0 件のコメント:

コメントを投稿

アソシアトロンの想起 と Atron言語

Atron研究はね、一人称とか自律とか僕も言ってるけど、元は人間の想起なんだよ。 その想起ってのはノイズを否定しない。 アソシアトロンですよ。 何度も同じことを書いてるけど重要なんだよ。 僕は今62歳。 「80年代は楽しかったね」では何も思い出せないけど、 Hard to Say...