toolkitbox

~/ / Статьи об ИИ / Локальные LLM на VPS / Вызов локальной модели из кода: структурированный вывод и OpenAI-совместимый API в Ollama

Вызов локальной модели из кода: структурированный вывод и OpenAI-совместимый API в Ollama

Когда Ollama запущена на вашем сервере, вашему коду нужны две вещи: способ получать ответы в фиксированной форме и способ обращаться к серверу из библиотек, которые уже работают с API OpenAI. Ollama описывает и то и другое. В этой статье кратко изложены страница о структурированном выводе и страница о совместимости с OpenAI, а также отмечено, что, по словам документации, не поддерживается.

Опубликовано: · 3 мин чтения · Сверено с официальной документацией Ollama 2026-10-26. Поддерживаемые возможности меняются от версии к версии, поэтому проверяйте их в актуальных документах.

Два способа обратиться к одному и тому же серверу

У Ollama есть собственный API: в примерах документации запросы отправляются методом POST на http://localhost:11434/api/chat. Кроме того, под путём /v1/ доступен OpenAI-совместимый API, чтобы существующие клиенты OpenAI могли работать с Ollama после смены базового URL.

ПараметрNative APIOpenAI-compatible API
Базовый адресhttp://localhost:11434/api/chathttp://localhost:11434/v1/
Ключ APIв примерах не упоминаетсяapi_key='ollama': страница помечает его как обязательный, но игнорируемый
Поле структурированного выводаformatresponse_format

Строка про ключ API взята из примера для локального сервера в документации. Для облака на странице указан base_url https://ollama.com/v1 с ключом API из вашей учётной записи Ollama. Это другой случай.

Структурированный вывод: поле format

Поле format ограничивает ответ. Оно принимает строку json для произвольного JSON либо объект JSON Schema. В примерах cURL из документации тело запроса состоит из четырёх полей: model, messages, stream со значением false и format. Схема в примерах содержит type, properties и required.

Значение formatЭффект согласно документации
"json"Модель отвечает произвольным JSON
объект JSON SchemaОтвет ограничивается этой схемой
  • Документация говорит, что JSON Schema лучше также передавать строкой в промпте, чтобы закрепить ответ модели.
  • Там же советуют снизить temperature, например до 0, чтобы получать более детерминированные результаты.
  • Для Python и JavaScript предлагается описывать схемы с помощью Pydantic или Zod, чтобы их можно было повторно использовать для валидации.
  • Модели с поддержкой изображений принимают тот же параметр format. В примере для таких моделей в документации изображение передаётся вместе со схемой.
  • Согласно странице, облако Ollama в настоящее время не поддерживает структурированный вывод.

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

Проверьте схему, которую вы отправляете

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

Попробовать: JSON Schema Validator

Для поддерживаемых ключевых слов следует JSON Schema Draft 2020-12. Читает $ref только внутри той же схемы.

Всё выполняется в вашем браузере. Схема и данные не загружаются.

Эндпоинты OpenAI-совместимого API

ЭндпоинтЧто перечислено на страницеУказано как неподдерживаемое
/v1/chat/completionsчат, потоковая передача, JSON mode, воспроизводимые результаты, изображения, tools, управление рассуждениемlogprobs, tool_choice, logit_bias, user, n; URL изображений (используйте base64)
/v1/completionsзавершения, потоковая передача, JSON mode, воспроизводимые результатыlogprobs, best_of, echo, logit_bias, user, n
/v1/modelsсписок и получение моделейне указано
/v1/embeddingsввод в виде строки или массива строк, формат кодирования, размерностьмассивы токенов, user
/v1/responsesпотоковая передача, инструменты вызова функций, краткие описания рассужденийзапросы с сохранением состояния: previous_response_id, conversation, truncation
  • Для эндпоинта чата страница относит к поддерживаемым следующие поля запроса: response_format, tools, stream, stream_options, seed, stop, temperature, top_p, max_tokens, frequency_penalty и presence_penalty.
  • Страница указывает, что структурированный вывод работает через OpenAI-совместимый API с помощью response_format.
  • Если ваш код использует поле из столбца неподдерживаемых, измените код, а не рассчитывайте, что сервер его проигнорирует. Документация не уточняет, как обрабатывается каждое неподдерживаемое поле, за исключением речи: там неподдерживаемые значения возвращают ошибку 400.

Инструменты и формат их описаний

И нативный API, и OpenAI-совместимый эндпоинт чата принимают tools. Если вы описываете инструменты в формате OpenAI, Tool Definition Checker на этом сайте проверит имена, описания и схемы параметров на соответствие этому формату до отправки.

Если ответ всё равно не является корректным JSON

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

Попробовать: LLM JSON Repair

Отступ

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

Всё выполняется в вашем браузере. Вставленный текст никуда не загружается.

Замечание о доступе

В локальном примере документации сказано, что ключ API обязателен, но игнорируется. Наше прочтение, а не утверждение из документов: ключ не защищает сервер, поэтому оставьте Ollama на адресе по умолчанию, а если к ней должна обращаться другая машина, поставьте перед ней аутентификацию.

Источники

Читайте дальше