Интересное что-то
517 subscribers
2.71K photos
253 videos
138 files
4.51K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
Forwarded from Neural Kovalskii
SGR Deep Research топ 3 в open-source!

Пока кипит работа по финализированнию наших тестов и выявлению лучшей архитектуры агента для небольших и недорогих моделей

Хочу с вами поделится очень крутыми новостями!

Бенчмарк и новые фичи!

Что было сделано:
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 не нужно делать!
Но если очень хочется можно
Мы всех слышим и умеем читать пейперы =)
Рейтинг моделей по распознаванию англоязычных документов

Для сравнения выкладываю рейтинг по английским документам. По нему видно, что в среднем распознается 82% информации, тогда как для русскоязычных текстов - это 68%. Конечно, не совсем корректно их сравнивать, но это хотя бы что-то.

Метрики из таблицы:
Извлечение ключевой информации (KIE): Оценка способности извлекать структурированную информацию из документов
Визуальные вопросы и ответы (VQA): Проверка понимания содержимого документа через вопросы
Оптическое распознавание символов (OCR): Измерение точности распознавания текста в различных типах документов
Классификация документов: Оценка возможностей категоризации
Обработка длинных документов: Оценка производительности на объёмных документах
Извлечение таблиц: Проверка понимания и извлечения табличных данных
Оценка достоверности: Измерение надёжности и калибровки прогнозов модели


Еще есть интересная колонка "цена" в центах. Gemini-flash - в топе по этому параметру
Forwarded from Женя Янченко
Давайте обсудим подходы к удалению в БД?

Я встречала следующие:

➡️ Hard delete

Когда запись прямо удаляется SQL-запросом:
DELETE FROM … WHERE …

Главное не забыть WHERE 😅

Не встречала, чтобы такой подход применяли к бизнесовым таблицам, где удалять данные может сам пользователь.

🤍 Бизнесовая причина:
Бизнес не любит терять свои данные , плюс для многих сфер важна безопасность и сохранение всех данных. Например, в финтехе.

🤍 Техническая причина:
Таблицы часто связаны через foreign keys, и если мы удаляем одну запись, то нужно удалять или сетить null у связанных записей. Цепочка FK может быть сложная -> легко накосячить и удалить лишнего.

Hard delete могут использовать для технических данных. Например, в transactional outbox удалять отправленные записи из таблицы outbox. Или удалять технические логи спустя 3-6 месяцев.

➡️ Soft delete

Это самый распостраненный подход. В таблице заводится служебное поле для метки удаления (например, boolean is_deleted, по-умолчанию false). Если строка удаляется, то ей ставится is_deleted = true.

На проектах, где я работала, для бизнесовых таблиц использовался именно этот подход.

Какие у него есть подводные камни:

💋 Можно забыть добавить в запрос поиска или обновления условие and is_deleted = false

💋 Если уникальный индекс на какое-то поле не учитывает удаление, то даже после soft-удаления записи создать ещё одну такую же нельзя. Иногда это правильно с точки зрения бизнеса, а иногда нет. Если нет, то нужно делать индекс уникальности с учетом только неудаленных записей.

💋 Важно не спутать техническое удаление с бизнес-состоянием

Например, у нас поле для метки удаления называлось active. А потом на проекте появились новые сущности — тарифы. У тарифа была дата начала, дата окончания и признак активности. К активным тарифам могли подключаться новые пользователи. При этом неактивные тарифы не удалялись, их можно было отдельно посмотреть. А признак удаления нужен был для случаев, когда менеджер ошибся при создании и потом просто удалил неправильную запись.


Бывает, что у сущностей есть статусная модель. Например, NEW, IN_PROGRESS, COMPLETED. И в нее добавляют DELETED.

Иногда это оправданно с точки зрения бизнес-процесса, а иногда нет, и лучше сделать метку удаления отдельным полем. Тут уже нужно по ситуации смотреть)

💋 Если удаляют часто и много, то таблица разрастается ненужными данными. В этом случае старые удаленные записи можно переносить в отдельное архивное хранилище.

➡️ Soft delete + таблица с историей

Стандартно в таблицах добавляют служебное поле с датой создания:
created_at
Если нужно хранить данные об авторе, то ещё:
created_by

Помню, пришел к нам аналитик и говорит:
— Нужно отображать ещё информацию об обновлении


Тоже стандартная штука, добавили updated_at, updated_by

Аналитик пришел во второй раз и говорит:
— Нужно ещё сохранять, кто и когда запись удалил


Ок, добавили deleted_at, deleted_by.

Когда аналитик пришел в третий раз, мы поняли, что пора делать отдельную таблицу с историей 😃

Таблица с историей содержит:
- тип операции (CREATE/UPDATE/DELETE)
- дату и время совершения операции
- автора
- установленные значения полей основной таблицы

То есть когда запись создается, то в историческую таблицу пишем значения полей, тип = CREATE, таймстамп и автора.

Когда запись меняют, в историческую таблицу пишем новые значения полей, тип = UPDATE, таймстамп и того, кто внес изменения.


Таким образом, в основной таблице лежит актуальное состояние, а всю историю изменений можно отдельно посмотреть.

При этом метку удаления в основной таблице лучше оставить для удобных выборок.

Конечно, исторические таблицы нужны только в особых случаях.

➡️ Еще читала о подходе, который может применяться для удаления персональных данных. Когда запись оставляют физически, но все поля с ПД сетят в null. Таким образом не ломаются связи, но данные удаляют.

Кстати, про картинку у поста. Когда нужно что-то удалить из БД (на тестовом стенде, конечно), то сначала пишу 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

⦁ Смотрите на то, где команда уже применяет ИИ в работе
⦁ Ищите, чем отличаются паттерны успешных коллег – стройте задания на этом
⦁ Не давайте делать с нуля, а дайте средненькое решение и попросите что-то добавить (не прося "исправить")
⦁ Часть гринфлагов выше – универсальны, можете забирать себе
Forwarded from WBTECH
Вы просили — мы сделали 🤝

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.
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 переформулировать последний вопрос.
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/
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevBrain
Паттерны и анти-паттерны использования паттерн-матчинга в Питоне

Наткнулся на доклад про паттерны паттерн-матчинга 😁 и мне он понравился: Patterns and Anti-Patterns in Python's Structural Pattern Matching
Доклад очень понравился, несмотря на то, что паттерн-матчингом я пользуюсь с самого его появления (кажется в 3.10), я подчерпнул полезное для себя. Что понравилось? Последний пример, где Brett показывает обработку semi-structured JSON. Я вспомнил, что часто внешние API могут возвращать разный формат JSON в зависимости от состояния, но мне в голову никогда не приходила идея обернуть обработку этого в match/case.

Элегантно! 💡
Forwarded from e/acc
Вся лента забита цитатами из интервью Андрея Карпаты, я послушал на одном дыхании и рекомендую вам тоже. Это самая взвешенная, но при этом исходящая из глубокого понимания позиция относительно AGI, ASI и влиянии ИИ на мир.

Не буду пересказывать все интервью, но первый час примерно это прям-то таки детальный роадмап по тому что необходимо решить, построить и сделать чтобы получить действительно полезный ИИ, который может выполнять любую работу, которую умеет делать человек:

- уход от запоминания (и моделей в триллионы параметров) к генерализации концептов и принципов, с возможность "посмотреть в базе" какой-то факт когда это будет нужно
- реальная долговременная память, умение интернализировать, рефлексировать знания в долгосрочную базу, лора-адаптер или напрямую в веса модели
- он называет короткую память у людей фичей а не багом, ибо она помогает обобщать, фокусируясь на общих паттернах, а не на деталях; в отличие от LLM, которые отвлекаются идеальной памятью на огромные данные, что мешает глубокому абстрактному пониманию
- развитие агентов, так же как и интернета, займет еще 10 лет, каждый год постепенно автоматизируя и упрощая разные задачи и профессии, но интеграция этого в глобальный ВВП займет время, а не будет спонтанным взрывом

жутко рекомендую!

P.S. а параллельно с этим Илон Маск сегодня утром в очередной раз объявил о неизбежности AGI в ближайшие годы, мол, Grok будет ИИ-рисечером не хуже Андрея :)
С ИИ всё стало умным, в том числе и… малварь — история появления GenAI-полиморфных вирусов #опытэкспертов

GenAI сегодня становится не просто ассистентом для скрипткидди, но и элементом киллчейна, выполняя задачи по генерации вредоносного кода "на лету", уже внутри контролируемого контура — это полноценный новый вектор атаки.


За два года вокруг "расцензуренных" LLM вырос целый подпласт киберугроз. Но если WormGPT/FraudGPT это уже банальные подсказки для фишинга и помощник для скрипт-кидди, то куда интереснее случаи, где модель встраивается в сам цикл атаки и генерирует действия/код "на лету".

Борис Захир, независимый эксперт и автор блога "Борис_ь с ml", выделил в статье четыре интересных кейса, от PoC до боевого инцидента, и сделал вывод — GenAI уже не просто декорация, а значимый элемент киллчейна.

➡️ Читать статью на Хабре

В материале упоминаются и довольно известные инциденты — EchoLeak и Lethal Trifecta, приведены их схемы реализации. И на их фоне становится понятно, чем кардинально отличаются другие, уже менее популярные атаки — BlackMamba, PromptLock, s1ngularity. И рассмотрен также пример раздутой хайпом ситуации, на самом деле не имеющей пока серьезной значимости — это SkyNet.

Главное отличие EchoLeak от BlackMamba и прочих из этой тройки, которые эксперт предлагает называть GenAI-полиморфными вирусами — это не прямая реализация вредоносного действия с помощью тула агента, а использование GenAI для создания конкретных кусочков малвари: кода дискаверинга секретов, шифрования файлов, написание рансом-сообщения жертве.

В самой же статье вы найдете подробную схему реализации (с тактиками/техниками) каждого инцидента, ответы на вопросы об эффективности таких методов атаки и о том, почему же все-таки это работает и обходит защиту, а также взгляд эксперта на перспективы развития таких вирусов.

✏️ Статью написал Борис Захир, независимый эксперт и автор блога  "Борис_ь с ml"
Please open Telegram to view this post
VIEW IN TELEGRAM