Zloibit, pimp my LLM
Запостил на Boosty небольшой тизер публикации на Хабр про увеличение контекста у модели ruGPT3XL с 2k до 8k токенов, моделька уже лежит на HF вот тут:
https://huggingface.co/evilfreelancer/ruGPT3XL-8k
Запостил на Boosty небольшой тизер публикации на Хабр про увеличение контекста у модели ruGPT3XL с 2k до 8k токенов, моделька уже лежит на HF вот тут:
https://huggingface.co/evilfreelancer/ruGPT3XL-8k
🔥11❤5🤝4
Вечерняя мудрость:
Использование термина агентский вместо агентный в контексте ИИ агентов - маркер дилетанта
🤡16💯10😁3
Pavel Zloi
Встречайте мой новый пост "Реставрация ruGPT-3 XL или как я вернул к жизни забытую русскую языковую модель" на Хабр, в нём я подробно рассказал о том как была реализована конвертация, как проводилось её тестирование, как запустить локально, как конвертировать…
Опубликовал пост "ruGPT3XL идёт в качалку / поднимаем контекст до 8k" на Хабр, в нём рассказал что было исправлено и добавлено по фидбэку после прошлого поста, а так же про то как я поднял максимальный контекст у модели с 2k до 8k токенов.
Веса конвертированной модели тут:
https://huggingface.co/evilfreelancer/ruGPT3XL-8k
Веса конвертированной модели тут:
https://huggingface.co/evilfreelancer/ruGPT3XL-8k
Хабр
ruGPT3XL идёт в качалку / поднимаем контекст до 8k
Это продолжение предыдущей публикации про реставрацию ruGPT3XL. Для тех кто не читал, кратенько, я конвертировал древний Megatron-LM чекпоинт в HuggingFace-формат, залил веса на HF, накатил поддержку...
❤8🔥6🥱2👍1🫡1
Когда поднимут цены на ИИ
Недавно мне пришлось оказаться на одной лекции, имен называть не буду, но общий настрой выступления можно описать так - человеку показали Claude Code, после чего он искренне поверил, что теперь "бизнесом можно управлять через ИИ", а "инженеры больше не нужны".
Что особенно показательно, речь шла не о случайном слушателе хайповой волны с FOMO, это был представитель высшего руководства своей компании, и при этом с техническим бэкграундом. И именно поэтому наблюдать за происходящим было особенно интересно. Когда подобные тезисы озвучивает начинающий специалист, это можно списать на недостаток опыта. Когда так рассуждает руководитель, это уже выглядит как симптом более широкой тенденции.
В ходе выступления демонстрировались разные примеры "внедрения ИИ". Один из них - внутренняя база знаний, собранная из большого массива текстовых файлов со спецификациями, часть которых оформлена в виде skills и хранится в Obsidian. Дальше схема выглядела примерно так: в папку inbox складываются почта, документы, заметки и прочие материалы, затем по расписанию запускается Claude Code, который обрабатывает весь этот массив, "каким-то" образом масштабирует базу, "как-то" векторизует данные, проставляет связи, строит граф и в итоге формирует систему, которая "в целом работает" и "что-то" делает.
Само по себе это не выглядит чем-то невозможным. Но проблема в другом - в подобных историях очень часто отсутствует понимание, что именно происходит внутри такого пайплайна, где в нём реальная ценность, какие части действительно требуют LLM, а какие можно было бы решить более простыми и дешёвыми средствами.
Именно здесь возникает более интересный вопрос - не технологический, а экономический.
Чем больше компаний будут переводить процессы на подобные решения без глубокого понимания их устройства, тем выше вероятность, что крупные игроки рынка начнут увереннее пересматривать ценовую политику. Если бизнес уже встроил ИИ в ключевые процессы, если управленческий слой привык к такой модели работы, а часть прежней инженерной экспертизы уже сокращена или вытеснена, то пространство для манёвра резко уменьшается. В такой ситуации повышение цены воспринимается не как повод отказаться от инструмента, а как вынужденная операционная издержка.
Именно поэтому мне кажется вполне вероятным, что по мере роста зависимости бизнеса от LLM-сервисов стоимость таких решений будет увеличиваться. Не потому, что это обязательно выгодно всем участникам рынка прямо сейчас, а потому что у поставщиков появится всё больше оснований считать спрос менее чувствительным к цене. Проще говоря, чем сильнее компания встроила ИИ в ежедневные процессы, тем сложнее ей будет отказаться от него даже при заметном росте расходов.
В этом смысле главный риск сегодня не в самом факте использования ИИ, а в модели внедрения, при которой инструмент становится критически важным раньше, чем появляется понимание его ограничений, архитектуры и реальной стоимости владения. А там, где возникает такая зависимость, почти всегда рано или поздно возникает и вопрос повышения цены.
Недавно мне пришлось оказаться на одной лекции, имен называть не буду, но общий настрой выступления можно описать так - человеку показали Claude Code, после чего он искренне поверил, что теперь "бизнесом можно управлять через ИИ", а "инженеры больше не нужны".
Что особенно показательно, речь шла не о случайном слушателе хайповой волны с FOMO, это был представитель высшего руководства своей компании, и при этом с техническим бэкграундом. И именно поэтому наблюдать за происходящим было особенно интересно. Когда подобные тезисы озвучивает начинающий специалист, это можно списать на недостаток опыта. Когда так рассуждает руководитель, это уже выглядит как симптом более широкой тенденции.
В ходе выступления демонстрировались разные примеры "внедрения ИИ". Один из них - внутренняя база знаний, собранная из большого массива текстовых файлов со спецификациями, часть которых оформлена в виде skills и хранится в Obsidian. Дальше схема выглядела примерно так: в папку inbox складываются почта, документы, заметки и прочие материалы, затем по расписанию запускается Claude Code, который обрабатывает весь этот массив, "каким-то" образом масштабирует базу, "как-то" векторизует данные, проставляет связи, строит граф и в итоге формирует систему, которая "в целом работает" и "что-то" делает.
Само по себе это не выглядит чем-то невозможным. Но проблема в другом - в подобных историях очень часто отсутствует понимание, что именно происходит внутри такого пайплайна, где в нём реальная ценность, какие части действительно требуют LLM, а какие можно было бы решить более простыми и дешёвыми средствами.
Именно здесь возникает более интересный вопрос - не технологический, а экономический.
Чем больше компаний будут переводить процессы на подобные решения без глубокого понимания их устройства, тем выше вероятность, что крупные игроки рынка начнут увереннее пересматривать ценовую политику. Если бизнес уже встроил ИИ в ключевые процессы, если управленческий слой привык к такой модели работы, а часть прежней инженерной экспертизы уже сокращена или вытеснена, то пространство для манёвра резко уменьшается. В такой ситуации повышение цены воспринимается не как повод отказаться от инструмента, а как вынужденная операционная издержка.
Именно поэтому мне кажется вполне вероятным, что по мере роста зависимости бизнеса от LLM-сервисов стоимость таких решений будет увеличиваться. Не потому, что это обязательно выгодно всем участникам рынка прямо сейчас, а потому что у поставщиков появится всё больше оснований считать спрос менее чувствительным к цене. Проще говоря, чем сильнее компания встроила ИИ в ежедневные процессы, тем сложнее ей будет отказаться от него даже при заметном росте расходов.
В этом смысле главный риск сегодня не в самом факте использования ИИ, а в модели внедрения, при которой инструмент становится критически важным раньше, чем появляется понимание его ограничений, архитектуры и реальной стоимости владения. А там, где возникает такая зависимость, почти всегда рано или поздно возникает и вопрос повышения цены.
3💯34👍19🔥12👎1
Вайбкодерская мудрость:
Если кодовый агент не может справиться с кодом - значит надо взять модель поумнее.
1😁46👍5
Хабр
Цифровой сотрудник на OpenClaw: нанять, обучить и не потерять
Привет! Я Сабина, владелец продукта из Центра экспертизы ИИ, ВкусВилл. В конце 2025 года мы писали про экспериментальный MCP сервер для выбора товаров. Очень признательны за вашу обратную связь, будем...
Сегодня вышел пост "Цифровой сотрудник на OpenClaw: нанять, обучить и не потерять" на Хабр, в котором говорится о том, как во ВкусВилле запустили бота сотрудника на базе OpenClaw на модельке Kimi, это очень любопытная тема, я после их успеха с MCP-сервером для поиска товаров крайне внимательно наблюдаю за новостями от них.
Вначале поста мне понравилась оговорка "А пока мы готовимся к покупателям-агентам, расскажем, как агенты становятся нашими коллегами." - в интересном направлении идут, и ИМХО уж если где и есть люди обладающие волей продвинуть агентную коммерцию в нашей стране (привет Александру Абрамову @dealerAI и его команде), так это только ВкусВилл.
Вначале поста мне понравилась оговорка "А пока мы готовимся к покупателям-агентам, расскажем, как агенты становятся нашими коллегами." - в интересном направлении идут, и ИМХО уж если где и есть люди обладающие волей продвинуть агентную коммерцию в нашей стране (привет Александру Абрамову @dealerAI и его команде), так это только ВкусВилл.
👍16🤮4🤡3🔥2🤣2❤1
Тестирование GigaChat 3.1 10B на агентных бенчмарках
Обычно я не пишу про новые модели, тем более отечественные, но совсем недавно состоялся релиз моделей семейства GigaChat 3.1 от команды Сбера.
В линейке вышли две модели, на 702B и 10B параметров, обе построены как MoE и обе, судя по позиционированию, должны хорошо работать с русским языком, но моя специализация больше про агенты, поэтому я рассматриваю модели прежде всего как основа для агентов. Поскольку у меня нет ресурсов для запуска версии на 702B, выбор пал на 10B, так как после апгрейда моей RTX 4090 до 48 Гб памяти такой вариант вполне можно погонять локально.
Про предыдущую ноябрьскую модель мне писать не хотелось, потому что для агентных сценариев она была практически бесполезна, максимум наивный tool calling на несколько тулов. При этом в анонсе 3.1 отдельно делался акцент на том, что она поддерживает function calling, поэтому ожидание было простое - модель должна заметно лучше работать в таких задачах.
С учётом прошлого опыта, когда промпт для тройки ещё пару недель доводили после релиза, я решил не спешить и отложил тесты, однако, пару дней назад появилась новость о том, что в vLLM была добавлена поддержка гигачатовского шаблона tool calling, и вроде как теперь тулами точно можно пользоваться.
Для оценки я использовал три хорошо знакомых мне бенчмарка, которые довольно быстро показывают, способна модель решать агентные задачи или нет:
- SWE - https://github.com/swe-bench/SWE-bench
- TAU - https://github.com/sierra-research/tau-bench
- BFCL - https://github.com/ShishirPatil/gorilla/tree/main/berkeley-function-call-leaderboard
На SWE модель показала 0%. Пришлось прям заморочится чтобы запустить тестирование модели на этом бенчмарке, а потом ещё и тюнить chat template пошел, потому что модель не хотела стабильно генерировать валидный diff patch, но даже это ситуацию не исправило, хотя с новым шаблоном промежуточные результаты стали чуть стабильнее.
На TAU результат тоже 0%. Модель уходит в бесконечные последовательности вызовов тулов и не может корректно определить, достаточно ли ей уже данных для завершения задачи или нет.
Единственным бенчмарком, который показал подозрительно (так как на остальных агентных бенчах результаты нулевые) высокие результаты, оказался BFCL. На нём модель набрала 89.5% на Simple Python, 91% на Multiple, а на остальных тестах результаты были уже скромнее - в районе 61%. Заодно этот бенч показал, что параллельные вызовы модель не поддерживает (но это возможно через правки промта можно поправить).
Результаты тестов, детали запуска и отладочные данные собраны здесь:
https://github.com/EvilFreelancer/gigachat-benchmarking
Чуда, к сожалению, не произошло. Складывается впечатление, что развитие больших языковых моделей пока не до конца синхронизировано с тем направлением, в котором сейчас движется объективная действительность, так как для практических agentic-сценариев одной только более-менее рабочей поддержки function calling уже недостаточно. Если модель не держит agentic loop, её прикладная ценность в таких задачах остаётся очень ограниченной.
При этом прогресс всё же есть. Если смотреть на дистанции в несколько лет, путь от ruGPT2 до почти стабильно работающего function calling - это заметный прогресс. Но по текущим меркам этого всё ещё мало.
Мой итоговый вывод довольно простой:
На мой взгляд, для среднего класса агентных задач куда интереснее выглядел бы формат MoE в диапазоне 100-150B в битности MXFP4, при этом и нижнюю границу компактной модели, как мне кажется, нет большого смысла опускать ниже 13B (как-то посчитать какой размер оптимальнее всего для 24Гб VRAM с контекстом 30-60k токенов), да и плюс размер эксперта в 1.8B маловато, к чему высокая скорость если модель не держит контекст и уходит в циклы.
Для себя выводы я сделал, подожду GigaChat 4, по моим ощущениям, она должна выйти осенью на AI Journey. Возможно, у новой модели ситуация изменится. Хотя вполне вероятно, что к тому моменту рынок снова успеет уйти вперёд.
Обычно я не пишу про новые модели, тем более отечественные, но совсем недавно состоялся релиз моделей семейства GigaChat 3.1 от команды Сбера.
В линейке вышли две модели, на 702B и 10B параметров, обе построены как MoE и обе, судя по позиционированию, должны хорошо работать с русским языком, но моя специализация больше про агенты, поэтому я рассматриваю модели прежде всего как основа для агентов. Поскольку у меня нет ресурсов для запуска версии на 702B, выбор пал на 10B, так как после апгрейда моей RTX 4090 до 48 Гб памяти такой вариант вполне можно погонять локально.
Про предыдущую ноябрьскую модель мне писать не хотелось, потому что для агентных сценариев она была практически бесполезна, максимум наивный tool calling на несколько тулов. При этом в анонсе 3.1 отдельно делался акцент на том, что она поддерживает function calling, поэтому ожидание было простое - модель должна заметно лучше работать в таких задачах.
С учётом прошлого опыта, когда промпт для тройки ещё пару недель доводили после релиза, я решил не спешить и отложил тесты, однако, пару дней назад появилась новость о том, что в vLLM была добавлена поддержка гигачатовского шаблона tool calling, и вроде как теперь тулами точно можно пользоваться.
Для оценки я использовал три хорошо знакомых мне бенчмарка, которые довольно быстро показывают, способна модель решать агентные задачи или нет:
- SWE - https://github.com/swe-bench/SWE-bench
- TAU - https://github.com/sierra-research/tau-bench
- BFCL - https://github.com/ShishirPatil/gorilla/tree/main/berkeley-function-call-leaderboard
На SWE модель показала 0%. Пришлось прям заморочится чтобы запустить тестирование модели на этом бенчмарке, а потом ещё и тюнить chat template пошел, потому что модель не хотела стабильно генерировать валидный diff patch, но даже это ситуацию не исправило, хотя с новым шаблоном промежуточные результаты стали чуть стабильнее.
На TAU результат тоже 0%. Модель уходит в бесконечные последовательности вызовов тулов и не может корректно определить, достаточно ли ей уже данных для завершения задачи или нет.
Единственным бенчмарком, который показал подозрительно (так как на остальных агентных бенчах результаты нулевые) высокие результаты, оказался BFCL. На нём модель набрала 89.5% на Simple Python, 91% на Multiple, а на остальных тестах результаты были уже скромнее - в районе 61%. Заодно этот бенч показал, что параллельные вызовы модель не поддерживает (но это возможно через правки промта можно поправить).
Результаты тестов, детали запуска и отладочные данные собраны здесь:
https://github.com/EvilFreelancer/gigachat-benchmarking
Чуда, к сожалению, не произошло. Складывается впечатление, что развитие больших языковых моделей пока не до конца синхронизировано с тем направлением, в котором сейчас движется объективная действительность, так как для практических agentic-сценариев одной только более-менее рабочей поддержки function calling уже недостаточно. Если модель не держит agentic loop, её прикладная ценность в таких задачах остаётся очень ограниченной.
При этом прогресс всё же есть. Если смотреть на дистанции в несколько лет, путь от ruGPT2 до почти стабильно работающего function calling - это заметный прогресс. Но по текущим меркам этого всё ещё мало.
Мой итоговый вывод довольно простой:
Использовать маленькую модель на 10B незачем, а большую на 702B - не на чем.
На мой взгляд, для среднего класса агентных задач куда интереснее выглядел бы формат MoE в диапазоне 100-150B в битности MXFP4, при этом и нижнюю границу компактной модели, как мне кажется, нет большого смысла опускать ниже 13B (как-то посчитать какой размер оптимальнее всего для 24Гб VRAM с контекстом 30-60k токенов), да и плюс размер эксперта в 1.8B маловато, к чему высокая скорость если модель не держит контекст и уходит в циклы.
Для себя выводы я сделал, подожду GigaChat 4, по моим ощущениям, она должна выйти осенью на AI Journey. Возможно, у новой модели ситуация изменится. Хотя вполне вероятно, что к тому моменту рынок снова успеет уйти вперёд.
5🔥22👍13🤷♂6🍓2🫡2
Агентная ruGPT3XL-8k
Задали мне на Хабр вопрос про доработку Unsloth Studio чтобы можно было модельку ruGPT3XL-8k дообучить.
Ранее я не пользовался данным UI и понятия не имел, сможет ли он потянуть такую задачу, полез разбираться и оказалось, никаких правок вносить вообще не нужно, Unsloth Studio спокойно подхватил и ruGPT3XL-8k, и датасет в формате SharedGPT.
Типа такого:
Обучать я решил не абы как, а с прикладной целью, после опытов над ai-sage/GigaChat3.1-10B-A1.8B собрал свой SFT-микс, чтобы попробовать затюнить dense 1.3B модель под agentic-loop сценарии, где важны не просто ответы "вообще", а умение держать ход рассуждений, пользоваться инструментами и не разваливаться на многошаговых задачах.
По настройкам решил не изобретать велосипед и пошёл в достаточно консервативный QLoRA-сетап. Обучение крутится в 4-bit, с LoRA rank 16 и alpha 16, max_seq_length выставил в 8196, batch size 1 при gradient accumulation 8, так что эффективный батч получается 16. Learning rate - 2e-4 с cosine scheduler, warmup на 100 шагов, оптимизатор adamw_8bit, плюс gradient checkpointing от Unsloth.
Обучение провожу на 1x RTX 4090 пропатченной до 48Гб в сервисном центре Vik-On.
По датасетам тоже решил не мудрствовать лукаво, собрал винегрет английских и русских семплов, всего 150k записей.
Английская часть (82.5k) это тулколлинг, reasoning и agentic use cases из
- Mustafaege/qwen3.5-toolcalling-v2
- interstellarninja/hermes_reasoning_tool_use
- Featherlabs/featherlabs_agentic_v1
- arcee-ai/reasoning-sharegpt
По чуть-чуть из каждого датасета, с упором на agentic-loop.
Русская часть (67.5k) это
- belyakoff/xlam-ru-tool-calling
- HelioAI/Helio1-Reasoning-50K-RU
- ZeroAgency/ru-thinking-reasoning-r1-v2
- ZeroAgency/ru-big-russian-dataset
Но отфильтрованные по reasoning.
Кстати, хочу передать привет Александру @ak_segfault из ZeroAgency @zeroagency, спасибо за датасеты!
Через пару дней уже расскажу, что получилось по качеству после тюна, студия пишет что ETA примерно 40 часов с учётом прогонки eval.
Задали мне на Хабр вопрос про доработку Unsloth Studio чтобы можно было модельку ruGPT3XL-8k дообучить.
Ранее я не пользовался данным UI и понятия не имел, сможет ли он потянуть такую задачу, полез разбираться и оказалось, никаких правок вносить вообще не нужно, Unsloth Studio спокойно подхватил и ruGPT3XL-8k, и датасет в формате SharedGPT.
Типа такого:
{
"conversations": [
{"role": "system", "content": "..."},
{"role": "user", "content": "..."},
{"role": "assistant", "content": "..."},
{"role": "tool", "content": "..."},
{"role": "assistant", "content": "..."}
]
}Обучать я решил не абы как, а с прикладной целью, после опытов над ai-sage/GigaChat3.1-10B-A1.8B собрал свой SFT-микс, чтобы попробовать затюнить dense 1.3B модель под agentic-loop сценарии, где важны не просто ответы "вообще", а умение держать ход рассуждений, пользоваться инструментами и не разваливаться на многошаговых задачах.
По настройкам решил не изобретать велосипед и пошёл в достаточно консервативный QLoRA-сетап. Обучение крутится в 4-bit, с LoRA rank 16 и alpha 16, max_seq_length выставил в 8196, batch size 1 при gradient accumulation 8, так что эффективный батч получается 16. Learning rate - 2e-4 с cosine scheduler, warmup на 100 шагов, оптимизатор adamw_8bit, плюс gradient checkpointing от Unsloth.
Обучение провожу на 1x RTX 4090 пропатченной до 48Гб в сервисном центре Vik-On.
По датасетам тоже решил не мудрствовать лукаво, собрал винегрет английских и русских семплов, всего 150k записей.
Английская часть (82.5k) это тулколлинг, reasoning и agentic use cases из
- Mustafaege/qwen3.5-toolcalling-v2
- interstellarninja/hermes_reasoning_tool_use
- Featherlabs/featherlabs_agentic_v1
- arcee-ai/reasoning-sharegpt
По чуть-чуть из каждого датасета, с упором на agentic-loop.
Русская часть (67.5k) это
- belyakoff/xlam-ru-tool-calling
- HelioAI/Helio1-Reasoning-50K-RU
- ZeroAgency/ru-thinking-reasoning-r1-v2
- ZeroAgency/ru-big-russian-dataset
Но отфильтрованные по reasoning.
Кстати, хочу передать привет Александру @ak_segfault из ZeroAgency @zeroagency, спасибо за датасеты!
Через пару дней уже расскажу, что получилось по качеству после тюна, студия пишет что ETA примерно 40 часов с учётом прогонки eval.
👍19❤7🫡4🤯2🔥1
Pavel Zloi
Агентная ruGPT3XL-8k Задали мне на Хабр вопрос про доработку Unsloth Studio чтобы можно было модельку ruGPT3XL-8k дообучить. Ранее я не пользовался данным UI и понятия не имел, сможет ли он потянуть такую задачу, полез разбираться и оказалось, никаких правок…
RTX 4090 после модификации до 48гб у меня стала турбиной и под нагрузкой гудит аки самолёт на взлёте, поэтому решил перенести схему на gpu03, а там у меня 4x 5060ti.
Из недостатков, обучение запустить пришлось через torchrun, а unsloth studio как я понял так не умеет, поэтому красивых картинок не будет, только брутальные циферки в консоли.
Из занятных побочных эффектов, тесты показали, что код sparse attention ruGPT3XL-8k в классе модели неоптимален по памяти в режиме DDP и его можно улучшить, плюс 4x RTX 5060ti (16Гб каждая) показывают скорость на 80% выше чем одна RTX 4090 (48Гб), так что не 40 часов а 20-25.
Но самое интересное, квартет 5060ti почти не греется, их не слышно даже.
Из недостатков, обучение запустить пришлось через torchrun, а unsloth studio как я понял так не умеет, поэтому красивых картинок не будет, только брутальные циферки в консоли.
Из занятных побочных эффектов, тесты показали, что код sparse attention ruGPT3XL-8k в классе модели неоптимален по памяти в режиме DDP и его можно улучшить, плюс 4x RTX 5060ti (16Гб каждая) показывают скорость на 80% выше чем одна RTX 4090 (48Гб), так что не 40 часов а 20-25.
Но самое интересное, квартет 5060ti почти не греется, их не слышно даже.
1❤17👍12🔥6
Пока идёт обучение модельки ruGPT3XL 8k прикладываю скрипты тренировки внутри контейнера unsloth studio:
https://github.com/EvilFreelancer/rugpt3xl-train
На данный момент обучение идёт на 4x 5060ti в режиме "Multi-GPU pipeline", этот режим предполагает что веса одной модели "размазаны" по всем видеокартам и каждая из них поочерёдно выполняет часть работы, поэтому так долго.
Первая эпоха пройдена почти наполовину, train_loss похоже добрался до плато и шумит, а вот eval_loss мне пока не нравится, первый был сильно ниже чем второй, как бы оверфит не случился.
https://github.com/EvilFreelancer/rugpt3xl-train
На данный момент обучение идёт на 4x 5060ti в режиме "Multi-GPU pipeline", этот режим предполагает что веса одной модели "размазаны" по всем видеокартам и каждая из них поочерёдно выполняет часть работы, поэтому так долго.
Первая эпоха пройдена почти наполовину, train_loss похоже добрался до плато и шумит, а вот eval_loss мне пока не нравится, первый был сильно ниже чем второй, как бы оверфит не случился.
🔥11👍4
Как работает tool calling в vLLM
Валерий @neuraldeep и Александр @countwithsasha подняли тему (тыц и тыц) о том, как tool calling работает на стороне inference-движка, давайте разберём это на примере vLLM - одного из топовых движков для реализации tool calling паттерна, но к слову сказать аналогичным образом это устроено и в других движках.
Кратенько, нет единого формата tool calling, каждое семейство моделей придумало свой уникальный синтаксис. Hermes оборачивает вызовы в XML-теги <tool_call>, Mistral использует [TOOL_CALLS] с JSON-массивом внутри, Llama генерирует JSON внутри специальных тегов <|python_tag|>, DeepSeek пишет вызовы в тройных кавычках, и inference-движок должен это все уметь парсить.
Как tools попадают в промпт
Всё начинается с API-запроса, в протоколе ChatCompletion у vLLM для тулов есть два поля:
- tools - список доступных функций
- tool_choice стратегия вызова ("none", "auto", "required"`) или конкретная функция
Дальше tools передаются в chat template через render-слой, тут tools преобразуются в текст, который передаётся через системный промт на вход модели.
Парсинг ответа модели
Когда модель сгенерировала текст, движку надо понять, ват из зис за фак такой, обычный ответ или вызов функции?
Логика напрямую зависит от tool_choice:
- Конкретная функция (named tool choice) - весь вывод модели считается JSON-аргументами для этой функции (парсинг не нужен)
- "required" - вывод парсится как JSON-массив [{name, parameters}], используется всеми нами любимый structured output (JSON-схема), чтобы модель гарантированно сгенерировала валидный ответ
- "auto" - самый интересный случай, тут включается ToolParser, который анализирует сырой текст и ищет в нем tool calls
Базовый класс ToolParser определяет следующие методы:
- adjust_request() - модифицирует запрос перед генерацией, например, может добавить JSON-схему для structured output
- extract_tool_calls() - парсит полный вывод модели (non-streaming)
- extract_tool_calls_streaming() - парсит вывод по мере генерации (streaming), детектит токен за токеном
Все парсеры регистрируются через реестр ToolParserManager, который загружает нужный парсер по имени, активируется на старте через CLI флаг, например так `--tool-call-parser hermes`. На данный момент в vLLM имеется 32 парсера, в том числе и gigachat3 для новых сберовских моделей.
Пример - как парсит Hermes
Разберём как работает Hermes2ProToolParser, предполагается, что модель генерирует что-то вроде:
Парсер делает findall по регулярке <tool_call>(.*?)</tool_call>, вытаскивает содержимое, предполагается, что это JSON-схема, которую парсер раскладывает по объектам ToolCall(name=..., arguments=...), при этом текст до первого <tool_call> сохраняется как обычный content ответа, так как модель может ответить текстом и одновременно вызвать функцию.
В streaming-режиме уже есть нюансики, парсер на каждом новом токене перепарсивает накопленный текст, сравнивает с тем что уже отправил клиенту, и шлет только дельту. Отдельно отслеживается частичное совпадение с тегом <tool_call> - если текст заканчивается на <tool_, парсер придерживает его в буфере, не отправляя клиенту, пока не станет ясно - это начало вызова или просто текст.
Пользовательские парсеры
Если вы любитель обучать свои модели, хехех, хотите чтобы она умела тулы, но для вашей модели нет готового парсера, это не беда, можно написать свой парсер.
Флаг --tool-parser-plugin path/to/my_parser.py загрузит код парсера в реестр, а --tool-call-parser my_parser_name активирует его. Нужно только наследоваться от ToolParser и вызвать директиву вида
Итого
Вся магия tool calling это банальный промпт-инжиниринг + парсинг вывода.
За сим откланиваюсь, спасибо товарищам по вайбцеху за то что затронули тему внутреннего устройства движка vLLM, приятно поднять заметки и покопаться в кодовой базе.
Валерий @neuraldeep и Александр @countwithsasha подняли тему (тыц и тыц) о том, как tool calling работает на стороне inference-движка, давайте разберём это на примере vLLM - одного из топовых движков для реализации tool calling паттерна, но к слову сказать аналогичным образом это устроено и в других движках.
Кратенько, нет единого формата tool calling, каждое семейство моделей придумало свой уникальный синтаксис. Hermes оборачивает вызовы в XML-теги <tool_call>, Mistral использует [TOOL_CALLS] с JSON-массивом внутри, Llama генерирует JSON внутри специальных тегов <|python_tag|>, DeepSeek пишет вызовы в тройных кавычках, и inference-движок должен это все уметь парсить.
Как tools попадают в промпт
Всё начинается с API-запроса, в протоколе ChatCompletion у vLLM для тулов есть два поля:
- tools - список доступных функций
- tool_choice стратегия вызова ("none", "auto", "required"`) или конкретная функция
Дальше tools передаются в chat template через render-слой, тут tools преобразуются в текст, который передаётся через системный промт на вход модели.
Парсинг ответа модели
Когда модель сгенерировала текст, движку надо понять, ват из зис за фак такой, обычный ответ или вызов функции?
Логика напрямую зависит от tool_choice:
- Конкретная функция (named tool choice) - весь вывод модели считается JSON-аргументами для этой функции (парсинг не нужен)
- "required" - вывод парсится как JSON-массив [{name, parameters}], используется всеми нами любимый structured output (JSON-схема), чтобы модель гарантированно сгенерировала валидный ответ
- "auto" - самый интересный случай, тут включается ToolParser, который анализирует сырой текст и ищет в нем tool calls
Базовый класс ToolParser определяет следующие методы:
- adjust_request() - модифицирует запрос перед генерацией, например, может добавить JSON-схему для structured output
- extract_tool_calls() - парсит полный вывод модели (non-streaming)
- extract_tool_calls_streaming() - парсит вывод по мере генерации (streaming), детектит токен за токеном
Все парсеры регистрируются через реестр ToolParserManager, который загружает нужный парсер по имени, активируется на старте через CLI флаг, например так `--tool-call-parser hermes`. На данный момент в vLLM имеется 32 парсера, в том числе и gigachat3 для новых сберовских моделей.
Пример - как парсит Hermes
Разберём как работает Hermes2ProToolParser, предполагается, что модель генерирует что-то вроде:
<tool_call>
{"name": "get_weather", "arguments": {"city": "Moscow"}}
</tool_call>
Парсер делает findall по регулярке <tool_call>(.*?)</tool_call>, вытаскивает содержимое, предполагается, что это JSON-схема, которую парсер раскладывает по объектам ToolCall(name=..., arguments=...), при этом текст до первого <tool_call> сохраняется как обычный content ответа, так как модель может ответить текстом и одновременно вызвать функцию.
В streaming-режиме уже есть нюансики, парсер на каждом новом токене перепарсивает накопленный текст, сравнивает с тем что уже отправил клиенту, и шлет только дельту. Отдельно отслеживается частичное совпадение с тегом <tool_call> - если текст заканчивается на <tool_, парсер придерживает его в буфере, не отправляя клиенту, пока не станет ясно - это начало вызова или просто текст.
Пользовательские парсеры
Если вы любитель обучать свои модели, хехех, хотите чтобы она умела тулы, но для вашей модели нет готового парсера, это не беда, можно написать свой парсер.
Флаг --tool-parser-plugin path/to/my_parser.py загрузит код парсера в реестр, а --tool-call-parser my_parser_name активирует его. Нужно только наследоваться от ToolParser и вызвать директиву вида
@ToolParserManager.register_module("my_parser_name").Итого
Вся магия tool calling это банальный промпт-инжиниринг + парсинг вывода.
За сим откланиваюсь, спасибо товарищам по вайбцеху за то что затронули тему внутреннего устройства движка vLLM, приятно поднять заметки и покопаться в кодовой базе.
🔥35❤7👍5😇2💅2
Следуя советам Никиты @buckwheat_thoughts прокачал гиперпараметры обучения модели ruGPT3XL-8k, оказалось все мои прошлые попытки не маскировали инпут, а большой LR и прочие параметры приводили к оверфиту, теперь прогресс идёт намного стабильнее. Однако, это привело к увеличению времени обучения со 100 часов до 240, но лучше дольше чем неправильно.
(не пугаемся высокому train loss, из-за fsdp тренер пишет кривые числа, делим их на 32)
Помимо этого благодаря советам Александра @dealerAI смог ускорить процесс в почти 4 раза запустив обучение через FSDP (скрипт train_rugpt3xl_fsdp.py), все видеокарты загружены на максимум, время обучения снизилось с 240 часов до 42-46.
Плюс разобрался с тем как сделать "весёлые картинки", для этого внутри контейнера поставил и поднял tensorboard, и настроил тренер чтобы он писал логи куда надо.
Вот каждый раз убеждаюсь, что самый лучший способ научиться чему-то новому это заявить публично какую-то спорную мысль, а потом мотать на ус советы более умных товарищей.
(не пугаемся высокому train loss, из-за fsdp тренер пишет кривые числа, делим их на 32)
Помимо этого благодаря советам Александра @dealerAI смог ускорить процесс в почти 4 раза запустив обучение через FSDP (скрипт train_rugpt3xl_fsdp.py), все видеокарты загружены на максимум, время обучения снизилось с 240 часов до 42-46.
Плюс разобрался с тем как сделать "весёлые картинки", для этого внутри контейнера поставил и поднял tensorboard, и настроил тренер чтобы он писал логи куда надо.
Вот каждый раз убеждаюсь, что самый лучший способ научиться чему-то новому это заявить публично какую-то спорную мысль, а потом мотать на ус советы более умных товарищей.
👍19❤6🤝3🔥2
Forwarded from Валера Ковальский
Ребят в CodeDash появился лидерборд!
Зачем?
1) Интересно узнать на сколько вы отличаетесь от других вайбкодеров
2) Можно найти друзей по цэху и написать им через github
3) Можно поискать что же за проекты пилит автор если он их выкладывает в open-source
4) Можно поискать и хантить себе вайберов если вы поняли о чем я =)
5) Просто по фану измерить примерно сколько у вас всм запросов на фоне других вайберов
В общем качайте новую версию
Синхронизируйте Github и регистрируйтесь в лидерборде!
Зачем?
1) Интересно узнать на сколько вы отличаетесь от других вайбкодеров
2) Можно найти друзей по цэху и написать им через github
3) Можно поискать что же за проекты пилит автор если он их выкладывает в open-source
4) Можно поискать и хантить себе вайберов если вы поняли о чем я =)
5) Просто по фану измерить примерно сколько у вас в
В общем качайте новую версию
codedash update && codedash restart
Синхронизируйте Github и регистрируйтесь в лидерборде!
👍8🔥4💩2🤡2❤1🤝1💊1