# Ollama repeat_penalty: как проверить повторы в ответе

Источник: https://modelium.tech/zhurnal/ollama-repeat-penalty/

`repeat_penalty` меняет склонность локальной модели повторять уже использованные части текста. В Ollama его можно передать в `options` одного запроса и сравнить ответы на одинаковый вопрос. Более высокое значение не гарантирует отсутствия повторов: проверяйте смысл и факты вручную.

Если локальная Ollama в длинном ответе повторяет одни и те же обороты, можно **попробовать** настроить `repeat_penalty` для одного запроса. Это штраф за повторение уже использованных частей текста при выборе продолжения, а не средство исправить неверные факты. Сравните два ответа на одном учебном вопросе и решите, помогло ли это именно вашей модели. [s1](#src-s1) [s2](#src-s2)

**Инструкция по источникам, проверенным 31 октября 2026 года:** код Ollama v0.40.13 и тег `qwen2.5:1.5b` из официальной библиотеки на дату проверки. Нужны Linux, установленная Ollama, терминал, `curl`, место для загрузки модели и достаточная оперативная или видеопамять для запуска. Документированного универсального минимума памяти для этой связки здесь нет. Интернет нужен при установке и загрузке тега; оба учебных запроса идут на адрес своего компьютера `127.0.0.1`. Редакция не запускала модель и не проверяла качество её ответов: ниже шаги, сверенные по документации и коду. [s2](#src-s2) [s6](#src-s6)

## Как сравнить ответы с разным штрафом?

Если Ollama ещё не установлена, откройте [инструкцию по запуску](/zapusk/ollama/). Затем в терминале Linux выполните `ollama pull qwen2.5:1.5b`, дождитесь окончания загрузки и проверьте точный тег в `ollama list`. Успешное скачивание само по себе не доказывает, что памяти хватит на ответ. Тег в библиотеке подвижен: запишите версию сервера и фактический идентификатор скачанной модели для повторения опыта позже. [s6](#src-s6)

Отправьте контрольный запрос: `curl -fsS http://127.0.0.1:11434/api/generate -H 'Content-Type: application/json' -d '{"model":"qwen2.5:1.5b","prompt":"Назови пять разных способов экономить заряд ноутбука. Каждый пункт — одно короткое предложение.","stream":false,"options":{"repeat_penalty":1.0}}'`. Локальный API — адрес Ollama, к которому обращается другая программа; `stream:false` собирает ответ в один JSON-объект, то есть текст с полями `response` и служебными сведениями. Прочитайте поле `response`: есть ли пять пунктов, не повторяют ли они друг друга и не теряют ли смысл. Конкретный текст модели заранее не известен. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3)

Теперь повторите тот же вопрос с другим значением: `curl -fsS http://127.0.0.1:11434/api/generate -H 'Content-Type: application/json' -d '{"model":"qwen2.5:1.5b","prompt":"Назови пять разных способов экономить заряд ноутбука. Каждый пункт — одно короткое предложение.","stream":false,"options":{"repeat_penalty":1.2}}'`. Сохраните оба реальных ответа и подсчитайте повторяющиеся советы и одинаковые обороты. Более высокий штраф в документации означает более сильное подавление повторов, но **не гарантирует** ни пяти различных советов, ни улучшения смысла. Одна пара ответов не доказывает причинный эффект: при повторном сравнении держите неизменными тег, версию, вопрос и остальные настройки и смотрите несколько ответов на каждое значение. [s1](#src-s1) [s2](#src-s2)

## Что именно меняет параметр?

В версии v0.40.13 исходное базовое значение `repeat_penalty` равно `1.0`, однако настройки конкретной модели могут его заменить. Здесь оба запроса явно передают своё значение через `options`, поэтому оно применяется **после** параметров модели и не переписывает её файлы. Исходный код передаёт его в программу выполнения модели. Это описание пути параметра в коде, а не свидетельство, что Modelium воспроизвёл определённый ответ на реальном компьютере. [s3](#src-s3) [s4](#src-s4) [s5](#src-s5)

Штраф работает с недавним фрагментом текста; насколько далеко смотреть назад, задаёт отдельный `repeat_last_n` (в этой версии базовое значение — 64, если модель его не переопределила). Это **не** число слов в ответе и не то же самое, что `num_predict`, ограничивающий длину генерации. Не увеличивайте штраф вслепую: результат может стать неестественным или обрывать полезные повторяющиеся слова. Это риск, который проверяют на собственных примерах, а не гарантированный исход. [s1](#src-s1) [s3](#src-s3)

## Когда лучше оставить прежнюю настройку?

Если ответ вовсе не приходит, сначала проверьте запуск Ollama, наличие тега и достаточность памяти; изменение штрафа не заменит диагностику ошибки запуска. Если ответы различаются даже без этой настройки, [разберите отдельно температуру](/zhurnal/ollama-temperature-api/): разница в одной паре текстов не изолирует влияние `repeat_penalty`. Когда нужен постоянный вариант модели со своими параметрами, [Modelfile](/zhurnal/ollama-modelfile/) — другая операция; этот учебный запрос создаёт лишь два отдельных вызова API. Не используйте непроверенный результат как достоверный совет или доказательство офлайн-режима всей системы. [s1](#src-s1) [s2](#src-s2) [s4](#src-s4)

## Источники

1. [Ollama v0.40.13 — параметр repeat_penalty и окно repeat_last_n](https://github.com/ollama/ollama/blob/04088e7c9d41cba5d33bafbf788d87a465c79d5b/docs/modelfile.mdx#valid-parameters-and-values) — получено 2026-10-31
2. [Ollama v0.40.13 — POST /api/generate и options](https://github.com/ollama/ollama/blob/04088e7c9d41cba5d33bafbf788d87a465c79d5b/docs/api.md#generate-a-completion) — получено 2026-10-31
3. [Ollama v0.40.13 — Options и базовые параметры](https://github.com/ollama/ollama/blob/04088e7c9d41cba5d33bafbf788d87a465c79d5b/api/types.go#L573-L590) — получено 2026-10-31
4. [Ollama v0.40.13 — порядок применения настроек модели и запроса](https://github.com/ollama/ollama/blob/04088e7c9d41cba5d33bafbf788d87a465c79d5b/server/routes.go#L139-L172) — получено 2026-10-31
5. [Ollama v0.40.13 — передача repeat_penalty в runner](https://github.com/ollama/ollama/blob/04088e7c9d41cba5d33bafbf788d87a465c79d5b/llm/llama_server.go#L1702-L1713) — получено 2026-10-31
6. [Официальная библиотека Ollama — qwen2.5:1.5b](https://ollama.com/library/qwen2.5:1.5b) — получено 2026-10-31
