Forwarded from Neural Kovalskii
SGR Deep Research топ 3 в open-source!
Пока кипит работа по финализированнию наших тестов и выявлению лучшей архитектуры агента для небольших и недорогих моделей
Хочу с вами поделится очень крутыми новостями!
Бенчмарк и новые фичи!
Что было сделано:
1) Был добавлен MCP как клиент (теперь вы можете подключить любой набор тулов внутрь агента)
2) Проработаны и оптимизированы промпты для читаемости и понимания LLM
3) Проработаны докстринги у каждого тула
Осмысленные и протестированы description
4) Использован гибридный подход: агент строится на концепции SGR и подходах ReAct+PlanAct, также был применён чистый Function Calling (со схемой решения можно ознакомиться в комментариях под постом)
5) Я разнес тул вэб поиска на /search и /extract
5) Я лично провел огромное кол-во экспериментов по созданию разных tool_kit для проверки агента
Самое важное этот агент sgr_tools_agent.py мой личный фаворит для использования моделей по типу
gpt-4o-mini
gpt-4.1-mini
И схожих им по размеру (как говорит интернет это что-то в районе 40-80b)
Сначала мы занялись поиском бенчмарка, на котором можно протестировать SGR Deep Research
Выбирали из: BESPOKE, FRAMES, MS MARCO, SimpleQA, SealQA
Остановились на SimpleQA так как хотелось проверить возможности агента на поиск фактов!
Нашим ориентиром стал лидерборд из репозитория фреймворка ROMA, в нем приведено сравнение точности различных LLM на SimpleQA, встроенных в поисковый движок
Тестовый прогон на SimpleQA Verified
Перед запуском на SimpleQA (4326 вопросов/ответов)
решили провести тестирование на урезанной версии SimpleQA Verified (1000 вопросов/ответов).
Для оценки правильности ответов мы использовали подход LLM-as-a-judge, где в качестве судьи выбрали gpt-4o
Для старта в качестве агента для SGR Deep Research взяли sgr_auto_tool_calling_agent.py,
Точность оценивали у двух LLM: gpt-4.1-mini и gpt-4o-mini.
Результат на SimpleQA Verified получили следующий:
gpt-4.1-mini → Accuracy: 0.792
gpt-4o-mini → Accuracy: 0.705
Вывод: gpt-4.1-mini оказался точнее
А режим auto мешал агенту и превращал его в чатбота, такое нам не надо
С ним идем на полный SimpleQA но убираем режим auto у тулов и переключаемся в required sgr_tools_agent.py.
Оценка SGR Deep Research на SimpleQA
В качестве LLM выбрали gpt-4.1-mini, а в качестве агента - sgr_tool_calling_agent.
Произвели все изменения что я описал выше учитывая незначительные дополнительные правила и указания
(фититься под бенчмарк не хотелось бы как ROMA)
Результат бенчмарка получили следующий:
gpt-4.1-mini → Accuracy: 0.861
Таким образом, опираясь на лидерборд из ROMA, мы смогли занять 7 место среди общего списка, а также 3 МЕСТО среди open-source решений на недорогой модели и самом базовом поиске от Tavily!
Если быть честными на gpt-4.1-mini это первое место так как был использован Tavily Basic (с ограничением на экстракт в 33к символов, что сильно экономит токены)
Более подробное описание параметров запуска, а также результатов тестирования мы выложили репозиторий
Тут есть все
Коды запуска
Коды от Зиона =)
LLM-as-a-judge
Таблица с ответами
Кстати мы не поленились и собрали полный лог каждого прогона можно посмотреть тут
Так что теперь можете не только брать данное решение как лишенное готовых агентных фреймворков,
так и доказать перед командой точность результатами бенчмарка!
Отдельное спасибо нашей open-source команде которая смогла реализовать это:
Ревью кода - Артём
Координирование - я
Подготовка данных и реализация логики тестирования: Максим
Паша наш MCP гуру
Ринат собирает кейсы, и распространяет проект на EN уровне!
Цифры:
232 млн токенов
8к запросов на /search
1200 запросов на /extract
Полный тест такого бенчмарка обошелся в $170
Далее мы планируем оценить работу агента уже на локальных LLM
Репо: https://github.com/vamplabAI/sgr-deep-research
P.S замену tool calling не нужно делать!
Но если очень хочется можно
Мы всех слышим и умеем читать пейперы =)
Пока кипит работа по финализированнию наших тестов и выявлению лучшей архитектуры агента для небольших и недорогих моделей
Хочу с вами поделится очень крутыми новостями!
Бенчмарк и новые фичи!
Что было сделано:
1) Был добавлен MCP как клиент (теперь вы можете подключить любой набор тулов внутрь агента)
2) Проработаны и оптимизированы промпты для читаемости и понимания LLM
<MAIN_TASK_GUIDELINES>
<DATE_GUIDELINES>
<CORE_PRINCIPLES>
<REASONING_GUIDELINES>
3) Проработаны докстринги у каждого тула
Осмысленные и протестированы description
4) Использован гибридный подход: агент строится на концепции SGR и подходах ReAct+PlanAct, также был применён чистый Function Calling (со схемой решения можно ознакомиться в комментариях под постом)
5) Я разнес тул вэб поиска на /search и /extract
5) Я лично провел огромное кол-во экспериментов по созданию разных tool_kit для проверки агента
Самое важное этот агент sgr_tools_agent.py мой личный фаворит для использования моделей по типу
gpt-4o-mini
gpt-4.1-mini
И схожих им по размеру (как говорит интернет это что-то в районе 40-80b)
Сначала мы занялись поиском бенчмарка, на котором можно протестировать SGR Deep Research
Выбирали из: BESPOKE, FRAMES, MS MARCO, SimpleQA, SealQA
Остановились на SimpleQA так как хотелось проверить возможности агента на поиск фактов!
Нашим ориентиром стал лидерборд из репозитория фреймворка ROMA, в нем приведено сравнение точности различных LLM на SimpleQA, встроенных в поисковый движок
Тестовый прогон на SimpleQA Verified
Перед запуском на SimpleQA (4326 вопросов/ответов)
решили провести тестирование на урезанной версии SimpleQA Verified (1000 вопросов/ответов).
Для оценки правильности ответов мы использовали подход LLM-as-a-judge, где в качестве судьи выбрали gpt-4o
Для старта в качестве агента для SGR Deep Research взяли sgr_auto_tool_calling_agent.py,
Точность оценивали у двух LLM: gpt-4.1-mini и gpt-4o-mini.
Результат на SimpleQA Verified получили следующий:
gpt-4.1-mini → Accuracy: 0.792
gpt-4o-mini → Accuracy: 0.705
Вывод: gpt-4.1-mini оказался точнее
А режим auto мешал агенту и превращал его в чатбота, такое нам не надо
С ним идем на полный SimpleQA но убираем режим auto у тулов и переключаемся в required sgr_tools_agent.py.
Оценка SGR Deep Research на SimpleQA
В качестве LLM выбрали gpt-4.1-mini, а в качестве агента - sgr_tool_calling_agent.
Произвели все изменения что я описал выше учитывая незначительные дополнительные правила и указания
(фититься под бенчмарк не хотелось бы как ROMA)
Результат бенчмарка получили следующий:
gpt-4.1-mini → Accuracy: 0.861
Таким образом, опираясь на лидерборд из ROMA, мы смогли занять 7 место среди общего списка, а также 3 МЕСТО среди open-source решений на недорогой модели и самом базовом поиске от Tavily!
Если быть честными на gpt-4.1-mini это первое место так как был использован Tavily Basic (с ограничением на экстракт в 33к символов, что сильно экономит токены)
Более подробное описание параметров запуска, а также результатов тестирования мы выложили репозиторий
Тут есть все
Коды запуска
Коды от Зиона =)
LLM-as-a-judge
Таблица с ответами
Кстати мы не поленились и собрали полный лог каждого прогона можно посмотреть тут
Так что теперь можете не только брать данное решение как лишенное готовых агентных фреймворков,
так и доказать перед командой точность результатами бенчмарка!
Отдельное спасибо нашей open-source команде которая смогла реализовать это:
Ревью кода - Артём
Координирование - я
Подготовка данных и реализация логики тестирования: Максим
Паша наш MCP гуру
Ринат собирает кейсы, и распространяет проект на EN уровне!
Цифры:
232 млн токенов
8к запросов на /search
1200 запросов на /extract
Полный тест такого бенчмарка обошелся в $170
Далее мы планируем оценить работу агента уже на локальных LLM
Репо: https://github.com/vamplabAI/sgr-deep-research
P.S замену tool calling не нужно делать!
Но если очень хочется можно
Мы всех слышим и умеем читать пейперы =)
Forwarded from Korenev AI - GPT в тапочках🩴
Рейтинг моделей по распознаванию англоязычных документов
Для сравнения выкладываю рейтинг по английским документам. По нему видно, что в среднем распознается 82% информации, тогда как для русскоязычных текстов - это 68%. Конечно, не совсем корректно их сравнивать, но это хотя бы что-то.
Метрики из таблицы:
Еще есть интересная колонка "цена" в центах. Gemini-flash - в топе по этому параметру
Для сравнения выкладываю рейтинг по английским документам. По нему видно, что в среднем распознается 82% информации, тогда как для русскоязычных текстов - это 68%. Конечно, не совсем корректно их сравнивать, но это хотя бы что-то.
Метрики из таблицы:
Извлечение ключевой информации (KIE): Оценка способности извлекать структурированную информацию из документов
Визуальные вопросы и ответы (VQA): Проверка понимания содержимого документа через вопросы
Оптическое распознавание символов (OCR): Измерение точности распознавания текста в различных типах документов
Классификация документов: Оценка возможностей категоризации
Обработка длинных документов: Оценка производительности на объёмных документах
Извлечение таблиц: Проверка понимания и извлечения табличных данных
Оценка достоверности: Измерение надёжности и калибровки прогнозов модели
Еще есть интересная колонка "цена" в центах. Gemini-flash - в топе по этому параметру
Forwarded from Женя Янченко
Давайте обсудим подходы к удалению в БД?
Я встречала следующие:
➡️ Hard delete
Когда запись прямо удаляется SQL-запросом:
Главное не забыть WHERE 😅
Не встречала, чтобы такой подход применяли к бизнесовым таблицам, где удалять данные может сам пользователь.
🤍 Бизнесовая причина:
Бизнес не любит терять свои данные , плюс для многих сфер важна безопасность и сохранение всех данных. Например, в финтехе.
🤍 Техническая причина:
Таблицы часто связаны через foreign keys, и если мы удаляем одну запись, то нужно удалять или сетить null у связанных записей. Цепочка FK может быть сложная -> легко накосячить и удалить лишнего.
Hard delete могут использовать для технических данных. Например, в transactional outbox удалять отправленные записи из таблицы outbox. Или удалять технические логи спустя 3-6 месяцев.
➡️ Soft delete
Это самый распостраненный подход. В таблице заводится служебное поле для метки удаления (например,
На проектах, где я работала, для бизнесовых таблиц использовался именно этот подход.
Какие у него есть подводные камни:
💋 Можно забыть добавить в запрос поиска или обновления условие
💋 Если уникальный индекс на какое-то поле не учитывает удаление, то даже после soft-удаления записи создать ещё одну такую же нельзя. Иногда это правильно с точки зрения бизнеса, а иногда нет. Если нет, то нужно делать индекс уникальности с учетом только неудаленных записей.
💋 Важно не спутать техническое удаление с бизнес-состоянием
Бывает, что у сущностей есть статусная модель. Например, NEW, IN_PROGRESS, COMPLETED. И в нее добавляют DELETED.
Иногда это оправданно с точки зрения бизнес-процесса, а иногда нет, и лучше сделать метку удаления отдельным полем. Тут уже нужно по ситуации смотреть)
💋 Если удаляют часто и много, то таблица разрастается ненужными данными. В этом случае старые удаленные записи можно переносить в отдельное архивное хранилище.
➡️ Soft delete + таблица с историей
Стандартно в таблицах добавляют служебное поле с датой создания:
Если нужно хранить данные об авторе, то ещё:
Помню, пришел к нам аналитик и говорит:
Тоже стандартная штука, добавили
Аналитик пришел во второй раз и говорит:
Ок, добавили
Когда аналитик пришел в третий раз, мы поняли, что пора делать отдельную таблицу с историей 😃
Таблица с историей содержит:
- тип операции (CREATE/UPDATE/DELETE)
- дату и время совершения операции
- автора
- установленные значения полей основной таблицы
Таким образом, в основной таблице лежит актуальное состояние, а всю историю изменений можно отдельно посмотреть.
При этом метку удаления в основной таблице лучше оставить для удобных выборок.
Конечно, исторические таблицы нужны только в особых случаях.
➡️ Еще читала о подходе, который может применяться для удаления персональных данных. Когда запись оставляют физически, но все поля с ПД сетят в null. Таким образом не ломаются связи, но данные удаляют.
Кстати, про картинку у поста. Когда нужно что-то удалить из БД (на тестовом стенде, конечно), то сначала пишу SELECT с WHERE, проверяю результат и потом меняю на DELETE. Опыт 😅
А какой подход используется у вас?
Я встречала следующие:
Когда запись прямо удаляется SQL-запросом:
DELETE FROM … WHERE …
Главное не забыть WHERE 😅
Не встречала, чтобы такой подход применяли к бизнесовым таблицам, где удалять данные может сам пользователь.
Бизнес не любит терять свои данные , плюс для многих сфер важна безопасность и сохранение всех данных. Например, в финтехе.
Таблицы часто связаны через foreign keys, и если мы удаляем одну запись, то нужно удалять или сетить null у связанных записей. Цепочка FK может быть сложная -> легко накосячить и удалить лишнего.
Hard delete могут использовать для технических данных. Например, в transactional outbox удалять отправленные записи из таблицы outbox. Или удалять технические логи спустя 3-6 месяцев.
Это самый распостраненный подход. В таблице заводится служебное поле для метки удаления (например,
boolean is_deleted, по-умолчанию false). Если строка удаляется, то ей ставится is_deleted = true.На проектах, где я работала, для бизнесовых таблиц использовался именно этот подход.
Какие у него есть подводные камни:
and is_deleted = falseНапример, у нас поле для метки удаления называлось active. А потом на проекте появились новые сущности — тарифы. У тарифа была дата начала, дата окончания и признак активности. К активным тарифам могли подключаться новые пользователи. При этом неактивные тарифы не удалялись, их можно было отдельно посмотреть. А признак удаления нужен был для случаев, когда менеджер ошибся при создании и потом просто удалил неправильную запись.
Бывает, что у сущностей есть статусная модель. Например, NEW, IN_PROGRESS, COMPLETED. И в нее добавляют DELETED.
Иногда это оправданно с точки зрения бизнес-процесса, а иногда нет, и лучше сделать метку удаления отдельным полем. Тут уже нужно по ситуации смотреть)
Стандартно в таблицах добавляют служебное поле с датой создания:
created_atЕсли нужно хранить данные об авторе, то ещё:
created_byПомню, пришел к нам аналитик и говорит:
— Нужно отображать ещё информацию об обновлении
Тоже стандартная штука, добавили
updated_at, updated_byАналитик пришел во второй раз и говорит:
— Нужно ещё сохранять, кто и когда запись удалил
Ок, добавили
deleted_at, deleted_by.Когда аналитик пришел в третий раз, мы поняли, что пора делать отдельную таблицу с историей 😃
Таблица с историей содержит:
- тип операции (CREATE/UPDATE/DELETE)
- дату и время совершения операции
- автора
- установленные значения полей основной таблицы
То есть когда запись создается, то в историческую таблицу пишем значения полей, тип = CREATE, таймстамп и автора.
Когда запись меняют, в историческую таблицу пишем новые значения полей, тип = UPDATE, таймстамп и того, кто внес изменения.
Таким образом, в основной таблице лежит актуальное состояние, а всю историю изменений можно отдельно посмотреть.
При этом метку удаления в основной таблице лучше оставить для удобных выборок.
Конечно, исторические таблицы нужны только в особых случаях.
Кстати, про картинку у поста. Когда нужно что-то удалить из БД (на тестовом стенде, конечно), то сначала пишу SELECT с WHERE, проверяю результат и потом меняю на DELETE. Опыт 😅
А какой подход используется у вас?
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AI и грабли
Реальный кейс по ИИ в собесах
После недавнего поста про ИИ на собесах, у меня случилось несколько интересных консультаций
Сейчас многие стоят перед вопросом "а как вообще менять собесы", так что делюсь кейсом с одной из них (с разрешения)
———
Света – лид системных аналитиков в крупном российском банке. Они молодцы – уже делают отдельный этап собесов на применение ИИ. Но проблема – слишком похоже на обычный этап системного дизайна – так же собрать требования, спроектировать контракты и модель данных. Только теперь с ИИ. Да еще и оказалось, что все, кто хорошо прошел первый этап без ИИ – хорошо проходят и с ИИ
Свете не нравится – второй этап не дает знаний про кандидата, зато дает ему негативный опыт – никто не любит решать похожие задачи. Как поменять – сходу не понятно
Я обычно пытаюсь выйти немного за рамки конкретной задачи. Так и тут, я забиваю на собесы и начинаю:
⦁ А как вообще в компании уже используется ИИ?
⦁ Как ты использовала на последней неделе?
⦁ Где использовала команда?
⦁ Про что говорили как про вау-момент?
⦁ Какие самые геморные задачи перестали быть такими?
Образовывается два кластера задач
1. Формирование и исследование архитектурных концепций – по сути масштабный диприсерч и куча итераций сверху – для собесов не подходит
2. Генерация драфтов API контрактов – то, что нужно
Дальше самый важный вопрос:
Именно задания на эти паттерны и нужны на собесе. А сами паттерны → чеклисты для интервьюера
Вот несколько примеров грин-флагов, которые выцепили:
⦁ Постановка задачи ИИ – сначала уточняет цель, ограничения, критерии качества; декомпозирует на подзадачи; задает контекст (домен, ограничения по API/данным)
⦁ Итеративность – работает циклами (черновик → проверка → правки → повтор); запрашивает альтернативы и сравнение; ведет лог допущений; просит обосновать решения и указать источники/риски
⦁ Работа с форматами и артефактами – требует строгие форматы (OpenAPI/JSON/YAML), валидирует схему; просит диаграммы/сиквенсы/модель данных, связывает их между собой
⦁ Управление ограничениями и рисками – явно задает ограничения (совместимость, версии, SLA, лимиты, idempotency, пагинация, фильтры, сортировки); тестирует негативные сценарии
⦁ Качество – редактирует запрос, пока не получит качественный результат, перед тем как перейти к следующему шагу (вместо кучи микро-исправлений)
———
Предлагаю Свете сделать только один этап: 40 минут систем дизайна + 20 минут генерация драфта одного контракта из системы, которую задизайнили. Кандидат уже в контексте – удобно
На этом в целом можно закончить – Света довольна
Но есть ощущение, что можно еще докрутить, так что предлагаю подумать над двумя интересными фактами:
1. LLMки очень стараются сделать то, о чем их просят (иногда в очень извращенном виде)
2. LLMки сильно цепляются за то, что уже сделано (код, текст поста, архитектура)
Там где опытный разработчик не станет делать фичу, а объяснит менеджеру, что у нас тут сначала месяц рефакторинга, ИИ смело идет плодить костыли
Это и приводит к "проклятью вайбкодеров" – когда проект разрастается до определенной сложности, новые фичи уже не помещаются в текущую архитектуру, и их уже невозможно добавить, не сломав существующие
Поэтому предлагаю Свете не делать на собесе драфт контракта с нуля, а, наоборот, дать уже готовый, но плохо спроектированный + попросить к нему добавить что-то (что просто так не влезет). И посмотреть, как человек будет решать проблему – все будет понятно
"Хороший специалист – знает, как не косячить. Отличный – знает, как исправить, когда кто-то уже накосячил"ауф
———
tl;dr
⦁ Смотрите на то, где команда уже применяет ИИ в работе
⦁ Ищите, чем отличаются паттерны успешных коллег – стройте задания на этом
⦁ Не давайте делать с нуля, а дайте средненькое решение и попросите что-то добавить (не прося "исправить")
⦁ Часть гринфлагов выше – универсальны, можете забирать себе
После недавнего поста про ИИ на собесах, у меня случилось несколько интересных консультаций
Сейчас многие стоят перед вопросом "а как вообще менять собесы", так что делюсь кейсом с одной из них (с разрешения)
———
Света – лид системных аналитиков в крупном российском банке. Они молодцы – уже делают отдельный этап собесов на применение ИИ. Но проблема – слишком похоже на обычный этап системного дизайна – так же собрать требования, спроектировать контракты и модель данных. Только теперь с ИИ. Да еще и оказалось, что все, кто хорошо прошел первый этап без ИИ – хорошо проходят и с ИИ
Свете не нравится – второй этап не дает знаний про кандидата, зато дает ему негативный опыт – никто не любит решать похожие задачи. Как поменять – сходу не понятно
Я обычно пытаюсь выйти немного за рамки конкретной задачи. Так и тут, я забиваю на собесы и начинаю:
⦁ А как вообще в компании уже используется ИИ?
⦁ Как ты использовала на последней неделе?
⦁ Где использовала команда?
⦁ Про что говорили как про вау-момент?
⦁ Какие самые геморные задачи перестали быть такими?
Образовывается два кластера задач
1. Формирование и исследование архитектурных концепций – по сути масштабный диприсерч и куча итераций сверху – для собесов не подходит
2. Генерация драфтов API контрактов – то, что нужно
Дальше самый важный вопрос:
Какие паттерны отличают успешных сотрудников от остальных?
Именно задания на эти паттерны и нужны на собесе. А сами паттерны → чеклисты для интервьюера
Вот несколько примеров грин-флагов, которые выцепили:
⦁ Постановка задачи ИИ – сначала уточняет цель, ограничения, критерии качества; декомпозирует на подзадачи; задает контекст (домен, ограничения по API/данным)
⦁ Итеративность – работает циклами (черновик → проверка → правки → повтор); запрашивает альтернативы и сравнение; ведет лог допущений; просит обосновать решения и указать источники/риски
⦁ Работа с форматами и артефактами – требует строгие форматы (OpenAPI/JSON/YAML), валидирует схему; просит диаграммы/сиквенсы/модель данных, связывает их между собой
⦁ Управление ограничениями и рисками – явно задает ограничения (совместимость, версии, SLA, лимиты, idempotency, пагинация, фильтры, сортировки); тестирует негативные сценарии
⦁ Качество – редактирует запрос, пока не получит качественный результат, перед тем как перейти к следующему шагу (вместо кучи микро-исправлений)
———
Предлагаю Свете сделать только один этап: 40 минут систем дизайна + 20 минут генерация драфта одного контракта из системы, которую задизайнили. Кандидат уже в контексте – удобно
На этом в целом можно закончить – Света довольна
Но есть ощущение, что можно еще докрутить, так что предлагаю подумать над двумя интересными фактами:
1. LLMки очень стараются сделать то, о чем их просят (иногда в очень извращенном виде)
2. LLMки сильно цепляются за то, что уже сделано (код, текст поста, архитектура)
Там где опытный разработчик не станет делать фичу, а объяснит менеджеру, что у нас тут сначала месяц рефакторинга, ИИ смело идет плодить костыли
Это и приводит к "проклятью вайбкодеров" – когда проект разрастается до определенной сложности, новые фичи уже не помещаются в текущую архитектуру, и их уже невозможно добавить, не сломав существующие
Поэтому предлагаю Свете не делать на собесе драфт контракта с нуля, а, наоборот, дать уже готовый, но плохо спроектированный + попросить к нему добавить что-то (что просто так не влезет). И посмотреть, как человек будет решать проблему – все будет понятно
"Хороший специалист – знает, как не косячить. Отличный – знает, как исправить, когда кто-то уже накосячил"
———
tl;dr
⦁ Смотрите на то, где команда уже применяет ИИ в работе
⦁ Ищите, чем отличаются паттерны успешных коллег – стройте задания на этом
⦁ Не давайте делать с нуля, а дайте средненькое решение и попросите что-то добавить (не прося "исправить")
⦁ Часть гринфлагов выше – универсальны, можете забирать себе
Forwarded from WBTECH
Вы просили — мы сделали 🤝
CLIP + LLM в проде: мультимодальный «Поиск по фото» для маркетплейса
Никита Романов, Tech Lead продуктов «Поиск по фото» и «Похожие по фото», рассказал, как команда внедрила SigLIP 2, Qdrant и LLM в прод, обучила модель уточнять запросы текстом и улучшила качество поиска без потери скорости.
В статье — архитектура продового пайплайна, обучение эмбединговой модели, генерация тегов через VLM и LLM, результаты A/B-тестов и ключевые инженерные решения, которые помогли выдержать продовую нагрузку.
➡️ Читать на Хабре
CLIP + LLM в проде: мультимодальный «Поиск по фото» для маркетплейса
Никита Романов, Tech Lead продуктов «Поиск по фото» и «Похожие по фото», рассказал, как команда внедрила SigLIP 2, Qdrant и LLM в прод, обучила модель уточнять запросы текстом и улучшила качество поиска без потери скорости.
В статье — архитектура продового пайплайна, обучение эмбединговой модели, генерация тегов через VLM и LLM, результаты A/B-тестов и ключевые инженерные решения, которые помогли выдержать продовую нагрузку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from LLM is all you need
Написал на Хабре небольшой туториал, как запилить простой пример MCP-сервера.
Разработка MCP-сервера на примере CRUD операций
Model Context Protocol (MCP) это такой единый протокол, который описывает как создавать API сервисов, с которыми могут взаимодействовать LLM.
Разработка MCP-сервера на примере CRUD операций
Model Context Protocol (MCP) это такой единый протокол, который описывает как создавать API сервисов, с которыми могут взаимодействовать LLM.
Forwarded from LLM is all you need
#RAG #retriever
Самая простая реализация RAG включает в себя отдельный независимый вопрос и отдельный независимый ответ на него. Но RAG можно настроить так, чтобы он учитывал и всю предыдущую цепочку сообщений (техника называется Contextual retrieval).
Сами по себе LLM уже умеют обрабатывать цепочку сообщений (ее также называют диалог или беседа) - для этого надо использовать Chat Templates (https://t.iss.one/llm_is_all_you_need/62). Но ее нельзя просто так подать в RAG.
Рассмотри такой пример беседы с LLM:
Когда у нас один единственный вопрос в цепочке:
Чтобы это исправить нам нужно предварительно трансформировать последний вопрос примерно в такой вид:
В этом нам поможет LLM:
1. Получаем цепочку сообщений.
2. Просим LLM переформулировать последний вопрос.
3. Этот единственный переформулированный вопрос (и только его) подаем в ретривер, где он превращается в вектор и по нему ищутся чанки.
4. Дальше работаем как обычно.
Самая простая реализация RAG включает в себя отдельный независимый вопрос и отдельный независимый ответ на него. Но RAG можно настроить так, чтобы он учитывал и всю предыдущую цепочку сообщений (техника называется Contextual retrieval).
Сами по себе LLM уже умеют обрабатывать цепочку сообщений (ее также называют диалог или беседа) - для этого надо использовать Chat Templates (https://t.iss.one/llm_is_all_you_need/62). Но ее нельзя просто так подать в RAG.
Рассмотри такой пример беседы с LLM:
- Вопрос: Как звали жену Цезаря?
- Ответ: Корнелия Цинилла.
- Вопрос: А его детей?
Когда у нас один единственный вопрос в цепочке:
Как звали жену Цезаря?, нам с ним ничего дополнительно делать не нужно - подаем в ретривер как есть. Но если мы подадим в ретривер А его детей?, то ничего хорошего он не вернет. Максимум что он найдет так это каких-то (любых) детей, но скорее какую-то общую информацию о детях. Чтобы это исправить нам нужно предварительно трансформировать последний вопрос примерно в такой вид:
Как звали детей Цезаря?.В этом нам поможет LLM:
1. Получаем цепочку сообщений.
2. Просим LLM переформулировать последний вопрос.
messages = [
{"role": "user", "content": 'Как звали жену Цезаря?'},
{"role": "assistant", "content": 'Корнелия Цинилла.'},
{"role": "user", "content": 'А его детей?'},
{"role": "user", "content": 'Выше история переписки в чате и последний вопрос пользователя, который может касаться контекста в этой истории. Переформулируй последний вопрос так, чтобы его можно было понять без истории чата. Постараяся максимально сохранить слова из исходного вопроса. Если вопрос понятен без контекста - напиши его без изменений.'}
]
3. Этот единственный переформулированный вопрос (и только его) подаем в ретривер, где он превращается в вектор и по нему ищутся чанки.
4. Дальше работаем как обычно.
Forwarded from Agentic World
Агенты - это все замечательно, но их невозможно сделать без LLM, а значит хорошее понимание всей ллмной внутрянки дает огромное преимущество в построении классных продуктов.
В блоге vLLM вышла хардкорная статья об их внутренним устройстве. А так как vLLM я горячо люблю, а статья действительно крутая, то сделал ее перевод. Упахался с англицизмами, нюансами и деталями, но оно того стоило🤙
https://habr.com/ru/articles/957748/
В блоге vLLM вышла хардкорная статья об их внутренним устройстве. А так как vLLM я горячо люблю, а статья действительно крутая, то сделал ее перевод. Упахался с англицизмами, нюансами и деталями, но оно того стоило
https://habr.com/ru/articles/957748/
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Внутри vLLM: Анатомия системы инференса LLM с высокой пропускной способностью
Привет! Этот пост — перевод очень хардовой статьи про внутренности vLLM и того, как устроен инференс LLM. Переводить было сложно из-за англицизмов и отсутствия устоявшегося перевода многих терминов,...
Forwarded from DevBrain
Паттерны и анти-паттерны использования паттерн-матчинга в Питоне
Наткнулся на доклад про паттерны паттерн-матчинга 😁 и мне он понравился: Patterns and Anti-Patterns in Python's Structural Pattern Matching
Доклад очень понравился, несмотря на то, что паттерн-матчингом я пользуюсь с самого его появления (кажется в 3.10), я подчерпнул полезное для себя. Что понравилось? Последний пример, где Brett показывает обработку semi-structured JSON. Я вспомнил, что часто внешние API могут возвращать разный формат JSON в зависимости от состояния, но мне в голову никогда не приходила идея обернуть обработку этого в match/case.
Элегантно! 💡
Наткнулся на доклад про паттерны паттерн-матчинга 😁 и мне он понравился: Patterns and Anti-Patterns in Python's Structural Pattern Matching
Доклад очень понравился, несмотря на то, что паттерн-матчингом я пользуюсь с самого его появления (кажется в 3.10), я подчерпнул полезное для себя. Что понравилось? Последний пример, где Brett показывает обработку semi-structured JSON. Я вспомнил, что часто внешние API могут возвращать разный формат JSON в зависимости от состояния, но мне в голову никогда не приходила идея обернуть обработку этого в match/case.
Элегантно! 💡
YouTube
PyBeach 2025 - Brett Slatkin - Patterns and Anti-Patterns in Python's Structural Pattern Matching
Have you used Python's match statement? How do you decide when to use match instead of a typical if/elif/else statement? Although structural pattern matching functionality has been available in Python for years, many Python developers still aren't sure about…
Forwarded from e/acc
Вся лента забита цитатами из интервью Андрея Карпаты, я послушал на одном дыхании и рекомендую вам тоже. Это самая взвешенная, но при этом исходящая из глубокого понимания позиция относительно AGI, ASI и влиянии ИИ на мир.
Не буду пересказывать все интервью, но первый час примерно это прям-то таки детальный роадмап по тому что необходимо решить, построить и сделать чтобы получить действительно полезный ИИ, который может выполнять любую работу, которую умеет делать человек:
- уход от запоминания (и моделей в триллионы параметров) к генерализации концептов и принципов, с возможность "посмотреть в базе" какой-то факт когда это будет нужно
- реальная долговременная память, умение интернализировать, рефлексировать знания в долгосрочную базу, лора-адаптер или напрямую в веса модели
- он называет короткую память у людей фичей а не багом, ибо она помогает обобщать, фокусируясь на общих паттернах, а не на деталях; в отличие от LLM, которые отвлекаются идеальной памятью на огромные данные, что мешает глубокому абстрактному пониманию
- развитие агентов, так же как и интернета, займет еще 10 лет, каждый год постепенно автоматизируя и упрощая разные задачи и профессии, но интеграция этого в глобальный ВВП займет время, а не будет спонтанным взрывом
жутко рекомендую!
P.S. а параллельно с этим Илон Маск сегодня утром в очередной раз объявил о неизбежности AGI в ближайшие годы, мол, Grok будет ИИ-рисечером не хуже Андрея :)
Не буду пересказывать все интервью, но первый час примерно это прям-то таки детальный роадмап по тому что необходимо решить, построить и сделать чтобы получить действительно полезный ИИ, который может выполнять любую работу, которую умеет делать человек:
- уход от запоминания (и моделей в триллионы параметров) к генерализации концептов и принципов, с возможность "посмотреть в базе" какой-то факт когда это будет нужно
- реальная долговременная память, умение интернализировать, рефлексировать знания в долгосрочную базу, лора-адаптер или напрямую в веса модели
- он называет короткую память у людей фичей а не багом, ибо она помогает обобщать, фокусируясь на общих паттернах, а не на деталях; в отличие от LLM, которые отвлекаются идеальной памятью на огромные данные, что мешает глубокому абстрактному пониманию
- развитие агентов, так же как и интернета, займет еще 10 лет, каждый год постепенно автоматизируя и упрощая разные задачи и профессии, но интеграция этого в глобальный ВВП займет время, а не будет спонтанным взрывом
жутко рекомендую!
P.S. а параллельно с этим Илон Маск сегодня утром в очередной раз объявил о неизбежности AGI в ближайшие годы, мол, Grok будет ИИ-рисечером не хуже Андрея :)
Forwarded from КОД ИБ: информационная безопасность
С ИИ всё стало умным, в том числе и… малварь — история появления GenAI-полиморфных вирусов #опытэкспертов
За два года вокруг "расцензуренных" LLM вырос целый подпласт киберугроз. Но если WormGPT/FraudGPT это уже банальные подсказки для фишинга и помощник для скрипт-кидди, то куда интереснее случаи, где модель встраивается в сам цикл атаки и генерирует действия/код "на лету".
Борис Захир, независимый эксперт и автор блога "Борис_ь с ml", выделил в статье четыре интересных кейса, от PoC до боевого инцидента, и сделал вывод — GenAI уже не просто декорация, а значимый элемент киллчейна.
➡️ Читать статью на Хабре
В материале упоминаются и довольно известные инциденты — EchoLeak и Lethal Trifecta, приведены их схемы реализации. И на их фоне становится понятно, чем кардинально отличаются другие, уже менее популярные атаки — BlackMamba, PromptLock, s1ngularity. И рассмотрен также пример раздутой хайпом ситуации, на самом деле не имеющей пока серьезной значимости — это SkyNet.
Главное отличие EchoLeak от BlackMamba и прочих из этой тройки, которые эксперт предлагает называть GenAI-полиморфными вирусами — это не прямая реализация вредоносного действия с помощью тула агента, а использование GenAI для создания конкретных кусочков малвари: кода дискаверинга секретов, шифрования файлов, написание рансом-сообщения жертве.
В самой же статье вы найдете подробную схему реализации (с тактиками/техниками) каждого инцидента, ответы на вопросы об эффективности таких методов атаки и о том, почему же все-таки это работает и обходит защиту, а также взгляд эксперта на перспективы развития таких вирусов.
✏️ Статью написал Борис Захир, независимый эксперт и автор блога "Борис_ь с ml"
GenAI сегодня становится не просто ассистентом для скрипткидди, но и элементом киллчейна, выполняя задачи по генерации вредоносного кода "на лету", уже внутри контролируемого контура — это полноценный новый вектор атаки.
За два года вокруг "расцензуренных" LLM вырос целый подпласт киберугроз. Но если WormGPT/FraudGPT это уже банальные подсказки для фишинга и помощник для скрипт-кидди, то куда интереснее случаи, где модель встраивается в сам цикл атаки и генерирует действия/код "на лету".
Борис Захир, независимый эксперт и автор блога "Борис_ь с ml", выделил в статье четыре интересных кейса, от PoC до боевого инцидента, и сделал вывод — GenAI уже не просто декорация, а значимый элемент киллчейна.
В материале упоминаются и довольно известные инциденты — EchoLeak и Lethal Trifecta, приведены их схемы реализации. И на их фоне становится понятно, чем кардинально отличаются другие, уже менее популярные атаки — BlackMamba, PromptLock, s1ngularity. И рассмотрен также пример раздутой хайпом ситуации, на самом деле не имеющей пока серьезной значимости — это SkyNet.
Главное отличие EchoLeak от BlackMamba и прочих из этой тройки, которые эксперт предлагает называть GenAI-полиморфными вирусами — это не прямая реализация вредоносного действия с помощью тула агента, а использование GenAI для создания конкретных кусочков малвари: кода дискаверинга секретов, шифрования файлов, написание рансом-сообщения жертве.
В самой же статье вы найдете подробную схему реализации (с тактиками/техниками) каждого инцидента, ответы на вопросы об эффективности таких методов атаки и о том, почему же все-таки это работает и обходит защиту, а также взгляд эксперта на перспективы развития таких вирусов.
Please open Telegram to view this post
VIEW IN TELEGRAM