観察バッファ
記事の閲覧・滞在時間 → POST /observation/push → transient(1 時間)
訪問者がどの記事をどれくらい読んだかを一時的に残し、次のチャットでプロンプトを組むときに取り出して空にします。「さっき読んでいた記事」に触れられるのはこのためです。非公開やパスワード付きの記事は「非公開」とだけ記録し、タイトルは書きません。
How it runs · v2.33.3
訪問者がページを開いてから、キャラクターが一言しゃべるまで。
その間にどのプログラムが動いているかを、四枚の図で追います。
PHP がキャラクターの外枠と最初のセリフをページに直接書き出し、ブラウザが /init で残りの設定を受け取ってから、最初の一言を誰が話すかを順に判定します。
js/ukagaka-features.js の processSettings() にあります。ページ感知に当たったときは起動時のセリフを先に止め、普通のセリフが記事へのコメントより先に出ないようにしています。セリフはすべて同じメッセージ欄に書かれます。そのため表示の直前に「今この流れが話してよいか」を確かめます。AI を使う流れは、どれも同じサーバー側の処理を通ります。
いちばん手順の多い流れです。ブラウザから届いた履歴が書き換えられていないかを確かめ、同じセッションでは一度に一件だけを処理し、返事は少しずつストリーミングで返します。
/chat/user も順番は同じで、返事を一度に返します。その場では話しませんが、データをどこかに残しておき、次にセリフを作るときに使われる処理です。
訪問者がどの記事をどれくらい読んだかを一時的に残し、次のチャットでプロンプトを組むときに取り出して空にします。「さっき読んでいた記事」に触れられるのはこのためです。非公開やパスワード付きの記事は「非公開」とだけ記録し、タイトルは書きません。
最近の会話から管理人についての事実を抜き出して保存し、以降のシステムプロンプトに毎回添えます。
設定した確率(1〜10%)でその日に書くかを決め、一日に一本までです。チャットとは別の AI プロバイダーを使えます。
怪しいリクエストを止めて記録します。集まった統計は、チャットで彼女に報告してもらうこともできます。