Ollama Python — это официальная библиотека ollama: после установки командой pip install ollama скрипт вызывает локальный сервер функциями chat и generate либо через объект Client с адресом сервера. Библиотека отправляет запрос и возвращает ответ, а таймаут, разбор сбоев и проверку содержимого пишет автор скрипта. Схема годится для внутренних задач, где модель работает на вашем сервере, а результат читает человек или сверяет код.

Клиент и адрес

TL;DR

Для вызова хватает пакета ollama и объекта Client(host=...): адрес сервера, таймаут и заголовки задаются при создании клиента, а текст ответа читается из response.message.content.

Допустим, скрипт раз в сутки берёт переписку с поставщиком по одному заказу и просит модель написать пересказ на пять строк: что согласовано, что ждёт ответа, какие даты названы. Письма скрипт собирает из почтовой копии, модель пересказывает, менеджер по закупкам читает пересказ рядом с оригиналами и решает, что делать дальше. Запись в учётную систему идёт отдельным шагом, и делает её код после подтверждения менеджера.

Функции верхнего уровня, такие как ollama.chat, обращаются к серверу на том же компьютере. Когда Ollama стоит на другой машине, создайте Client(host='http://адрес:11434'): по описанию библиотеки все дополнительные именованные аргументы уходят в httpx.Client, так что таймаут и заголовки настраиваются там же. Для асинхронной очереди есть AsyncClient с теми же параметрами. Маршруты самого сервера разобраны в статье про Ollama API для своих сервисов, а здесь речь о Python-клиенте.

Начинайте скрипт с проверки окружения. Вызов ollama.list() возвращает установленные модели, ollama.ps() показывает загруженные в память. Если нужной модели на сервере нет, запуск прекращается с понятным сообщением, а загрузку делает администратор. Из ответа чата читайте только нужные атрибуты, прежде всего message.content: остальные поля зависят от версий библиотеки и сервера.

Таймаут и прогрев

Первый запрос после паузы идёт дольше остальных, потому что модель сначала загружается в память. В разделе FAQ документации Ollama сказано, что по умолчанию модель остаётся в памяти пять минут и затем выгружается. Параметр запроса keep_alive принимает секунды или строку длительности: значение -1 оставляет модель загруженной, а 0 выгружает сразу. На весь сервер правило задаёт переменная OLLAMA_KEEP_ALIVE, параметр запроса её перекрывает.

Отсюда расчёт таймаута. Холодный запуск и тёплый вызов — две разные величины, и одним числом на оба случая обойтись нельзя. Замерьте их на своём оборудовании по десяти запускам каждого вида и запишите максимумы. Таймаут чтения ставьте выше холодного максимума, а в журнал добавляйте пометку о режиме вызова: так по записи видно, сбой случился на прогреве или на обычной работе.

  • Холодный старт: ночной скрипт прогревает модель пустым вызовом перед основной пачкой либо держит keep_alive дольше паузы между пачками.
  • Размер пачки: сколько писем уходит подряд, пока тот же сервер отвечает коллегам.
  • Очередь сервера: по документации число параллельных запросов на модель по умолчанию равно одному (OLLAMA_NUM_PARALLEL), лишние ждут в очереди (OLLAMA_MAX_QUEUE), поэтому длинная пачка занимает чужое время.
  • Повтор: сколько попыток делает скрипт при таймауте и какая пауза между ними.

Повторять запрос без предела нельзя: зависший вызов, перезапущенный несколькими потоками, только удлиняет очередь. Ограничьте число попыток, а после последней оставьте письмо в очереди с пометкой, чтобы менеджер увидел необработанный заказ. Если нагрузка растёт и на сервере работают несколько команд, сравните варианты в разборе vLLM и Ollama.

Запрос и ответ

Запрос состоит из имени модели, списка сообщений и необязательных параметров. Температуру и прочие настройки передают в options, формат ответа — в format; структурный вывод подробно описан в статье про JSON-ответы Ollama. Для первого прогона удобен короткий порядок действий.

  1. Установите пакет командой pip install ollama в окружение скрипта и создайте Client с адресом сервера.
  2. На старте вызовите list() и сверьте имя модели; при отсутствии остановите запуск.
  3. Отправьте через chat три вымышленных письма поставщика с известными датами и одной суммой.
  4. Проверьте ответ кодом: текст непустой, каждая дата и сумма из пересказа есть во входных письмах, длина укладывается в пять строк.
  5. Сохраните вход, ответ и причину отказа проверки в журнал, исключив реальные персональные данные.

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

Вторая проверка касается формы. Ответ без кириллицы, пустой или длиннее заданного скрипт считает браком и повторяет вызов в пределах лимита. Всё остальное решает менеджер, у которого пересказ лежит рядом с оригиналами.

● Discovery · 1 час · бесплатно

Какую переписку вы хотели бы пересказывать таким скриптом?

Прийти на Discovery →

Ошибки и сбои

Сбои делятся на два класса: ответ сервера с кодом ошибки и обрыв соединения. Для первого README описывает исключение ollama.ResponseError с атрибутами error и status_code; ошибки поднимаются, если запрос вернул код ошибки или сбой обнаружен посреди потока. В документации API тело ошибки имеет вид {"error": "..."}, а среди кодов названы 400, 404, 429, 500 и 502.

СитуацияЧто видит скриптРеакция
Модели нет на сервереResponseError, код 404Остановить пачку и сообщить администратору; загрузку модели выполняет человек
Ошибка в запросе или параметреResponseError, код 400Записать запрос в журнал и исправить код; повтор бесполезен
Лимит или сбой на стороне сервераКоды 429, 500, 502Повторить с паузой в пределах лимита, затем оставить письмо в очереди
Сервер выключен или адрес ошибоченИсключение соединения до получения ответаПроверить службу и адрес, затем ограниченный повтор
Обрыв посреди потокаИсключение при чтении, частичный текстВыбросить частичный ответ целиком и повторить запрос
Пустой или бракованный ответИсключения нетОтклонить проверкой содержимого

Последняя строка важнее остальных. По README исключения поднимаются при коде ошибки и при сбое посреди потока; пустую строку в content библиотека отдаёт как обычный ответ. Поэтому проверка содержимого идёт после каждого успешного вызова, а исключения служат лишь первой линией.

Журнал собирайте так, чтобы по нему были видны тип сбоя, номер попытки, режим вызова (холодный или тёплый) и идентификатор письма. Текст переписки и полный ответ модели кладите в журнал только при отладке на вымышленных данных; в рабочем журнале хватает идентификаторов и причины отказа.

Допуск в работу

Скрипт переводят из тестового режима в рабочий, когда на сохранённом наборе обезличенных переписок видны три вещи: доля пересказов, прошедших проверку с первой попытки, перечень случаев, где менеджер поправил текст, и поведение скрипта при выключенном сервере. Порог доли задаёт владелец процесса до запуска; задним числом цифра подгоняется под результат.

Права скрипта ограничивают отдельно. Учётная запись, под которой он работает, читает почтовые копии и пишет в очередь пересказов, а менять заказы в учётной системе она лишена возможности. Тогда ошибка модели остаётся черновиком. Если скрипту предстоит вырасти до агента с действиями, начните со страницы про ИИ-агентов для бизнеса, а условия локального сервера описаны в статье про Ollama в Docker.

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

// с чего начать

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

Частые вопросы

Как установить Ollama Python?
Командой pip install ollama в окружении скрипта. Сам сервер Ollama устанавливается отдельно: библиотека лишь обращается к нему по адресу, который передан в Client.
Как задать таймаут в Ollama Python?
Дополнительные именованные аргументы Client передаются в httpx.Client, поэтому таймаут задаётся при создании клиента параметрами httpx. Замерьте холодный и тёплый вызовы и поставьте значение выше холодного максимума.
Что делать при ошибке 404 в Ollama Python?
Код 404 говорит, что модели с таким именем на сервере нет. Проверьте имя через ollama.list(), загрузите модель на сервере и повторите запуск. Автоматическую загрузку из рабочего скрипта лучше отключить: набор моделей определяет администратор.
Как получать ответ потоком в Ollama Python?
Передайте stream=True, и функция вернёт итератор частей ответа. Ошибка посреди потока приходит исключением, а часть текста к тому моменту уже получена, поэтому недочитанный ответ в работу брать нельзя.
Чем библиотека отличается от прямых HTTP-запросов?
Библиотека берёт на себя сборку запроса и разбор ответа и поднимает исключение ResponseError. Прямой HTTP-запрос даёт тот же результат, но коды и поток вы обрабатываете сами. Сервис на другом языке работает через HTTP-интерфейс.