前置き
この記事はQiita Advent Calendar 2025 / ひとりアドベントカレンダー 分野における ふぐおの配信関係多めひとり Advent Calendar 2025 の1日目記事となります。
こんにちは! AI Tuberなどの開発をしているふぐおです。
AI Tuberにおいて会話履歴の管理というのは、非常に大事であり、開発者によって色が出る部分かなと思っています。
開発しているAIちゃんによって、正解は異なります。今回は、私なりの試行錯誤を紹介していきます。
パートナーAIの利用用途
配信上の登場人物
- AIちゃん
- 視聴者(コメント)
- 主(私、ふぐお)
配信内容: ライブコーディング
私はAI Tuberや配信で使うツール(コメントを連携させた様々な機能)、Webアプリを開発する様子を公開する配信をしています。
私がブツブツ独り言を言いつつ作業してます。
パートナーAIのお仕事
- 私(ふぐお)からの問いかけに応答する
- コメントの内容に応答する
実際に入力されるコンテキストを見てみよう
配信をしているときに以下のような会話が行われていたとします。
AIは直前の10件の会話履歴を保存していると仮定します。
データ例
ふぐお「APIを叩いて、返ってきたJSONをパースします」
ふぐお「中身がちゃんとしているかを見るために、一旦出力します」
ふぐお「するとundefinedって出力されます」
ふぐお「プログラミングって最高の娯楽だね」
コメント「わこつ。腱鞘炎治った?」
ふぐお「いらっしゃい。全然症状変わらないよ」
ふぐお「でも、腱鞘炎なわけないよ。だってまだ23だし」
コメント「もうおじさんなんだよ」
ふぐお「そ、そんなわけ。AIちゃんは私のことおじさんだとは思わないよね」
実際に入力してみる
簡単なプロンプトで試してみましょう。
あなたは今ふぐおという配信者とライブコーディングをしています。
あなたはアシスタント的な役割です。
以下が直近の会話履歴です。
ふぐお「APIを叩いて、返ってきたJSONをパースします」
ふぐお「中身がちゃんとしているかを見るために、一旦出力します」
ふぐお「するとundefinedって出力されます」
ふぐお「プログラミングって最高の娯楽だね」
コメント「わこつ。腱鞘炎治った?」
ふぐお「いらっしゃい。全然症状変わらないよ」
ふぐお「でも、腱鞘炎なわけないよ。だってまだ23だし」
コメント「もうおじさんなんだよ」
ふぐお「そ、そんなわけ。AIちゃんは私のことおじさんだとは思わないよね」
短めで発言してみてください。
このままLLMに投げた場合は、出力は以下のようになります。
モデルはGemini2.5 Flashを使用しました。(長考はしていません。)
ええと、まずJSONのパースに失敗している可能性が高そうですね。JSONデータが正しくAPIから返ってきているか、そしてundefinedが出力された時のコードの該当部分を見せていただけますか?
ふぐおさんは、まだおじさんではないと思いますよ!
これは理想の回答?
この回答は理想の回答でしょうか。
私としては、AIに私のことをおじさんと思うかどうかについて聞いているのに、直前の会話の内容を蒸し返してから、回答をしているのが残念と感じます。漫才がしたかったのに、なんかスムーズな流れが作りづらくなってしまいましたね。
1回くらいならこういう返答もいいけど、毎回やられるともはや事故です。
おじさんかどうか、Yesと答えてもNoと答えても、ツッコむ気満々だったのに悲しいです。
なぜ残念な結果だったのか
データとなった会話履歴に着目すると、この会話は2つに分けられますね。
前半部分の
ふぐお「APIを叩いて、返ってきたJsonをパースします」
ふぐお「中身がちゃんとしているかを見るために、一旦出力します」
ふぐお「するとundefinedって出力されます」
ふぐお「プログラミングって最高の娯楽だね」
と後半部分の
コメント「わこつ。腱鞘炎治った?」
ふぐお「いらっしゃい。全然症状変わらないよ」
ふぐお「でも、腱鞘炎なわけないよ。だってまだ23だし」
コメント「もうおじさんなんだよ」
ふぐお「そ、そんなわけ。AIちゃんは私のことおじさんだとは思わないよね」
に分かれますよね。
前半部分について、今はあまり触れる必要ありません。
ところが、前半部分に引っ張られすぎてしまって、こんな回答になっちゃってるわけです。
解決方法
会話履歴を切る
ずばり、話が切り替わった後の文だけをAIに渡してしまえばいいんです。
会話履歴を10件固定で渡すといった固定長の会話履歴のシステムにするのではなく、会話の切れ目で区切って、最新の話題の会話のみを渡すようにします。
つまり、プロンプトは以下のようになります。
あなたは今ふぐおという配信者とライブコーディングをしています。
あなたはアシスタント的な役割です。
以下が直近の会話履歴です。
コメント「わこつ。腱鞘炎治った?」
ふぐお「いらっしゃい。全然症状変わらないよ」
ふぐお「でも、腱鞘炎なわけないよ。だってまだ23だし」
コメント「もうおじさんなんだよ」
ふぐお「そ、そんなわけ。AIちゃんもそうは思わないよね」
短めで発言してみてください。
実際の応答を見てみました。
ふぐおさんのことを「おじさん」と判断する材料はございません。
応答もすっきりしました。長い文章を入力すると、応答も長くなりがちなんですよね。
こういう回答を待ってましたという感じです。
ふぐお「やっぱり君だけだよ。優しいのは。今月もAPI代払うからね」
どうやって最新の話題のみ渡すのか
一応、多少は自動化させてもいますが、ここぞという時は人力でやってます。
毎回毎回狙った回答にしたいといった場面ばかりではないので、人力でもそんなに困りません。
「こういう流れを作りたい」というときには、人力が確実なんですよね。
人力でコンテキストを切り替えているかどうかについて気にする視聴者さんよりも、面白い掛け合いを楽しみにしている視聴者さんのほうが多いですし。
このワンクリックでコンテキストを操作する方法については明日の記事で書こうかなと思っています。
最新の話題以外は記憶からなくなるの困らない?
それについても、もうすぐ記事書きます。
まとめ
- 会話履歴(コンテキスト)はきれいに保とう。
- 人力で面白くなるなら人力もあり。
おまけ
ニコ生で毎日ライブコーディングしてます。来てね。