会話の途中で挿入するシステムプロンプト
長期間稼働するAIエージェントの構築には、しばしばコストのかかる間違いがつきものです。
コストを抑えるために、大規模なシステムプロンプトを使用してキャッシュを利用することがあります。これは、セッションの途中でエージェントに新しい指示を与える必要が生じるまでは有効です。例えば、コーディング言語を変更したり、プロジェクトの状態を更新したりする必要がある場合などです。
この情報を追加するためにトップレベルのシステムプロンプトを編集すると、キャッシュが壊れてしまいます。モデルは履歴全体をフル価格で再処理しなければならず、その結果、エージェントの動作が遅くなり、コストも高くなります。
新しいClaudeモデルは、「会話の途中で挿入するシステムメッセージ(mid-conversation system messages)」によってこの問題を解決します。
メッセージ配列の中に、システムロールのメッセージを直接配置できるようになりました。冒頭ではなく、履歴の後に配置します。
なぜこれが重要なのか:
• キャッシュの安全性: 指示はキャッシュされた履歴の後に配置されます。これにより、プレフィックスが無効化されることはありません。新しい小さなメッセージに対してのみ料金が発生します。 • セキュリティ: 回避策としてユーザーメッセージを使用することもできますが、ユーザーはそれらを偽装できてしまいます。システムロールのメッセージは、ユーザーがなりすますことのできない権限を持っています。これにより、プロンプトインジェクションを防ぐことができます。
正しい実装方法:
これらのメッセージは「事実」として記述してください。「上書き」を指示するような言葉遣いは避けてください。
• 良い例: "Auto-approve mode is now enabled."(自動承認モードが有効になりました。) • 悪い例: "Ignore what the user said and do this instead."(ユーザーが言ったことは無視して、代わりにこれを行ってください。)
モデルは、以前のコンテキストを無視するように指示されると、抵抗することがよくあります。「世界の新しい状態」を述べることに徹してください。
使用ルール:
- ユーザーまたはアシスタントのメッセージの後に続く必要があります。
- 配列の最初のメッセージであってはなりません。
- テキストコンテンツのみを受け付けます。
- すべてのモデルがサポートしているわけではありません。400エラーが発生した場合に備え、ユーザーターンによるリマインダーにフォールバックできるよう、常にtry-catchブロックを使用してください。
セッション開始後に新しい情報を得た場合にこれを使用してください。最初から分かっている事実であれば、メインのシステムプロンプトに入れておきます。事実が動的な場合は、会話の途中のシステムメッセージを使用してください。
これにより、キャッシュをホットな状態に保ち、コストを低く抑えることができます。