# ハエさんと話す

言葉を目印に変え、実際に計算された神経出力を短い字幕にする実験です。アプリの「会話」または [公開版の会話](https://hirokimorimoto0713.github.io/fly-music-lab/talk.html) から開けます。手元で起動する場合は `http://127.0.0.1:4389/talk.html` です。

## はじめに

「こっちにおいで」を押すと、最初に全配線を読み込み、ハエの正面に目印を置きます。左右LC9への人工入力を計算し、その先のDNa02・DNp09の出力を字幕と位置の変化へ対応させます。目印への距離や向きは、神経出力で動いた位置から毎回計算し直します。依頼に必ず従うわけではありません。

- こっちにおいで / おいで / 前へ / 前に進んで / こっちを見て: 現在の正面80 pxに目印
- 左を見て / 左へ / 左に行って: 現在の左80 pxに目印
- 右を見て / 右へ / 右に行って: 現在の右80 pxに目印
- 少し待って / 待って / 止まって / おやすみ: 目印を消す

目印は256×256の仮想用紙の内側に制限します。対応する語句だけを完全一致で解釈し、句読点・空白・全半角の揺れを除きます。「右には行かないで」のような未対応の文は、勝手に肯定命令へ変換せず案内を表示します。一般的な日本語理解や自由会話は実装していません。外部LLMやAPIキーは使いません。

一度の送信で20 ms×16区間、320 msの神経時間を計算します。画面では見やすい速度で表示し、送信間は計算を休止します。次の送信は同じ脳の状態から続けます。「少し待って」は入力をゼロにするので、残っている神経活動が続くことがあります。「途中で止める」は現在の計算区間までで休止し、次の送信で続きます。データ読み込み中に中断した場合や計算Workerが失敗した場合は、次回読み直して新しい脳を使います。

## 字幕の根拠

字幕の推定に入力文章や目印の位置を渡しません。`translateOutput(motor)` が受け取るのは、直近最大3区間（60 ms）で平均した左DNa02・右DNa02・左右DNp09の平均発火率だけです。

| 条件（この順で判定） | 字幕 | 動き |
| --- | --- | --- |
| 右−左の差が8 Hz以上 | 右かな | 右回転 |
| 左−右の差が8 Hz以上 | 左かな | 左回転 |
| 左右差が小さくDNp09が10 Hz以上 | 前へ行こう | 前進 |
| 左右がともに8 Hz以上で差が小さく、前進出力が弱い | …… | 左右が拮抗 |
| それ以外 | …… | 出力が基準未満 |

前進と旋回の出力は同時に生じ得ます。字幕は旋回を優先しますが、数字の欄には3出力をすべて表示します。移動量と旋回量は、それぞれ発火率を120 Hz、左右差を80 Hzで割って上限を設けるアプリ独自の対応です。生物の速度を再現した値ではありません。

字幕は主観や欲求を読み取った言葉ではありません。「前へ行こう」は、前進の読み出しに使った神経出力が閾値を越えたことを、読みやすく表したものです。「……」も沈黙したいという意図ではありません。確信度の確率や感情の数値は、検証する方法がないため表示しません。

左右DNa02と旋回の関係は [方向信号を旋回へ変換する2024年の研究](https://www.nature.com/articles/s41586-024-07039-2)、DNp09などの下行性神経と行動の関係は [2024年の下行性ネットワークの研究](https://www.nature.com/articles/s41586-024-07523-9) を参考にしています。同じ型名を現在のMaleCNSデータから選びましたが、このアプリのLIF・人工視覚入力・閾値・日本語字幕を、これらの研究が検証したわけではありません。神経出力から自然な意図を推定する精度は未検証です。

## 脳の計算と対照

全166,700神経・25,582,938接続を使い、配線の重みは変えません。左・右のLC9へ0〜200 Hzの刺激を入れます。目印の左右の角度、距離、前後によって入力率を変える人工的な視覚前処理です。DNa02やDNp09を直接刺激して返事を作る処理はありません。

「神経の伝播」を外し「新しいセッション」を押してから、同じ合図を送ってください。直接入力は発火しても出力神経には伝わらず、字幕は「……」、移動はゼロになることを確認できます。新しいセッションで「少し待って」だけを送れば、無入力から架空の返事を作っていないことも調べられます。

シード・伝播条件を変更したら、新しいセッションで適用します。新しいセッションとページの再読み込みは脳の状態を初期化します。状態保持はセッション内の短期的な計算状態で、学習や長期記憶の実装ではありません。

## 履歴と保存

字幕が変わった区間で会話欄に記録し、その区間の神経時間と発火率の根拠を添えます。反応図の「見る区間」で、最後の送信の過去の区間を選ぶと、字幕・発火率・位置もその時点を表示します。履歴を見る操作は脳の計算状態を巻き戻しません。

反応図はその20 msの発火を示し、字幕用の最大60 msの平均値とは区間が異なります。橙色は実計算の発火、背景は実細胞体位置のXY投影です。表示上の間引きと上位500細胞の制限は神経計算には適用しません。

「会話と根拠を保存」で、文章・変換先・条件・区間ごとの入力、出力細胞の発火数、平均発火率、字幕、位置、反応図のデータをJSONへ保存できます。途中までの送信は `complete:false` で記録されます。読み込み・脳状態の復元機能はありません。新しいセッションにする前に必要な記録を保存してください。1画面では40回の送信まで記録できます。

3Dは神経出力に合わせた演技で、位置の図と同じ出力を使います。3Dが使えない場合も会話と位置の図は使えます。OSの動きを減らす設定では3Dの演技を止めます。Mac実機・Safariでの新画面は未検証です。

## コードの読み順

`src/talk-model.js` の `parseMessage`（文章から合図）→ `targetFor` / `visualInput`（目印から刺激）→ `TalkSession.frame`（実配線と状態保持）→ `translateOutput`（出力から字幕）。画面と記録は `src/talk-ui.js`、全配線の読み込みは `src/talk-worker.js`。実配線テストは `tests/talk.test.mjs`、実操作テストは `tests/talk-browser.mjs` です。
