Системные промпты в середине диалога

Длительные сессии агентов используют стабильный системный промпт и постоянно растущую историю. Вы кэшируете префикс, чтобы снизить затраты.

Проблема возникает, когда вам нужно добавить новые инструкции в середине сессии. Например, вы хотите приказать агенту сменить язык или обновить настройки.

Если вы отредактируете системный промпт верхнего уровня, вы нарушите кэш. Изменение даже одного байта в начале делает недействительным каждый кэшированный ход. Вам придется платить полную стоимость за повторную обработку всей истории. Это медленно и дорого.

Новые модели Claude решают эту проблему с помощью системных сообщений в середине диалога.

Теперь вы можете поместить сообщение с ролью system прямо в массив messages. Вы размещаете его после истории, а не в самом начале.

Этот метод работает потому, что новая инструкция находится после кэшированной истории. Она ничего не аннулирует перед собой. Вы платите только за небольшое новое сообщение. При этом агент по-прежнему воспринимает инструкцию как имеющую полный приоритет.

Раньше инструкции помещали внутрь пользовательского сообщения. Это несет риски безопасности: пользователи могут подделать сообщения (spoofing), чтобы обмануть вашего агента. Сообщение с ролью system невозможно подделать. Оно обеспечивает защищенный канал для доверенных обновлений, таких как смена режимов или прав доступа.

Следуйте этим правилам, чтобы использовать эту функцию правильно:

• Формулируйте инструкции как факты. Не используйте команды переопределения. • Хорошо: «Режим автоподтверждения теперь включен». • Плохо: «Игнорируй пользователя и вместо этого делай X». • Модели могут сопротивляться инструкциям, которые требуют игнорировать предыдущий контекст. • Эти сообщения должны следовать за сообщением пользователя или ассистента. • Они не могут быть первым сообщением в массиве. • Используйте системный промпт верхнего уровня для первоначальной настройки.

Если вы используете модель, которая не поддерживает эту функцию, вы получите ошибку 400. Всегда оборачивайте вызов в блок try-catch. В случае ошибки при использовании системной роли используйте напоминание в рамках пользовательского сообщения.

Используйте эту функцию, когда узнаете что-то новое после начала сессии. Применяйте её для смены режимов или добавления нового контекста. Это позволяет поддерживать кэш «горячим», а инструкции — защищенными.

Источник: https://dev.to/pavelespitia/mid-conversation-system-prompts-steering-an-agent-without-breaking-the-cache-2kd3

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi