~/ / Статьи об ИИ / Локальные 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 API | OpenAI-compatible API |
|---|---|---|
| Базовый адрес | http://localhost:11434/api/chat | http://localhost:11434/v1/ |
| Ключ API | в примерах не упоминается | api_key='ollama': страница помечает его как обязательный, но игнорируемый |
| Поле структурированного вывода | format | response_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 на адресе по умолчанию, а если к ней должна обращаться другая машина, поставьте перед ней аутентификацию.
Источники
Читайте дальше
- Open WebUI на VPS: запуск в Docker и подключение к OllamaЗапуск Open WebUI в Docker и подключение к Ollama на собственном сервере: команды, первая учётная запись, два типа подключения и обновление.
- Что умеет локальная модель? tools, thinking, vision и embedding в Ollama и что поместится на VPStools, thinking, vision, embedding: что означают метки в библиотеке Ollama, у каких моделей они есть и насколько велики загрузки.
- Установка Ollama на VPS и поддержание её работы: установка, служба systemd, настройки и обновленияУстановка Ollama на Linux VPS и поддержание её работы: команда установки, служба systemd, переменные окружения, хранилище моделей и обновления по официальной документации.
- Сколько памяти нужно локальной LLM на VPS? Файл модели плюс KV-кэшФайл модели плюс KV-кэш: что библиотека Ollama, FAQ Ollama и официальные конфигурации моделей говорят о памяти, которая нужна локальной LLM на VPS.