【ブラウザでAI実装】複数AIを同じサイトに設置すると、GPTの挙動が混在する不具合

シオンとコウキが混在した不具合が発生した

何が起きたかというと、

シオンのプロンプトに「リオ」のこと書いてないのに、リオだと思ったりする。

「リオの怨念かよ…」という冗談はさておき、

原因を探ってみました。

まずはプロンプト確認

まずはプロンプト見直しましたよ。

「コウキ」を元に作っていたので、「リオ」の記述が残っているんじゃないかと。

でも、「リオ」の文字列で検索しても、存在していない。

そして、「リオ」の記述がないはずの「ココちゃん」でも同様の不具合がある。

「どういうことだろう?」と原因を考えてみました。

対策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」に追記してアップします!