Tool calling на локалках: к третьему вызову модель ломает JSON, как вы с этим живёте
Рейтинг: 20.7% · 1 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- svelteandy
- Сообщения: 24
- Зарегистрирован: 16 май 2026, 03:53
Tool calling на локалках: к третьему вызову модель ломает JSON, как вы с этим живёте
Пилю агента на локальной модели. Требование заказчика, контур закрытый, облака запрещены, так что без советов взять клода. Сетап: свежий llama.cpp server, пробовал Qwen3.5-14B, 35B-A4B и Mistral Small 3.2. Инструментов шесть штук: поиск по базе, калькулятор смет, выгрузка карточки клиента и тд.
Первые один-два вызова отрабатывают чисто. А на третьем-четвёртом шаге цепочки начинается цирк: то JSON с комментарием внутри, то кавычки экранированы где не надо, то модель зовёт инструмент, которого не существует, склеив имя из двух настоящих. Включаю grammar через json_schema, валидность становится стопроцентной, но аргументы внутри превращаются в бред. Формально всё ок, по сути мусор.
В облаке такой боли нет вообще. Кто гоняет агентов на локалках, чем стабилизировали?
Первые один-два вызова отрабатывают чисто. А на третьем-четвёртом шаге цепочки начинается цирк: то JSON с комментарием внутри, то кавычки экранированы где не надо, то модель зовёт инструмент, которого не существует, склеив имя из двух настоящих. Включаю grammar через json_schema, валидность становится стопроцентной, но аргументы внутри превращаются в бред. Формально всё ок, по сути мусор.
В облаке такой боли нет вообще. Кто гоняет агентов на локалках, чем стабилизировали?
✔ Лучший ответ сформирован автоматически — coder_vlad
svelteandy писал(а):валидность становится стопроцентной, но аргументы внутри превращаются в бред самое важное наблюдение в твоём посте, и оно известное. грамматика не лечит, она маскирует: модель уже потерялась и хотела выдать мусор, грамматика просто заставила мусор быть валидным джейсоном. лечится сокращением выбора. шесть инструментов для 14B много, мелочь начинает их путать после пары шагов. …
Re: Tool calling на локалках: к третьему вызову модель ломает JSON, как вы с этим живёте
температуру в 0-0.2 на шагах с тулзами, для финального ответа можно вернуть обратно. и проверь шаблон чата: половина проблем с тулзами в llama.cpp это кривой jinja из gguf. запускай с --jinja и смотри, что реально уходит в модель. у меня квен ломал вызовы ровно до момента, когда я подменил шаблон на родной из репы модели
- coder_vlad
- Сообщения: 72
- Зарегистрирован: 11 май 2026, 01:57
Re: Tool calling на локалках: к третьему вызову модель ломает JSON, как вы с этим живёте
✔ Лучший ответ — сформирован автоматически
самое важное наблюдение в твоём посте, и оно известное. грамматика не лечит, она маскирует: модель уже потерялась и хотела выдать мусор, грамматика просто заставила мусор быть валидным джейсоном. лечится сокращением выбора. шесть инструментов для 14B много, мелочь начинает их путать после пары шагов. сделай роутер: первый вызов выбирает ветку из 2-3 инструментов, дальше модель видит только их. у нас после такой перестройки доля битых вызовов упала с 15 процентов до полутораsvelteandy писал(а):валидность становится стопроцентной, но аргументы внутри превращаются в бред
Re: Tool calling на локалках: к третьему вызову модель ломает JSON, как вы с этим живёте
живут, и неплохо. у нас в проде 14B дёргает четыре инструмента, битых вызовов меньше процента. рецепт скучный: few-shot прямо в системном промпте, по два примера на инструмент, включая примеры с типичными ошибками. плюс ретрай, где текст ошибки парсера подставляется обратно в контекст. два ретрая закрывают почти всё. дорого по токенам, зато работает, и никакой 70B не нуженesp32_dev писал(а):на мелких агенты не живут, сколько ни танцуй
Поделиться темой:
✈ Telegram
VK
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость