Короткие промты для LLM точнее длинных. Доказано.
Я листал исследования по искусственному интеллекту и наткнулся на статью под названием "Same Task, More Tokens" (вот ссылка, если интересно: https://arxiv.org/html/2402.14848v1). Ученые из Бар-Илана задались простым, но важным вопросом: что происходит с точностью моделей, когда текст, который они обрабатывают, становится длиннее? Чтобы это проверить, они создали специальный набор данных FLenQA и устроили моделям настоящий стресс-тест.
Представьте: они брали два ключевых кусочка информации — например, "Маша младше Пети" и "Петя младше Саши" — и засовывали их в текст разной длины, от 250 до 3000 токенов, разбавляя всяким "мусором". А потом спрашивали: "Маша младше Саши?" И смотрели, справится ли модель или начнёт путаться.
Что они узнали (и почему я с этим согласен)
1 Главный вывод меня не удивил, но всё равно впечатлил: чем длиннее текст, тем хуже модели справляются с задачей. Точность падает с приятных 0.92 до грустных 0.68, когда текст доходит до 3000 токенов. И это при том, что технически модели могут брать куда больше! Я сам замечал, что если закинуть в нейросеть длинющий запрос, я она начинает "плыть" — упускать детали или фокусироваться не на том.
2 Eсли ключевые куски текста стоят в конце, точность чуть выше. Учёные назвали это "эффектом недавности" — мол, модель лучше запоминает, что было недавно. Если в длинном запросе важное спрятано в начале, а потом идёт куча лишнего, модель может это случайно "забыть". А если оно в конце — шансов больше, что нейросеть ухватит суть.
3Они ещё попробовали метод Chain-of-Thought (CoT) — это когда модель сначала рассуждает шаг за шагом, а потом даёт ответ. Например: "Маша младше Пети. Петя младше Саши. Значит, Маша младше Саши. Ответ: да". CoT помогает, но не спасает полностью — точность всё равно падает с ростом текста. Только GPT-4 показал, что с длинными текстами CoT работает чуть лучше, чем без него.
На этом графике больше всего расстроил меня Gemini Pro, ведь в него можно загрузить до миллиона токенов. Но на практике получается, что это не имеет большого смысла.
Как это использовать на практике
1. Короткие промпты — наше всё. Лучше держать запросы до 500 токенов. Для русского текста это примерно 2720 символов, для английского — около 1500. Если текст длиннее, его стоит резать на куски. Самые точные ответы находятся в промптах до 250 токенов - 1360 символов на русском или 750 на английском. Переводите русские промпты на английский, чтобы таким образом сжимать свой промпт, ничего в нем не меняя.
2. Ключевое — в конец. Если сократить не получается, ставьте важное ближе к финалу. Модель лучше это заметит.
3. CoT для длинных текстов. Если задача сложная, попросите рассуждать пошагово. Это не панацея, но шансы на точный ответ растут.
4. Дробите задачи. Вместо одного огромного запроса лучше разбить его на подзадачи. Например, не "проанализируй весь договор", а "найди сроки в пункте 1", "проверь подписи в пункте 2".
5. В чат-ботах используйте векторные базы данных. Если делаете ассистента, даже простого, то не найдетесь, что загрузив в системный промпт правила, он будет хорошо отвечать. Векторная база самого ассистента GPT или внешняя типа pinecone или supabase
Советы
Недавно я делал видео о том, что в промптах нужно устранять противоречие. Но этого мало.
Нужно убирать из промпта смысловые повторы (лично я грешу этим и пишу одну и ту же идею разными словами). Смысловой повтор буквально уменьшает точность ответа.
Ужимайте промпты, выкидывайте всё лишнее, оставляйте только мясо. Не надо резать важное, но если в запросе трижды повторяется одно и то же или куча ненужных деталей, это только мешает.
Например, вместо "Проанализируй договор, посмотри его внимательно и скажи, есть ли там пункт о сроках, а также убедись, что сроки указаны чётко" лучше просто: "Найди в договоре пункт о сроках".
А если текст всё равно длинный, то используйте модели с встроенным рассуждением (типа o1, o3, R1 от DeepSeek или Grok). Они лучше справляются с простынями, т.к. CoT вшит в их алгоритм работы.