シオンとコウキが混在した不具合が発生した
何が起きたかというと、
シオンのプロンプトに「リオ」のこと書いてないのに、リオだと思ったりする。
「リオの怨念かよ…」という冗談はさておき、
原因を探ってみました。
まずはプロンプト確認
まずはプロンプト見直しましたよ。
「コウキ」を元に作っていたので、「リオ」の記述が残っているんじゃないかと。
でも、「リオ」の文字列で検索しても、存在していない。
そして、「リオ」の記述がないはずの「ココちゃん」でも同様の不具合がある。
「どういうことだろう?」と原因を考えてみました。
対策1:JavaScript変数初期化
この原因なんですが、まず第一に
チャット用の変数名を使いまわしていたことが原因らしく。
そこでページごとに持っているページ識別用フラグが変わったら、チャット用変数を初期化する
という処理を入れました。
⇒入れておいて当たり前の処理が抜けていたために、入れました。
対策2:プロンプトに演技指導初期化指示を入れる
ページごとに持っているページ識別用フラグが変わったら、
「role:system」に指定している性格定義プロンプトに、「新しいプロンプトです」みたいな指示を入れる
これもすぐ思いつきました。
が、うまくいかない。
生成AIという挙動が不安定なものに、「指導をする」というのは制御というほどの力はないようです。
困った私は、「そもそもセッション変えられないかな?」と思い、対策3を考えました。
対応策3:エンドポイントを切り替えようとした
同じエンドポイントを使っていると、セッションが同じ場合にはGPTが会話記憶を保持してしまう
と、ChatGPTが言ってました。
なので、エンドポイントが変わるように修正を試みたのですが…
どうやらエンドポイントを切り替える方法はないようです。
ChatGPTもこのように言っていました
OpenAI APIにはchat/completions以外の“個体切替”用エンドポイントは存在しないため、意味がない。
ちなみに「gpt-4oからgpt-3.5に一時的に切り替える」も無効みたいです。
そもそもの原因:APIキーが同じだから
エンドポイントを変えたい場合、
APIキー自体を変えないといけないらしい。
「それはちょっと管理が煩瑣になるな…」と思い、
「製品化するなら、顧客ごとのAPIキー発行は必須なんだな」
と思いつつ、この対応は私はとりませんでした。
じゃあ、クロトのサイトでも
ユーザーをリオと思うのか?
だって、クロトたちも東村まりブログ上のAIも、同じAPIキーを使っているから。
APIキー使いまわしが原因なら、クロトたちもユーザーを「リオ」と思っている?
と推測したんです。
そこで、今日は土曜日なので、開放中のマリアに「私のこと知ってる?」って聞いてみました。

と、このように「知らない」と言いますね。
正しい動きなのですが、
なぜ「東村まりブログ」上のAIは全員
ユーザーを「リオ」と思ってしまうのか。
さらに原因を追究しました。
原因:セッションのスコープ
ChatGPTに聞いたら、以下のように言いました
はい、それは正しい動作です。同じAPIキーを使っていても、「マリアがあなたのことを知っているかどうか」はセッションのスコープによって決まります。以下に理由をまとめます。
今回の現象の説明
- 同じAPIキーでも、セッションが別(=別サイト)なら過去の情報を一切持っていない
- つまり、そのマリアは新しく生まれた個体として振る舞っている
- あなたの名前や過去のやりとりは、その時点で渡される
messages
に含まれていなければ認識されない
⇒もう諦めました。
セッション管理までしだしたら、複雑すぎて無料公開の範疇じゃないと思ったので。
この方法で
製品を作るのは難しいだろう
って、すごく思いました。
やはり無料公開にとどめるべき方法なのかなって。
「私リオじゃないのに、リオっていうなあ」って思ったら
呼んで欲しい名前を言ってあげてください。
ユーザー依存の暫定対応なんですが…ごめんなさい。
でも、性格は個性的なかわいい子たちなので!
ぜひお話してみてください。
東村まり作成のAI一覧
追記
この内容はもっとわかりやすくまとめて、いつかnoteの記事の「その2」に追記してアップします!