はじめに
AI診断の再生成画面には、「再生成の理由」を入力する欄がありました。入力内容はデータベースに保存され、履歴画面にも表示されていました。
それでも、理由を書いて再生成しても、AIはその指摘を知らないまま、同じ条件で診断を作り直していました。
原因は、保存・表示された理由が、生成プロンプトへ渡されていなかったことです。
この記事では、入力・保存・表示が揃っているのに生成結果へ反映されなかった原因と、生成プロンプトへ修正指示を渡す方法を整理します。
こんな人に向けて書いています
- AI生成機能にフィードバック入力欄を追加している人
- 入力値がデータベースや履歴画面まで届くことを確認している人
- 「保存されているのに、AIの出力が変わらない」問題を調べている人
この記事でわかること
- 入力・保存・表示だけでは、AIの生成条件が変わらない理由
- 再生成理由を生成プロンプトへ渡す位置
- 同じ問題を見つけるための確認手順
再生成理由が保存されていても、AIは読んでいない
今回の実装では、再生成理由を入力できました。
入力した理由はデータベースに保存され、履歴画面にも表示されます。
ここまで見ると、フィードバックが次の生成に使われているように見えます。
しかし、AIが参照するのは、実際に生成処理へ渡されたプロンプトです。
データベースに保存されていることや、画面に表示されていることだけでは、生成条件に影響しません。
再生成理由が生成プロンプトに含まれていなければ、AIはその指摘を知りません。
その結果、同じ入力情報から、同じ条件で診断を作り直します。
いつ起こるか
ユーザー入力を保存・表示する処理と、AIへ渡すプロンプトを組み立てる処理が分かれているときに起こります。
その間の受け渡しが抜けると、保存された値が生成処理まで届きません。
手順1:値がどこまで届いているかを分けて確認する
この問題を調べるときは、次の処理を分けて確認します。
- 入力欄から値を受け取る
- データベースへ保存する
- 履歴画面へ表示する
- 再生成処理へ渡す
- AIへ渡すプロンプトへ含める
入力・保存・表示まで確認しても、AI生成への反映までは確認できません。
特に重要なのは、AIへ渡す直前のプロンプトです。
そこに再生成理由が含まれているかを確認します。
手順2:生成プロンプトへ修正指示を渡す
今回の修正は、再生成理由がある場合だけ、生成プロンプトへ修正指示を追加する処理でした。
const promptParts = [
basePrompt,
];
if (regenerationReason) {
promptParts.push(
`再生成の理由・修正指示:\n${regenerationReason}`,
);
}
const prompt = promptParts.join("\n\n");
この例では、再生成理由があるときだけ、生成に使うプロンプトへ追加しています。
空の理由を修正指示として渡さず、値を追加する場所も確認しやすくするため、この条件付きの形にしました。
これにより、データベースに保存され、履歴画面に表示されていた理由を、AIへ渡せるようになります。
未注入の状態では、AIは再生成理由を知らないため、同じ条件で再生成します。
保存処理や履歴表示だけを確認しても、この問題は見つけられません。
なぜ生成プロンプトへ追加するのか
再生成理由は、前回の診断に対する修正指示です。
そのため、生成に使う情報をまとめているプロンプトへ含める必要があります。
確認するときは、画面表示だけでなく、次の境界を順番に追います。
この途中で値が消えていれば、その後の処理からは参照できません。
結局どこを直すか
今回の修正は、生成プロンプトへ再生成理由を注入するブロックの追加でした。
入力欄・保存・履歴表示が揃っていても、それだけではAI生成に反映されたとはいえません。
重要なのは、再生成理由が生成リクエストの入力に含まれていることです。
AI機能にフィードバック欄を追加するときは、次の順番で確認すると切り分けやすくなります。
- 入力値が受け取られているか
- 保存された値が再生成処理へ渡っているか
- AIへ渡す最終プロンプトに含まれているか
- 修正指示として読める形になっているか
フィードバックを保存するだけでは、品質改善にはつながりません。
AIがそのフィードバックを読める場所まで、値を運ぶ必要があります。
関連記事
個人でAIツールや業務自動化を作っているMiyokiといいます。
AI生成機能のように、自分の作業を楽にするための小さなツールを作っては、その開発ログをZennとQiitaに書いています。
作ったものやポートフォリオはこちらです。