Loot-JSON: исправление сломанного JSON от LLM-моделей | AiManual
AiManual Logo Ai / Manual.
03 Фев 2026 Инструмент

Loot-JSON: когда маленькие LLM ломают JSON, а вы спасаете данные

TS-библиотека для очистки и исправления некорректного JSON от маленьких LLM-моделей. Установка, примеры, сравнение с аналогами.

Проблема, которая сводит с ума

Вы поставили Qwen3-VL-8B на свой ноутбук. Настроили пайплайн извлечения данных из PDF. Попросили модель выдать результат в JSON. А она выдает вам это:

{
  "name": "Иван Петров",
  "age": 35,
  "profession": "Разработчик",
  // Модель решила добавить комментарий
  "skills": ["JavaScript", "TypeScript", "Python"
  // Забыла закрыть массив
}

Или еще лучше:

Конечно, вот данные в JSON:
{
  "title": "Отчет",
  "date": "2026-02-03",
  "content": "Текст с кавычками \"внутри\" и переносами\nстрок"
}
Надеюсь, это поможет!

JSON.parse() сломается. Ваш пайплайн остановится. Вы потратите час на отладку. Знакомо? Именно для этого создали Loot-JSON.

💡
К 2026 году локальные LLM вроде Llama 3.2 3B, Qwen3-1.5B и Mistral-Nemo стали достаточно умными для структурированных задач, но их вывод все еще нуждается в чистке. Особенно в JSON-режиме.

Что такое Loot-JSON на самом деле

Не очередной парсер. Это хирургический инструмент для извлечения JSON из текстового хаоса. Библиотека на TypeScript, которая делает три вещи:

  • Вырезает JSON из окружающего текста (убирает предисловия, комментарии модели)
  • Исправляет синтаксические ошибки (незакрытые скобки, кавычки, запятые)
  • Экранирует спецсимволы внутри строк

Установка проще некуда:

npm install loot-json
# или
bun add loot-json

Как это работает на практике

Допустим, вы используете локальную LLM для парсинга PDF. Модель выдает смесь текста и JSON. Ваш код до Loot-JSON выглядел так:

try {
  const data = JSON.parse(llmResponse);
  // В 40% случаев здесь будет ошибка
} catch (error) {
  // Привет, ручная обработка
}

С Loot-JSON:

import { lootJson } from 'loot-json';

const dirtyResponse = `Пользователь запросил данные. Вот JSON:
{
  \"name\": \"Анна\",
  \"age\": 28
}`;

const cleanJson = lootJson(dirtyResponse);
// {"name":"Анна","age":28}

const data = JSON.parse(cleanJson); // Без ошибок

Что делает библиотека под капотом

Алгоритм проходит четыре стадии:

1 Поиск JSON-фрагмента

Ищет паттерны { и [ в тексте. Определяет границы объекта или массива. Отбрасывает все, что за пределами.

2 Балансировка скобок

Считает открывающие и закрывающие скобки. Если не хватает закрывающих - добавляет. Если лишние - убирает. Простая математика, которая спасает 60% сломанных JSON.

3 Очистка строк

Экранирует кавычки внутри строковых значений. Преобразует одинарные кавычки в двойные (если нужно). Убирает нестандартные символы.

Библиотека не исправляет логические ошибки. Если модель написала "age": "двадцать пять" вместо числа, это останется строкой. Loot-JSON чинит синтаксис, не семантику.

4 Валидация

Пробует пропустить результат через JSON.parse. Если не проходит - повторяет процесс с более агрессивными правилами очистки.

Сравнение с другими способами

МетодПлюсыМинусыКогда использовать
Loot-JSONСпециализированный, легкий (9KB), TypeScript-firstТолько JSON, не исправляет семантикуКогда нужен простой и надежный инструмент для чистки вывода LLM
Ручные regexПолный контрольХрупкие, сложные в поддержке, ломаются на edge casesДля одноразовых скриптов или очень специфичных форматов
LLM-доочисткаМожет исправить семантические ошибкиМедленно, дорого, требует второй вызов моделиКогда критична точность данных, а не скорость
Строгие промптыПредотвращает ошибки на этапе генерацииНе всегда работают с маленькими моделямиВместе с Loot-JSON для максимальной надежности

Если вы уже используете строгие схемы вывода, Loot-JSON станет последней линией защиты. Когда даже грамматика JSON-LM не спасает.

Реальные кейсы из 2026 года

Разработчики медицинского софта используют библиотеку для парсинга врачебных записей. Локальная модель на базе Llama 3.2 3B распознает почерк, но иногда путает структуру JSON. Loot-JSON чинит ответ перед сохранением в базу.

Сервис автоматизации отчетов. Каждый день обрабатывает 5000 PDF через Qwen3-VL-8B. Без очистки JSON пайплайн падал бы 30 раз в день. С Loot-JSON - ни одного падения за месяц.

Версия 2.1.0 (январь 2026) добавила поддержку JSON Lines и частичный парсинг. Теперь можно обрабатывать потоки, где модель выдает несколько JSON-объектов подряд.

Кому это нужно прямо сейчас

  • Разработчикам RAG-систем, которые используют локальные модели для извлечения фактов. Когда нужен чистый JSON для эмбеддингов.
  • Создателям датасетов для LoRA. Когда вы генерируете разметку автоматически и каждая ошибка в JSON портит обучение.
  • Инженерам, которые запускают модели на edge-устройствах. Когда нет доступа к мощным API, а Mistral-Nemo иногда сбоит.
  • Всем, кто устал писать try-catch вокруг JSON.parse после каждого вызова LLM.

Ограничения (чтобы не было сюрпризов)

Библиотека не волшебная. Она не исправит:

  • Логические ошибки (неправильные типы данных)
  • Пропущенные обязательные поля
  • Некорректные значения (даты в странном формате)
  • Вложенные структуры с глубиной больше 100 уровней (зачем вам такое?)

И да, если модель выдала чистый текст без намека на JSON, библиотека вернет null. Это фича, а не баг.

Что делать, если Loot-JSON не справляется

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

Если модель постоянно ошибается в одном месте (например, забывает закрывать массивы), добавьте явное указание в промпт: "Закройте все массивы и объекты".

Для сложных случаев используйте двухэтапную обработку: Loot-JSON для базовой очистки, затем валидация по схеме (например, с Zod).

И последний совет: иногда проще выбрать более подходящую модель. Если вам критически важен стабильный JSON-вывод, посмотрите в сторону специализированных моделей с тренировкой на структурированных данных. Или используйте ISON вместо JSON для экономии токенов и упрощения парсинга.

Loot-JSON - это пластырь. Хороший, качественный, стерильный. Но лечить нужно причину. А причина в том, что маленькие LLM все еще учатся точно следовать форматам. До 2028 года такие инструменты будут нужны каждому, кто работает с локальными моделями. Просто примите это и установите npm install loot-json.