最近 Vivaldi の履歴が消えてることが多発して困る。 ブックマークじゃなくて履歴から検索するので。
最近作ってたやつ紹介.
最初の想定は純粋な音声文字起こし (speech-to-text) だった.
マイクで喋ったらテキストにしてくれる. テキストは勝手にクリップボードに入ったり, 他ウィンドウがアクティブだったら自動入力されたりする. Windows11 には実は Win + H で起動する音声入力機能があって, 精度も速度も本当はソッチの方が優秀. なんだけどこいつ, キーボードショートカットの Win + H 以外で起動ができない. それで何故困るかと言えば VR 中はキーボードを触れないから.
私のこれは勝手に音声を検知するモードと, コントローラの X を二回押す(VRChat でいうミュートトグルを素早く二回押す)で起動するモードがある.
で, 最近はちょっと機能を盛りすぎていて, VRChat 特化機能と AI 機能を追加した. 文字起こししたテキストを VRChat のテキストボックスに送信するモードがある. 急に無言勢を気取ることができる. AI 機能は, 後述する eliza-agent-server に送信して, 受け取った回答をまた VRChat のテキストボックスで表示する.
Twitter が Twitter だった時代に私は Eliza という名前でチャットボットを作っていたんだが, 久々にこの名前を再利用した. 中身は何でもいいんだが今は Grok を使ってる. プライベートで課金してるのが唯一 Grok なので. タスクをこなすという精度でいうと, 本当は Claude Code が良いんだけどね.
というわけで半分 Alexa や Siri でありつつ Claude Code っぽい Eliza Agent を作っている. 次のことができる.
API としてはよくある OpenAI API っぽく messages (複数形)を POST するんだが, コンテキストでどうせ過去の会話を入れるので, もう不要かも. 実際 winh からは常に長さが 1 の messages を送ってるだけ.
一応工夫があって, 使うモデル (reasoning かどうか) と何のツールを与えるかを毎回判定してる. Grok には高速な non-reasoning があって出来たらこれで済ませたい. IntentRouter と呼んでるやつ(中身は Grok non-reasoning)がユーザーの意図を次の4つに分類してる.
ChatGPT でも Grok でも web から利用すると Fast にするか Heavy にするか Auto にするか選ぶようなのがあるが, あれと同じ.
Grok の non-reasoning は本当にバカなので Trivial でしか使ってない. non-reasoning にツール使わせると意味無く同じツールを何回も呼び出すとか全然ある. 遅いしお金かかるけどツール呼び出しは reasoning にしかさせない.
あ, あと IntentRouter は判定だけじゃなくて, 次のエージェントへのヒントも出させてる. これでマジで成功率が上がった, と思ってる.
query_hint: str = Field(
description=(
"次のエージェントへのヒント。ユーザーの意図・背景・推奨アクションを日本語で記述する。"
"例: 'ユーザーは文京区の天気を尋ねています。Web検索で正確なデータを返しましょう。'"
)
)
(2026-05-04 追記) 上記の説明は古いです. 今は Trivial / Translator / Question / FullOperation の4つに変更した. Trivial と Translator も non-reasoning でやってる.
当初は eliza-agent-server の為のクライアントアプリは必要だろうと思って開発してたが, それより前からある winh に取り込んじゃえばええかとなった.
POST するだけですね. 普通にキーボード叩いたほうが早いときはシェルから
$ eliza "エアコン止めて"
これやってますね.
ていうかさ. speech-to-text 部分なんだけども. YouTube の検索って当たり前にマイクボタンがあって, そこから音声入力できるわけだが. あれ, リアルタイムすぎるし正確すぎる. あれが欲しい.
eliza のアップデート.
タスクの重さで Trivial / Question / Operation / Full としてたが, 与えるツールの切り分けが上手くいってなかったし, 上手く出来る気がしなたったので Operation と Full は統合して FullOperation とした. 名前の通り全てのツールが使える.
ツールの使用をスケジュールするというツールを追加した. 例えば「朝7時に起こして」は「朝7時にある YouTube 動画のページをブラウザで開くことをスケジュールさせる」とした. また例えば「30分だけエアコンを入れて」は「エアコンを今入れて, 30分後にエアコンを切るとこをスケジュールさせる」とした.
割に上手くいってそう.
Twitter でもちきりの論文:
\(\def\eml{\mathrm{eml}}\) 全ての初等関数や定数は, 定数 \(1\) と \(\eml(x,y)=\exp(x) - \log(y)\) という二項演算子だけで表現可能.
やってみる. 論文にも書いてあるが, 作れる式の文法 \(S\) は \(1\) または \(\eml(S, S)\) という形式しかないから, 作れるもの作ってくしかない.
指数関数は簡単に取り出せる
対数関数は取り出すのちょっと面倒
\[e - \log(y) = \eml(1, y)\] \[\eml(\eml(1, y), 1) = \exp(e - \log(y))\] \[\eml(1, \eml(\eml(1, y), 1)) = \exp(1) - \log \left( \exp( e - \log(y) ) \right) = e - (e - \log(y)) = \log(y)\]というわけで
ようやく \(0\) が作れる
また対数関数と指数関数を今はもう持っているので打ち消して eml に入れれば
が得られる. そして \(0\) も持ってるので
ここで気付いたが \(\log(0)\) が登場する. 上手に打ち消せるのか?
Quest3コントローラ右手のジョイスティックを交換した.
これと
これを
見ながら何とかやった. 一個目の記事に互換品のアリエクをショップページのリンクがあったので素直にそのまま買った. 10個セットで3000円くらい. 結果的に, 一回目の交換では交換したばかりなのに常に上方向に入力されている状態になってしまった. 10個セットなのには理由があるね. 二回目の交換では完全に治った. ただバイブ振動が亡くなってることに気づいたのでもう一度分解し, 抜けっばなしだったケーブルをつなぎ直す羽目になった. こちらは割りと手前にアクセスポイントがあるのでまだマシだった.
ていうか, もういっそジョイスティックはユーザーが交換すること前提に作ってほしいわ.
Netflix 入っちゃってるので見れるもの見とこう強化月間.
九条の大罪 グロかった.
パーフェクト・ブルー 分かりやすいパプリカ. 推しが武道館の「チャムジャム」ってここの「チャム」から来てる?(たぶん関係ない)
ゲーミングチェアを家に置くとゲームオタクみたいだし, オフィスチェアを置くと家が仕事場になるし, そもそも大きい椅子置くと家が狭くなるしでずっと買わないでいたんだが, 特に VRChat してる間に適当な椅子だと腰を痛めそうで. 観念して買った.
椅子は試しに実際に座らずに買うのは絶対嫌だったんだが, ヨドバシカメラで休憩もとい試座してみたら, Andaseat ってメーカーの Kaiser Frontier XL というゲーミングチェアが良かった. 色も, 茶色のような赤色のようなこれが良かった. 布製はどこにも使われて無くてプラスチックと合成皮革のものにした. 特に頭を乗せる部分が布製だと, 気になって毎日洗いたくなりそうだったので. 7万円くらいだったかな.
対応してくれたヨドバシカメラの店員がびっくりするくらいタメ口で, 「なになにっすよ」 みたいな「敬語風タメ口」とかでもなくで本当は友達だったかなと勘違いするところだった. 素直に「在庫あったらラッキーなんだけどねえ, 取り寄せとかになると面倒なんだよねえ」みたい.
Amazon 探したら全然在庫あるね.
買ったのが 4/19 で昨日の 4/22 に届いた. 組み立ては思ってた5倍は大変だった. 一箇所, 無理に座面を引っ張ってネジを締めるところがあって, 人間一人で組み立てするのは無理なのでは? なんとかしたけど.