Ошибки парсера LM Studio нарушают вызов инструментов и логику Qwen3.5.

Проблемы парсера LM Studio, влияющие на модели с рассуждениями
Парсер сервера LM Studio содержит несколько ошибок, которые мешают вызову инструментов и рассуждениям в таких моделях, как Qwen3.5 и DeepSeek-R1. Эти проблемы могут создавать впечатление, что модели сломаны, хотя проблема на самом деле в парсере.
Ошибки
1. Парсер сканирует внутри блоков <think> в поисках паттернов вызова инструментов
Когда модели с рассуждениями размышляют о синтаксисе вызова инструментов внутри своих блоков <think>, парсер LM Studio воспринимает эти упоминания в тексте как реальные попытки вызова. Это создает рекурсивную ловушку: модель рассуждает о вызовах инструментов, парсер находит похожие на вызов токены в размышлениях, разбор завершается ошибкой, ошибка передаётся обратно модели, и цикл повторяется.
Модель буквально не может отладить проблему с вызовом инструментов, потому что описание проблемы воспроизводит её. Одна модель прямо сказала: «Я попадаю в цикл, где мои мысли о синтаксисе вызова инструментов интерпретируются как реальные маркеры вызова» — и само это предложение запустило парсер.
Об этом впервые сообщили в задаче #453 в феврале 2025 года, и она остаётся открытой более года спустя.
Обходное решение: Отключите рассуждения с помощью {%- set enable_thinking = false %}. Это мгновенно исправляет проблему, позволяя успешно выполнить 20+ последовательных вызовов инструментов.
2. Регистрация второго сервера MCP ломает разбор вызовов инструментов для первого
Эта ошибка чистая и детерминированная. Тестирование с lfm2-24b-a2b при temperature=0.0 показывает:
- Активен только сервер KG: Модель правильно вызывает
search_nodes, парсер распознаёт токены<|tool_call_start|>, инструмент выполняется, результаты возвращаются. Работает идеально. - Добавьте сервер webfetch (даже не вызывая его): Модель выводит
<|tool_call_start|>[web_search(...)]<|tool_call_end|>как обычный текст в чате. Специальные токены больше не распознаются. Инструмент никогда не выполняется.
Одна лишь регистрация второго сервера MCP — без его вызова — меняет то, как парсер обрабатывает вызовы инструментов первого сервера. Та же модель, тот же промпт, тот же целевой сервер. Изменилась одна переменная.
Обходное решение: Регистрируйте только тот сервер MCP, который вам нужен для каждой задачи. Это непрактично для агентских рабочих процессов.
3. Разделение reasoning_content/content на стороне сервера приводит к пустым ответам, которые сообщают об успехе
Это затрагивает всех, кто использует модели с рассуждениями через API, независимо от использования вызова инструментов. При отправке простого промпта Qwen3.5-35b-a3b через /v1/chat/completions с просьбой перечислить XML-теги, используемые для рассуждений, сервер вернул:
{
"content": "",
"reasoning_content": "[3099 токенов детальных размышлений]",
"finish_reason": "stop"
}
Модель проделала обширную работу — 3099 токенов рассуждений — но попала в цикл обдумывания внутри <think> и так и не сгенерировала вывод в поле content. Сервер вернул finish_reason: "stop" с пустым content, сообщая об успехе.
Это означает:
- Каждый набор тестов, проверяющий
finish_reason == "stop", молча принимает пустые ответы - Каждая агентская платформа передаёт пустые строки дальше по цепочке
- Каждый пользователь видит пустой ответ и делает вывод, что модель сломана
- Настоящие рассуждения заперты в
reasoning_content— модель проделала реальную работу, которую никто не видит, если явно не проверит это поле
Это проблема на стороне сервера, а не ошибка интерфейса, что подтверждается проверкой сырого ответа API и лога сервера LM Studio. Разделение reasoning_content/content происходит до того, как ответ достигнет любого клиента.
Взаимодействие ошибок
Это не независимые проблемы. Они взаимодействуют, создавая системные проблемы с вызовом инструментов и рассуждениями в LM Studio.
📖 Прочитать полный источник: r/LocalLLaMA
👀 Смотрите также

Пилот: Инструмент для автоматизации браузера, полностью созданный с помощью кода Claude
Не-разработчик использовал Claude Code для создания Pilot — инструмента автоматизации Chrome, который позволяет ИИ управлять браузерами через навигацию по дереву доступности. Инструмент присваивает числа кликабельным элементам, чтобы Claude мог отдавать команды вроде 'click 5' вместо угадывания позиций на экране.

FixAI: Браузерная игра, которая учит потребительскому праву через борьбу с корпоративными ИИ-ботами
FixAI — это браузерная игра с 36 уровнями, в которой игроки спорят с корпоративными или государственными системами ИИ, используя реальные законы о защите прав потребителей. Созданная на Vanilla JS, Node/Express и Claude Haiku, она включает систему оценки сопротивления и образовательные пояснения к юридическим аргументам.

Skir: Современная альтернатива Protocol Buffers для типобезопасного обмена данными
Skir — это декларативный язык для определения типов данных, констант и API, который генерирует идиоматичный, типобезопасный код на TypeScript, Python, Java, C++, Kotlin и Dart из одного файла .skir. Он включает встроенную безопасность эволюции схем, поддержку RPC, аналогичную gRPC, и сериализацию в JSON или бинарные форматы.

Гем Rails-AI-Context предоставляет коду Claude полную модель приложения Rails через MCP.
Гем rails-ai-context автоматически интроспектирует приложения на Rails и предоставляет 39 инструментов через MCP, позволяя Claude Code запрашивать конкретные детали приложения, такие как схема с зашифрованными столбцами, ассоциации моделей, маршруты, подключения Stimulus и сопоставления Turbo, вместо чтения всех файлов целиком.