Neural Kovalskii
8.39K subscribers
329 photos
49 videos
3 files
224 links
Head of AI redmadrobot.com

From IT Admin to Head of AI in 5 years

Applied AI Engineer
B2C RAG (2M+ books)
B2B RAG platform (10+ implementations)
B2C gptdaisy.com (100k MAU)

github.com/vakovalskii | chat @neuraldeepchat
Download Telegram
Forwarded from Чуковский
Schema-Guided Reasoning

В профильных LLM-каналах начал набирать популярность термин SGR (Schema-Guided Reasoning), но по какой-то причине народ не всегда понимает, что он обозначает, и зачем нужен. Никакого секрета нет, главное запомнить одно уравнение:

SGR = SO + COT



Из чего складывается 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
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3015🔥3
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 тюнами. И так всегда. За скорость вы платите памятью, и прочими трудностями.

Статья тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯17🔥6😁51
Cursor System Prompt

Наверное вы уже видели разные репо с системным промптом 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🔥145