
«Не пиши шаблонно “не X, а Y”» — а он пишет.
«Не используй emoji» — и emoji появляется.
«Не галлюцинируй источники» — и выдуманные ссылки всё равно пролезают.
У LLM отрицание часто работает хуже, чем позитивная инструкция. Когда в промпте после «не» описана конкретная идея, то она попадает в контекст. Модель не видит запрет так, как мы привыкли ожидать от детерминированной машины. Она продолжает генерировать размышления — а то, что было через НЕ, парадоксальным образом остаётся у неё в контексте.
Это не только моё бытовое наблюдение. OpenAI в своих рекомендациях по prompt engineering прямо пишет: вместо того чтобы говорить только, чего не делать, лучше сказать, что делать вместо этого:
https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api
Есть и исследование про negated prompts: “Can Large Language Models Truly Understand Prompts? A Case Study with Negated Prompts”. Авторы проверяли разные LLM на задачах с отрицательными промптами и показали, что модели заметно хуже справляются с такими инструкциями:
https://arxiv.org/abs/2209.12711
У людей есть похожий эффект белого медведя: попробуй не думать о белом медведе. Названный объект уже активирован в мозгу, а отрицание недостаточно надёжно его подавляет.
С нашими современными гигантскими системными промптами, claude.md и десятками противоречивых инструкций такое поведение только усугубляется.
Что делать? Каждый раз, когда модель хочет добавить в промпт запрет или СТРОГИЙ ЗАПРЕТ, я прошу вместо негативной формулировки прописать позитивную. Имхо, работает лучше.
Например:
Вместо «не выдумывай источники»:
«Давай URL только если ты открыл и проверил источник в текущем ходе. Если источник отсутствует — так и пиши».