Чистый JSON из локальных моделей Ollama: паттерн якорных тегов на Python
Чистый JSON из локальных моделей Ollama: паттерн якорных тегов на Python Автор разбора описывает типичную проблему при работе с небольшими локальными моделями через Ollama: даже если попросить модель вернуть чистый JSON, llama3:8b, mistral:7b или phi3 часто добавляют markdown-разметку, вежливые вступления вроде «Вот извлечённая информация» или обрывают ответ. При прямой передаче такого текста в.loads() приложение падает с ошибкой декодирования. Обычные обходные пути — регулярные выражения или замена подстрок вроде удаления — автор считает хрупкими: они ломаются на вложенных блоках кода и экранированных кавычках. Причина, по его словам, в том, что открытые модели дообучались на чатовых датасетах и markdown-документации, поэтому привыкают оформлять ответы «по-человечески». Вместо запретов («не используй markdown») автор предлагает паттерн Anchor Tag Framing: в системном промпте модель инструктируют выводить JSON строго внутри уникальных тегов вида <payload>…</payload>, без вступлений и завершающих фраз. Так формируется детерминированная структурная граница, которую легко найти в ответе. Дальше идёт лёгкий парсер на Python без внешних зависимостей: сначала регулярное выражение ищет содержимое внутри тегов; если тегов нет — срабатывает запасной вариант, берущий текст от первой открывающей до последней закрывающей фигурной или квадратной скобки; если и этого нет, функция выбрасывает ошибку. Найденная строка передаётся в.loads(). Автор приводит полный рабочий скрипт: запрос к модели llama3 через ollama.chat с системной инструкцией и задачей извлечь из текста имя, роль и навыки, затем разбор ответа парсером. На примере строки про «Alice Smith, Senior DevOps Engineer» скрипт печатает структурированный JSON. Это учебная демонстрация паттерна, а не отчёт о внедрении в продакшен. Объясняя, почему приём работает, автор выделяет три механизма: модели сильнее фокусируются на токенах с явными граничными разделителями, перенос вывода в теги снижает активацию «разговорных» завершений, усвоенных при дообучении, а извлечение по фиксированным границам исключает ложные срабатывания на кавычках и markdown внутри самих данных. Оценок качества или измеренного эффекта в материале нет: это разбор техники с демонстрационным кодом. В конце автор упоминает свой платный набор промптов на Gumroad — к сути метода он отношения не имеет. Источник: https://dev.to/nearshi/clean-json-extraction-with-ollama-and-python-3202