七海波音 9 周年官网:Jev 判定 3D 角色表情与动作
日本虚拟角色官网用 Jev 并行判定发言类型、情绪、动作和恶意与否,回复文本只从候选里选,从原理上杜绝幻觉和口吻崩坏。
9年前の今日、13時11分。これが七海波音の最初のツイートでした⚓️ デビュー9周年の今日、公式サイトを作り直したよ✨️ 3Dのわたしがに話しかけるとAIが判定して表情が変わって、動くし、清水港の空は気象庁の予報と時刻に連動する!そんなサイトです! https://nanamihanon.net/ 他にも遊びごころいっぱい! ━━━━━━━━━━ 🐟 このサイトでできること ━━━━━━━━━━ ・下の欄に話しかけると、私が表情と仕草で返事するよ。「おはよう」には「おっはのーん!」 ・背景の清水港は、今日の天気と時刻にリアルタイム連動。雨の日は雨が降って、夜はガントリークレーンと観覧車が光るの ・衣装は全32枚のトレカ。パックを破ると、SSRの開封ムービーが流れるよ✨ カードは傾けるとホロが光る ・コンテナの扉を開けると、お知らせや素材が出てくる ・年表は、クレーンが9年分のコンテナを1年ずつ運んでくるよ ・MMDモデルも配布中 ━━━━━━━━━━ ⚙️ ここから技術の話 ━━━━━━━━━━ ■ 3D three.js r170のMMDLoaderでPMXをWebGL直描画。物理演算は切って、表情はモーフ、仕草はボーン回転で制御。手を振るときは、前腕のロール軸(ひじ→手首ベクトル)まわりにクォータニオンを約1.5rad乗算して、手のひらを正面に向けてるよ。カメラはsetViewOffsetで、パースを崩さずに私だけ右に寄せてる。 ■ AI コメントの解釈は、TypeSafeのSystem Oneモデル「Jev」。発言の種類・気分・仕草をChoice×3、悪意の有無をNoul×1で並列に判定して、確率つきのtyped judgmentで返してもらうの。 返事の文章はLLMに生成させず、候補から選ぶだけ。ハルシネーションが原理的に起きなくて、キャラの口調も絶対に崩れない。AIには判定だけ任せて、表現はキャラ側が持つ設計だよ。 ■ 背景の清水港 画像じゃなくて、コードで描いてる。動かない部分はSVGをビットマップ化した静止層、観覧車・水上バス・かもめはCanvas2Dで毎フレーム合成。 気象庁の予報JSONを取得して、weatherCodesの先頭桁で晴れ/曇り/雨/雪のパレットとパーティクルを分岐。雷の日は稲光も走るよ。 夜はクレーンのブームに作業灯をRadialGradientで並べて、水面には光源ごとに位相をずらした正弦波の映り込み。観覧車は季節ごとの営業時間を判定して、営業中は七色LED、時間外はネオンがぼんやり灯る。 私の返事も、取得した天気と時間帯で分岐させてる。曇りの日に「いい天気だよ」とは言わないの☺️ ■ 開封ムービー パックを破るジェスチャーのtransient user activationの中でplay()を呼ぶから、音つきで自動再生できるの。弾かれたら無音で再生して「音を出す」ボタンにフォールバック。 動画はH.264をfaststartで1080p/720pの2本にエンコードして、画面幅で出し分け。扉を開けた時点でプリロードしておくよ。 iPhoneのSafariはRangeリクエストに206が返らないと再生しないから、エッジのWorkerでByte Rangeを切り出して返してる🎬 ■ インフラ 配信はCloudflare Workersのエッジ。静的アセットの前にWorkerを挟んで、問い合わせフォームは公式LINEへpush、旧URLは全部301で集約。 ■ 解析の自動化 GA4 Data APIとSearch Console APIを、Workerの中でWebCryptoを使ってRS256署名したサービスアカウントJWTで叩いて、毎朝cronで集計→公式LINEに朝レポートをpush。狙いのキーワードの順位も毎日追ってる。 検索対策はJSON-LDのPerson構造化データとサイトマップ。 ━━━━━━━━━━ むずかしいことを並べたけど、やることはシンプル。 9年分の清水港に来たつもりで、コンテナを開けて、パックを破って、私に話しかけてみてね🐟 10年目にむけて、よろしくお願いします!