# LM Studio structured output: получить JSON по схеме через локальный API

Источник: https://modelium.tech/zhurnal/lm-studio-structured-output/

LM Studio принимает JSON Schema в поле `response_format` локального `/v1/chat/completions` и возвращает текст JSON в `choices[0].message.content`. На примере короткой заметки можно попросить два поля — день и время, затем проверить их по исходнику. Не всякая модель справляется с заданной структурой, а правильный формат не гарантирует правильных фактов.

Хотите получить из короткой заметки день и время в двух отдельных полях для собственной программы? В LM Studio можно попросить локальную модель вернуть JSON — текст с именованными полями — по заранее заданной схеме. Схема задаёт форму ответа, но не проверяет, правильно ли модель поняла заметку. [s1](#src-s1)

**Уровень: инженерный.** Нужны терминал и понимание локального API — адреса, на который программа отправляет запрос. Эта инструкция сверена с документацией 1 ноября 2026 года, но Modelium **не запускал LM Studio и модель**: ниже показан способ проверки на вашем компьютере, не редакционный результат. Пример рассчитан на Windows x64 с AVX2 и Git Bash для команды `curl`; LM Studio рекомендует 16 ГБ оперативной памяти и 4 ГБ выделенной видеопамяти, но это не подтверждённый минимум выбранной модели. Веса и движок скачиваются заранее; после подготовки локальный сервер и чат, согласно разработчику, могут работать без сети. [s1](#src-s1) [s3](#src-s3) [s6](#src-s6)

## Как подготовить модель и локальный сервер?

Если приложения ещё нет, начните с [установки LM Studio](/zhurnal/lm-studio/). В разделе Discover найдите точный репозиторий `Qwen/Qwen3-8B-GGUF`, выберите `Qwen3-8B-Q4_K_M.gguf` и дождитесь загрузки. Это конкретный **кандидат для проверки**, а не обещание совместимости и скорости на любом ПК: карточка автора указывает формат и лицензию весов Apache-2.0, но редакция не проверяла поиск и запуск этой ревизии в конкретной Windows-сборке. При нехватке ресурсов не подменяйте файл другим без повторной проверки его карточки. [s4](#src-s4) [s5](#src-s5)

Откройте вкладку **Developer** и включите локальный сервер LM Studio на `127.0.0.1:1234`. Если приложение предлагает загрузить модель в память, выберите скачанный файл. Адрес `127.0.0.1` означает доступ с этого компьютера; **не** включайте сетевой доступ и CORS ради примера. В Git Bash выполните `curl -fsS http://127.0.0.1:1234/v1/models`. В ответе найдите `data` и точное значение `id` нужной модели; при загрузке по требованию в списке могут быть и модели, ещё не находящиеся в памяти. Если сервер недоступен, проверьте, действительно ли он запущен, и его порт в Developer. [s1](#src-s1) [s2](#src-s2) [s7](#src-s7)

## Как отправить заметку и получить два поля?

Скопируйте следующую команду **после замены только **`**MODEL_ID**` на точное значение `id` из предыдущего ответа. Учебный вход написан редакцией: «Встреча в пятницу в 10:30». Команда отправляет заметку серверу на том же компьютере; в `response_format` указано, что JSON должен содержать строки `day` и `time`, без лишних полей. Пометка `/no_think` описана в карточке Qwen3 для краткого режима; она не является общим параметром LM Studio для всех моделей. [s1](#src-s1) [s2](#src-s2) [s5](#src-s5)

`curl -fsS http://127.0.0.1:1234/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"MODEL_ID","messages":[{"role":"user","content":"Из заметки: Встреча в пятницу в 10:30. Верни день и время без дополнительных сведений. /no_think"}],"response_format":{"type":"json_schema","json_schema":{"name":"meeting","schema":{"type":"object","properties":{"day":{"type":"string"},"time":{"type":"string"}},"required":["day","time"],"additionalProperties":false}}},"stream":false}'`

Сервер возвращает ответ со строкой в `choices[0].message.content`. Именно эту строку ваша программа должна разобрать как JSON. В ней проверьте `day` и `time` по исходной заметке: «пятница», «10:30». Если появилась выдуманная дата или лишние поля, результат не подходит. Мы не приводим вымышленный ответ модели. Схема проверяет наличие и тип полей, а не истинность содержимого; для ответственного процесса сверяйте значения с исходником даже при успешно разобранном JSON. [s1](#src-s1)

## Что делать при ошибке или неверном результате?

Если вместо ответа пришёл `model not found`, снова получите список `/v1/models` и проверьте **точный** `id`, а не имя файла на глаз. Если модель не помещается в память, разберите ошибку загрузки по [отдельному гайду](/zhurnal/lm-studio-ne-zagruzhaetsya-model/); размер GGUF не равен требуемой оперативной памяти. Если JSON не появился или его поля бессмысленны, проверьте `response_format`, наличие поддерживаемого chat GGUF и ответ с короткой заметкой: LM Studio предупреждает, что не каждая модель уверенно выдаёт structured output, особенно маленькие. На другой версии приложения или модели поведение может отличаться. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3)

После проверки своего примера можете [сравнить JSON Schema в других локальных серверах](/zhurnal/structured-output-lokalno-json-schema/). Условия лицензии конкретной модели читайте на её карточке: лицензия весов Qwen3-8B-GGUF не является утверждением о правах на код LM Studio. [s5](#src-s5)

## Источники

1. [LM Studio — Structured Output через локальный API](https://lmstudio.ai/docs/developer/openai-compat/structured-output) — получено 2026-11-01
2. [LM Studio — List Models](https://lmstudio.ai/docs/developer/openai-compat/models) — получено 2026-11-01
3. [LM Studio — System Requirements](https://lmstudio.ai/docs/app/system-requirements) — получено 2026-11-01
4. [LM Studio — Download an LLM](https://lmstudio.ai/docs/app/basics/download-model) — получено 2026-11-01
5. [Qwen/Qwen3-8B-GGUF — карточка и файл Q4_K_M на закреплённой ревизии](https://huggingface.co/Qwen/Qwen3-8B-GGUF/tree/7c41481f57cb95916b40956ab2f0b139b296d974) — получено 2026-11-01
6. [LM Studio — Offline Operation](https://lmstudio.ai/docs/app/offline) — получено 2026-11-01
7. [LM Studio — lms server start и ограничение адреса](https://lmstudio.ai/docs/cli/serve/server-start) — получено 2026-11-01
