Forwarded from Чуковский
Schema-Guided Reasoning
В профильных LLM-каналах начал набирать популярность термин SGR (Schema-Guided Reasoning), но по какой-то причине народ не всегда понимает, что он обозначает, и зачем нужен. Никакого секрета нет, главное запомнить одно уравнение:
Из чего складывается Schema-Guided Reasoning:
1️⃣ Во-первых, нам нужна модель, которая поддерживает Stuctured Output (SO) - возможность управлять результатом работы LLM, "зануляя" вероятности токенов, не подходящих под описанную нами грамматику, прямо во время выполнения.
2️⃣ Во-вторых, нам нужно определить структуру желаемого ответа так, чтобы она "помогала" модели мыслить (тот самый Chain-Of-Thought).
Мы как бы «заставляем» модель пройти определенные этапы размышления перед тем как дать ответ, чтобы в результате вероятность корректных токенов ответа была выше.
Отличным примером использования такой техники является бот для дип-ресерча на открытых модельках sgr-deep-research, разработанный автором канала @neuraldeep:
🟢 Сначала (скриншот 1 в комментах) мы определяем несколько классов, которые описывают шаги размышления модели. Например, когда модель хочет сгенерировать список уточняющих вопросов - она должна сначала описать себе причину, зачем ей это уточнение потребовалось, далее перечислить список терминов, которые она не поняла, предположить что они обозначают, и только после этого сгенерировать вопросы пользователя
🟢 Одновременно с этим, для описания шагов размышления мы используем Pydantic-классы. Зачем? Чтобы можно было их отправить в LLM в качестве грамматики, ограничивающей результат. Теперь, если LLM решит выполнить шаг «Уточнение вопроса», она обязательно должна будет пройти указанные выше шаги, и это ограничение будет завернуто прямо в движок ее инференса. Модель просто физически не сможет отойти от схемы и начать генерировать что-то нерелевантное (почти всегда, но об этом позже)
Далее, эти шаги объединяются в цепочку (скриншот 2), которая представляет собой финальный ответ, и структура которой будет отправлена в LLM в качестве промпта.
И вот на этом этапе, становится понятно, зачем понадобился вообще SGR, и в чем его преимущество относительно других методов. Для того, чтобы сгенерировать следующий шаг в размышлениях, LLM обязательно сгенерирует:
🟢 1-4 предложения, как она видит текущую ситуацию;
🟢 статус выполнения плана исследования, закончен ли он, сколько еще шагов нужно пройти
🟢 сколько еще шагов поиска она может сделать
🟢 достаточно ли ей данных для отчета
🟢 и только после этого, она сможет выбрать инструмент, который будет запускать (или доуточнение, или веб-поиск, или генерация ответа).
Для больших моделей, такой подход часто избыточен - они и так достаточно умные, чтобы рассуждать прямо "из коробки", и всегда следовать нужной инструкции.
Но если ваша модель относительно небольшая, и может легко отклоняться от инструкций, или она недостаточно хорошо их выполняет, то такие вот "рельсы" в виде Structured Output + зашитый в ответ процесс размышлений в стиле Chain-Of-Thought могут дать значительный прирост качества на ряде задач.
Конечно, у такого подхода есть и минусы, и его тоже нужно правильно готовить, но об этом как-нибудь в другой раз
@korneychukov
В профильных LLM-каналах начал набирать популярность термин SGR (Schema-Guided Reasoning), но по какой-то причине народ не всегда понимает, что он обозначает, и зачем нужен. Никакого секрета нет, главное запомнить одно уравнение:
SGR = SO + COT
Из чего складывается Schema-Guided Reasoning:
Мы как бы «заставляем» модель пройти определенные этапы размышления перед тем как дать ответ, чтобы в результате вероятность корректных токенов ответа была выше.
Отличным примером использования такой техники является бот для дип-ресерча на открытых модельках sgr-deep-research, разработанный автором канала @neuraldeep:
Далее, эти шаги объединяются в цепочку (скриншот 2), которая представляет собой финальный ответ, и структура которой будет отправлена в LLM в качестве промпта.
И вот на этом этапе, становится понятно, зачем понадобился вообще SGR, и в чем его преимущество относительно других методов. Для того, чтобы сгенерировать следующий шаг в размышлениях, LLM обязательно сгенерирует:
Для больших моделей, такой подход часто избыточен - они и так достаточно умные, чтобы рассуждать прямо "из коробки", и всегда следовать нужной инструкции.
Но если ваша модель относительно небольшая, и может легко отклоняться от инструкций, или она недостаточно хорошо их выполняет, то такие вот "рельсы" в виде Structured Output + зашитый в ответ процесс размышлений в стиле Chain-Of-Thought могут дать значительный прирост качества на ряде задач.
Конечно, у такого подхода есть и минусы, и его тоже нужно правильно готовить, но об этом как-нибудь в другой раз
@korneychukov
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍30❤15🔥3
Дядя делает очень крутые обзоры
Добей ему 10к что бы он стал сми!
230 подписок осталось
https://t.iss.one/dealerAI
Добей ему 10к что бы он стал сми!
230 подписок осталось
https://t.iss.one/dealerAI
Telegram
Dealer.AI
Жоский ИИ дядя.
Твой личный поставщик AI 💊💉🤖
Канал о мире интересного AI: ML, DL, NLP/NLU, RL, Retrieval, RecSys.
Для связи @dealer_ai
(реклама и консультации)
Руковожу ML, AI командами.
Habr: @Andriljo
Kaggle: https://www.kaggle.com/andrilko
Твой личный поставщик AI 💊💉🤖
Канал о мире интересного AI: ML, DL, NLP/NLU, RL, Retrieval, RecSys.
Для связи @dealer_ai
(реклама и консультации)
Руковожу ML, AI командами.
Habr: @Andriljo
Kaggle: https://www.kaggle.com/andrilko
😁13👍1
Forwarded from Dealer.AI
Новый быстрый REFRAG — не очень сильно-то и хотелось.
Все как с ума посходили в соседних чатах и каналах. Смотри, новый супер быстрый RAG.🤩
Идея там у авторов еще благая, мол чанки семантически могут быть не связаны, поиск размывает информацию, квадратичная сложность внимания и т.п. Святые люди да?🧖 Поэтому, конечно, давайте все нафиг усложним. 😌
Итого, идея:
1. Берем крч, нарезаем текст подсказок, к примеру, на малые чанки по 16 токенов.
2. Эмбедим их любым понравившимся вам энкодером. Можно small/tiny/base и т.п.Опа, плюсуем модельку в пайп. 🗒
3. Прогоняем через модель награды. Ага, еще её бы обучить, разметку под неё где-то потратиться собрать.Ну и опа еще одна моделька в пайп. 🗒
4. Хорошие по награде тексты остаются без пожатия и как есть идут в LM, а остальные передаются в виде векторов из п. 2.
5. Делаем супир пупир генерацию. Делай легче, делай играюче, кайфуй.
Суммируем: мы имеем теперь 2 модели помимо LM. Одну из них над еще обучить, разметку собрать. Далее нам еще надо помимо in-context подсказок, создать спец. токены под эмбы подсказок, неважных для политики награды. А еще нужно LM научить с таким сетапом работать, поверьте иначе нормально не заведётся. Это как p-tune. Или как fromage для image-embs.
И что легче вам стало?)
За скорость вы заплатили +1 моделью, +1 разметкой и +2 тюнами. И так всегда. За скорость вы платите памятью, и прочими трудностями.
Статья тут.
Все как с ума посходили в соседних чатах и каналах. Смотри, новый супер быстрый RAG.
Идея там у авторов еще благая, мол чанки семантически могут быть не связаны, поиск размывает информацию, квадратичная сложность внимания и т.п. Святые люди да?
Итого, идея:
1. Берем крч, нарезаем текст подсказок, к примеру, на малые чанки по 16 токенов.
2. Эмбедим их любым понравившимся вам энкодером. Можно small/tiny/base и т.п.
3. Прогоняем через модель награды. Ага, еще её бы обучить, разметку под неё где-то потратиться собрать.
4. Хорошие по награде тексты остаются без пожатия и как есть идут в LM, а остальные передаются в виде векторов из п. 2.
5. Делаем супир пупир генерацию. Делай легче, делай играюче, кайфуй.
Суммируем: мы имеем теперь 2 модели помимо LM. Одну из них над еще обучить, разметку собрать. Далее нам еще надо помимо in-context подсказок, создать спец. токены под эмбы подсказок, неважных для политики награды. А еще нужно LM научить с таким сетапом работать, поверьте иначе нормально не заведётся. Это как p-tune. Или как fromage для image-embs.
И что легче вам стало?)
За скорость вы заплатили +1 моделью, +1 разметкой и +2 тюнами. И так всегда. За скорость вы платите памятью, и прочими трудностями.
Статья тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯17🔥6😁5❤1
Cursor System Prompt
Наверное вы уже видели разные репо с системным промптом cursor
Из команды разработки SGR попросили посмотреть логи через свое прокси LiteLLM дабы подтвердить сей факт
И как всегда первая проблема все логи в моей версии прокси делают вот так ... (truncated 7765 chars)"
Пошел мучать клод на тему "поищи в интернете" "как убрать в UI/BD truncated logs"
Весь поиск и попытки применить рекомендации от клода привели меня на этот issues
Где ребята прекрасно обошли эту настройку патчем
Далее имеем репо
https://github.com/vakovalskii/cursor_agent_flow
Я запустил очень простой флоу в 3 запроса
1) Понять где мы
2) Проанализировать директорию
3) Сделать поиск по кодовой базе
Cursor использует многослойный системный промпт с отдельными секциями для каждого аспекта поведения:
<tool_calling> - строгие правила работы с инструментами
<maximize_context_understanding> - обязательная тщательность исследования
<making_code_changes> - гарантия работоспособности кода
<task_management> - активное планирование через todo_write
<memories> - персистентная память между сессиями
Все это для меня подтверждает правдивость этого вот репо
Что бы знать матчасть в нее надо уметь!
Репо с моими логами: https://github.com/vakovalskii/cursor_agent_flow
Наверное вы уже видели разные репо с системным промптом cursor
Из команды разработки SGR попросили посмотреть логи через свое прокси LiteLLM дабы подтвердить сей факт
И как всегда первая проблема все логи в моей версии прокси делают вот так ... (truncated 7765 chars)"
Пошел мучать клод на тему "поищи в интернете" "как убрать в UI/BD truncated logs"
Весь поиск и попытки применить рекомендации от клода привели меня на этот issues
Где ребята прекрасно обошли эту настройку патчем
FROM ghcr.io/berriai/litellm-database:main-latest
RUN sed -i.bak 's/MAX_STRING_LENGTH = 1000$/MAX_STRING_LENGTH = 100000/' \
/app/litellm/proxy/spend_tracking/spend_tracking_utils.py && \
cmp -s /app/litellm/proxy/spend_tracking/spend_tracking_utils.py{.bak,} && exit 1 || true
RUN cd /app && pip install .
Далее имеем репо
https://github.com/vakovalskii/cursor_agent_flow
Я запустил очень простой флоу в 3 запроса
1) Понять где мы
2) Проанализировать директорию
3) Сделать поиск по кодовой базе
Cursor использует многослойный системный промпт с отдельными секциями для каждого аспекта поведения:
<tool_calling> - строгие правила работы с инструментами
<maximize_context_understanding> - обязательная тщательность исследования
<making_code_changes> - гарантия работоспособности кода
<task_management> - активное планирование через todo_write
<memories> - персистентная память между сессиями
Все это для меня подтверждает правдивость этого вот репо
Что бы знать матчасть в нее надо уметь!
Репо с моими логами: https://github.com/vakovalskii/cursor_agent_flow
1🔥14❤5