tgoop.com/dimension_ai/191
Last Update:
Hybrid: SGR + Tools - закрываем дыры, не ломая протокол
После горячих обсуждений и двух предыдущих постов (пост 1, пост 2) я решил показать рабочий гибридный паттерн и сделать вклад в опенсорс-подход к SGR (линк в конце поста).
TLDR пост1 и пост2: SGR пишет ответ через «поля» и якоря [благодаря чему, приводит к более предсказуемым и верным ответам], но в чистом виде легко размывает семантику tool-calling (если мы ее задействуем): в истории появляются вызовы инструментов, которых не было в объявленном наборе и не передались в чат-темплейт, а если неаккуратно обрабатывать вызовы - нас ждёт еще больше проблем. И всё это расходится с практиками провайдеров и публичными бенчмарками по агентости.
Что я сделал:
Я вынес рассуждение в отдельный инструмент generate_reasoning и заставляю модель вызывать его принудительно сразу после любого пользовательского сообщения с помощью управления tool_choice. Внутри reasoning используется SGR: цель, план, ограничения, проверка предпосылок, сигналы о том, нужно ли звать инструменты и какие именно. Далее "агент", опираясь на получившееся рассуждение, вызывает только те функции, которые явно объявлены в tools, строго через нативный механизм вызовов.
Ключевые свойства подхода:
1. Никакого «динамического tools из воздуха». Всё, чем пользуется модель, заранее объявлено; в истории нет инструментов, которых нет в tools. Контроль с помощью tool_choice.
2. История сообщений валидна и читаема: отдельно видно этап рассуждения и отдельно - действия и финальный ответ.
3. Совместимость с практиками провайдеров и бенчами: снижается риск tool-hallucination, корректнее проходит проверка релевантности функций.
4. Контроль внимания вместо хаоса: сначала гарантированное рассуждение, потом действия. Это делает маршрутизацию детерминированной и устойчивой. Тк много трейновых датасетов, как и в каких ситуациях вызывать тулы, мы используем очень много компьюта в свою пользу: не только будущая корректная оценка цепочек ризонинга (для метрик), но и адаптивный выбор тулов.
Почему это устойчивее, чем «SGR-only»:
- Нативные tool_calls, а не эмуляция вызовов через content (да, можно этого избежать, подкладывая вызов SGRв tool_calls, но не решается следующий пункт:
- Меньше неожиданностей для модели: нет сценария «ответил JSON -> внезапно прилетел tool», когда tools пусты.
- Проще поддерживать качество: reasoning становится обычным шагом workflow. Его вообще можно вынести на значительно более мощные модели или наоборот, более слабые. Позволяет нам давать больше контроля.
Получается стабильный и интерпретируемый паттерн: чат-темплейт согласован с историей, вызовы инструментов не идут «против шерсти», а модель ведёт себя предсказуемо.
Рекомендую попробовать гибрид SGR + Tools на своих задачках
линк на код
поддержите реакциями ❤️
BY Dimension AI | Dmitry Sirakov

Share with your friend now:
tgoop.com/dimension_ai/191