llm_under_hood | Unsorted

Telegram-канал llm_under_hood - LLM под капотом

12419

Канал про разработку продуктов на базе LLM/ChatGPT. Выжимка важных новостей и разборы кейсов.

Subscribe to a channel

LLM под капотом

Benchmark qwen/qwq-32b - она может и больше!

Итак, новая qwen/qwq-32b на моем reasoning бенчмарке показала себя лучше, чем qwen-2.5-72b-instruct и предыдущие 32B версии от Qwen.


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓
┃ Model ┃ Score ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━┩
│ openai/o3-mini-2025-01-31 │ 76% │
│ anthropic/claude-3.7-sonne… │ 70% │
│ openai/o1-2024-12-17 │ 70% │
│ deepseek/deepseek-r1 │ 66% │
│ deepseek/deepseek-r1-disti… │ 60% │
│ .... │ │
│ >> qwen/qwq-32b << │ 40% │
│ qwen/qwen-2.5-72b-instruct │ 39% │
│ qwen/qwen2.5-32b-instruct │ 36% │
│ qwen/qwen-2.5-coder-32b-in… │ 36% │


Это уже очень хорошо. Но есть нюанс - эта модель может больше, если бы ей не мешал разброд и шатание с интерфейсами вокруг reasoning моделей.

Смотрите, для простоты бенчмарка, я преимущественно тестирую модели через OpenRouter через интерфейс OpenAI SDK. Этот подход работает прекрасно для обычных моделей. Можно даже использовать Fireworks провайдера, который поддерживает нормальный Structured Output.

В теории - подаем промпт в OpenAI SDK вместе с ожидаемой схемой и получаем ответ в виде объекта. OpenRouter передаст все в Fireworks и вернет ответ.

На практике же все взрывается с ошибкой Error: 'NoneType' object is not iterable в глубине OpenAI SDK. А все почему? Да провайдеры не могут договориться и определиться, как нужно получать у модели reasoning, а как результаты вычислений. Более того, они просто не знают, чего ожидать от своей модели.

В итоге, когда я просил reasoning модель подумать и ответить в виде схемы (и отправлял схему), причем в схеме уже было место для Chain of Thought, то qwen/qwq-32b просто выдавала свои размышления с ответом в think, а сам response оставляла пустым. Прослойка в виде OpenRouter/Fireworks такого не ожидала. В итоге мне приходил такой ответ:


{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "",
"reasoning": "{ \"chain_of_thought\": [ \"To determine how many ...",
"refusal": null,
"role": "assistant"
},
"native_finish_reason": "stop"
}
],


Ну а текущая OpenAI SDK не знает про поле reasoning, она ждет content по схеме. Пришлось переписывать клиента, чтобы автоматически разрешать такие проблемы.

А почему я говорю, что модель могла бы и лучше?

Да потому, что в паре простых вопросов мне приходил ответ, где внезапно reasoning текстом, а content - это не StructuredOutput, а markdown. То есть тут поведение не только нестабильное, но и constrained decoding не пахнет.


{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "```json\n{\n \"short_thought_steps...```",
"reasoning": "Okay, let me figure...",
"refusal": null,
"role": "assistant"
},
"native_finish_reason": "stop"
}
],



Возможно новый стандарт ResponseAPI от OpenAI позволит исправить этот бардак и задать нормальный стандарт работы с reasoning моделями и SO. Но это займет какое-то время.

А пока можно только порадоваться за qwen/qwq-32b, которая подняла планку качества 32B моделей невзирая на путаницу в интерфейсах.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Победители Enterprise RAG Challenge!

Я поздравляю всех победителей и участников. Мы сейчас не только классное соревнование устроили, но и сделали прямо громадный research по практическому сравнению эффективности разных архитектур на конкретной бизнес-задаче. Плюс получили живой опыт работы документами и PDF (кто бодался с отчетом на 1000 страниц - ставьте 🤝)

Отчеты, ссылки, посты, leaderboards, ground truth - все это мы будем выкладывать и дублировать в ближайшие недели.

Итак, победители. Теоретический максимум - 133 (100 за ответы и 33 за retrieval)

IBM WatsonX AI Track 🏆

3. nightwalkers - 356ef42c: 96.7.
Векторный RAG с deepseek-r1-distill-llama-70b и granite-embedding-107m-multilingual embeddings

2. A.Rasskazov/V.Kalesnikau - efabd48e: 109.3
multi_agent_ibm_openai - meta-llama/llama-3-405b-instruct, ibm/granite-embedding-107m-multilingual, text-embedding-3-small, gpt-4o-mini

1. Ilia Ris - 25fabf22: 120.3

PDF parsing with heavily modified Docling library + Dense retrieval + Router + Parent Document Retrieval + LLM Reranking + SO CoT + SO reparser + Majority vote (Self-Consistency); llm = llama-3.3 70b from IBM WatsonX

Main Track 🏆

3. hopeless - 6b0d78ba: 117.5
gpt-4o-2024-08-06
Dynamic Structured Output + SEC EDGAR Ontologies
Query Expansion with selecting indicators on CBOW similarity
Majority Selection for several runs (works for pages and final answers)
Chunking by pages only with focus on balancing pages vs tokens

2. Emil Shagiev - 0a878232: 121.6
gpt-4o-mini-2024-07-18, gpt-4o-2024-08-06, o3-mini-2025-01-31
1. Query Expansion
2. Search relevant pages using with fast and cheap LLM
3. Answer questions
4. Finalize answers

1. Ilia Ris - 320a7d36: 121.6
o3-mini
PDF parsing with heavily modified Docling library + Dense retrieval + Router + Parent Document Retrieval + LLM Reranking + SO CoT + Majority vote (Self-Consistency); llm = o3-mini

Еще раз поздравляю всех!

А вообще - что вам больше всего запомнилось в этом соревновании? Я думаю про третий раунд, уже с reasoning и поглубже в бизнес. Надо такое?

Ваш, @llm_under_hood 🤗

PS: Если еще хотите поучаствовать ради опыта в соревновании, то еще не поздно. Submission API я пока выключать не буду - пара команд попросила отсрочку до следующей недели.

Читать полностью…

LLM под капотом

На чем запускать локальные модели?

В нашем комьюнити очень много людей и команд с практическим опытом локального разнообразных систем с LLM под капотом. Это видно по RAG решениям на ERC, обсуждениям в чате и представлениям в группе курса.

А давайте поговорим про то, как вы запускаете свои системы для пользователей? Речь не столько про запуск через ollama на ноутбуке, сколько про разворачивание системы для 5-30 одновременных пользователей (скорее throughput, чем latency).

- Какие модели используете?
- Как заводите Structured Outputs (если используете)?
- Какое железо и inference framework под капотом, с какими параметрами?
- Сколько tokens per second получается выжать и с какими контекстами.

Но, самое главное, как оно вообще вам на практике?

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Самые популярные архитектуры в Enterprise RAG Challenge

Вот вам краткая выжимка того, что люди использовали во время Enterprise RAG Challenge round 2. Она пока без учета того, насколько точными были эти решения в итоге.

Key Takeaways

- RAG is near-universal. Almost every approach tries to solve the “long PDF → targeted answer” problem by chunking, storing embeddings, retrieving relevant sections, then letting the model “read” only those sections.
- Structured prompts (with JSON/Pydantic) were popular to ensure consistent outputs—particularly for numeric or Boolean questions that required a definite format.
- Chain-of-thought or multi-step reasoning is common, sometimes with multiple LLM calls for expansions, validations, or final re-checks.
- Performance + Cost trade-offs surfaced: several teams used “fast & cheap” LLMs for search or chunk-labelling, then a heavier model (e.g., GPT-4o) for final answers.

Most submissions combined:
- Document parsing (Docling, PyMuPDF, or similar),
- Vector or keyword-based retrieval (FAISS, Qdrant, BM25, etc.),
- Iterative LLM-based reasoning (chain-of-thought or agent-like flows),
- Structured response schemas (Pydantic or JSON).

Despite the variety of LLM families (OpenAI GPT-4o variants, Llama, Gemini, Qwen, DeepSeek, IBM Granite, Microsoft phi, etc.), the underlying RAG pipeline structure remained strikingly consistent: parse PDFs, embed or index them, fetch relevant chunks, and prompt an LLM to produce carefully formatted answers.

А то, насколько хорошо все эти архитектуры показали себя в рамках соревнования - мы узнаем уже в эту пятницу.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Если вы написали пост про свое участие в Enterprise RAG Challenge, киньте, пожалуйста, ссылку на него в комментарии сюда.

За opensource решений в Github - с меня пиво)

Я потом соберу сводную публикацию, чтобы ничего не упустить.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

AI and Context - директор AI GTM из Intel рассказывает интересное на Enterprise RAG Challenge

Ссылка на встречу - в дискорде https://discord.gg/dN2u38kC

Ваш, @llm_under_hood 🤗

PS: Если хотите узнать что-то у него про бизнес с AI в Европе - задавайте вопросы в чате в discord

Читать полностью…

LLM под капотом

LLM Benchmark Anthropic Claude 3.7 - внезапно хорошо

Все знают, что Anthropic Claude очень плохо ведет себя на моих бенчмарках. В июле прошлого года две модели еще были в top 10, но потом их вытеснили более смышленые модели, которые не стояли на месте.

Но вот прошло время. Сменилась версия Claude и сменился сам бенчмарк - он теперь учитывает способность моделей к рассуждению.

anthropic/claude-3.7-sonnet на данный момент лучше всех моделей gpt-4o (запускал я его пока с дефолтовыми параметрами через OpenRouter). И это несмотря на то, что Anthropic до сих пор не поддерживает Structured Outputs!

Как я работаю с моделями без нормального SO? Отправляю им Pydantic схему прямо в виде питона, плюс отправляю JSON пример с заполненными полями. JSON Schema не отправляю - она только запутает модель, если ее специально не обучали.

Так вот, у anthropic/claude-3.7-sonnet не было ни одной ошибки в следовании формату на довольно нагруженных схемах! А когда модель точно следует формату (даже без перил в виде constrained inference), то расположение элементов в ответе как раз то, которое нам нужно. И если мы в схеме проложили свои чеклисты и CoT цепочки, то LLM будет на них опираться.

Схемы с онтологиями на 150 Literals я бы в Claude не стал отправлять (как это переваривает OpenAI или vllm+outlines/xgrammar), но что-то небольшое тут работает очень хорошо.

Ваш, @llm_under_hood 🤗

PS: Бенчмарк пока еще черновой. Туда загружено только 20% кейсов.

Читать полностью…

LLM под капотом

Enterprise RAG Challenge - тестовые данные и LLM для запуска бесплатно

ERC - это дружеское соревнование на лучший в мире RAG по годовым отчетам компаний. У нас уже больше 300 заявок, на keynote расскажет про раги в бизнесе директор Intel по области AI GTM, а IBM спонсирует дополнительный набор призов. Прочитать можно тут.

У нас уже готовы тестовые данные для подготовки к раунду (PDF и вопросы в новом формате): https://rag.timetoact.at/data/r2.0-test/ А в соседней папке 27 февраля появятся официальные данные для соревнования.

Submission API, куда надо будет отправлять свои ответы, развернут на https://rag.timetoact.at. Можно уже для тренировки попробовать сгенерировать ответы и загрузить их в это API.

Теперь, насчет LLM для запуска. IBM выделили отдельный набор призов для тех, кто создаст RAG систему на основе моделей из WatsonX AI. А на WatsonX у них есть из интересного модели вроде llama-3-3-70b-instruct, llama-3-405b-instruct, llama-3-2-90b-vision-instruct, mistralai/mistral-large и deepseek-r1-distill-llama-70b (ну и пучок embedding models). Список моделей есть тут плюс deepseek-r1-distill-llama-70b сверху.

Так вот, IBM думает предоставить бесплатный доступ к этим моделям для участников соревнования. Это пока не 100%, но попросить уже можно сейчас. Для этого надо зайти в дискорд в канал ibm-track и ответить на последнее сообщение от Daniel (IBM), попросив доступ к inference API WatsonX AI, кратко сказав, какие интересны модели и какая планируется архитектура.

Structured Outputs у них, к сожалению, нет, но c llama/mistral/deepseek и embedding моделями результат показать можно. deepseek-r1-llama-70B может отрабатывать CoT, если ее использовать через outlines или аналог.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Coding for AI - Как я быстро запускаю сервера с AI сервисами

Меня очень радует, когда в небольшой слайс времени и внимания получается упихнуть заметный объем работ за счет эффективного использования современных технологий. Сейчас как раз случился аналогичный пример - не могу не поделититься.

Итак, нужно быстро завести и запустить с нуля сервер с парой AI сервисов на разных языках, разными зависимостями, нормальным HTTPS, настройками network и SystemD? Чтобы все конфигурации были версионированы, применялись автоматически, а в случае проблем AI сервер можно было перезагрузить на любую предыдущую конфигурацию.

Плюс, естественно, надо дать доступ разработчикам к deployment pipelines, чтобы они могли сами выкатывать новые версии. И чтобы новые сервисы, DEV/PROD слоты втыкались в сервер без проблем, а сам AI сервер с потрохами можно было при желании перенести на другое железо или переупаковать в виртуальную машину.

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

Как все это делается?
- Разработчики заранее сами разрабатывают сервисы так, как им это удобно. Используют ChatGPT/Claude и их друзей. Один сервис на Python, другой в данном случае - Golang. Не суть столь важно
- Заводим виртуальную машину, где быстрее и проще, переключаем на NixOS.
- Кидаем ChatGPT в проект “DevOps Wizard” краткое описание сервисов, путей, необходимых ресурсов и просим одним файлом описать виртуальную машину.
- копируем выхлоп на 100 строчек, проглядываем глазами и запускаем команду nixos-rebuild switch. Через десяток секунд все будет развернуто, в OS установятся нужные зависимости, добавятся нужные ключи инженеров и переменные окружения, появятся SystemD слоты для запуска самих сервисов, Reverse Proxy получит HTTPS сертификаты и настроит раутинг, а порты - откроются.

В чем фишка? Проект “DevOps Wizard” - это просто типовая инструкция, которая велит LLM-ке подумать и написать аккуратную конфигурацию для NixOS. Там есть пара примеров разворачивания аналогичных систем просто для того, чтобы LLM-ка видела привычные правила форматирования и названия переменных.

Плюс поскольку все проекты уже спокойно укладываются в портфель из известных кейсов и паттернов, то и конфигурация достаточно типизированная (если только не нужно возиться с хитростями CUDA).

А если есть host.nix, то полностью перенастроить сервер на новую конфигурацию - это дело секунд.

Технология на базе NixOS настолько безотказная, простая и работающая (на моих кейсах), что все просто работает. Главный недостаток системы - по-своему упоротый синтаксис и относительная нишевость (админы обычно знают про Ansible, Chef или puppet). Но если бОльшую часть работы по возне с Nix DSL берет на себя LLM, а результаты налицо, то это мало кого волнует.

В итоге - одно удовольствие быстро разворачивать AI сервисы, если вдруг это надо срочно сделать самому.

А у вас есть свои примеры технологий, которые доставляют сплошную радость от использования?

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Как работать с информацией при построении своих RAG систем?

Я сейчас собираю материал для дополнительного видео к курсу, чтобы ответить на вопрос "Ну собрали мы онтологию для поиска информации по ответу пользователя, а дальше что?" И нашел фотографию, которая наглядно описывает весь процесс.

Раньше так люди исследования вели и книги писали! И умудрялись умещать кванты знаний в странички блокнотов и библиотечные карточки. Zettelkasten растет оттуда (и немного - Obsidian). И вот эта концепция манипулирования большими объемами информации через небольшие структурированные ссылки, цитаты и заметки как раз идеально ложится на работу с текстовыми LLM.

Разве что мы теперь можем не по десятку карточек в минуту перетасовывать теперь, а по десятку тысяч.

Ну а Domain-Driven Design как раз описывает процессы копирования человеческих процессов подобных данному в цифру. DDD уделяет очень много внимания языку и смысловым концепциям (Ubiquitous Language, Bounded Context, Context Mapping итп) и LLM-ки обучены хорошо работать с человеческим миром через языки.

Использование DDD + LLM для отражения подходящих человеческих процессов в цифре - это весьма мощный и удобный инструмент.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Старожилы канала поймут и этот мем и вот этот комментарий в чате:

Нам схема с русскими подписями в кейсе + 8% к точности дала


Ваш, @llm_under_hood 🤗

PS: Если впервые заходите в чат, пожалуйста, не игнорируйте запрос от бота канала. Он бдит, банит ботов и не понимает шуток.

Читать полностью…

LLM под капотом

Что лучше - ставить вопрос в промпте до текста или после текста?

В прошлом посте про новые бенчмарки я написал:

Кстати, обратим внимание, что я вопрос ставлю до исходников файла. Это мне портит кэш, зато позволяет в среднем облегчить жизнь моделям и повысить качество на несколько процентов.

На что в чате возник резонный вопрос:

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


Это гипотеза, а гипотезы можно и нужно проверять. Поэтому я взял текущие coding задачи (там больше всего контекста) с вопросом до кода и добавил туда второй вариант промпта - чтобы вопрос был в конце. Плюс сделал градацию ошибок более плавной, как в других категориях. И добавил "Averages" внизу.

Итак, категория prefix - это точность моделей на задачах с вопросом в начале. Postfix - точность моделей на тех же задачах, но вопрос идет в конце.

Пока вышло, что в среднем по моделям промпты с вопросом в самом начале набирали 62%, а промпты с вопросом в конце - 55%.

Разница есть, но я не сказал бы, что она пока статистически значима - слишком мало тестов в этой категории. Я потом еще добавлю в эти категории пару задачек с большим контекстом. Может, картина станет яснее.

А пока можете предварительно посмотреть, как ведет себя ваша любимая модель, если ставить вопрос в начале или в конце промпта.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Deepseek V3, Qwen-Max/Plus/Turbo в бенчмарке v2

Продолжаю портировать тесты из AI кейсов во вторую версию моего личного бенчмарка LLM на бизнес-задачах.

Добавил Deepseek V3 (aka deepseek-chat), который на reasoning задачах держится удивительно хорошо, только чуть хуже DeepSeek r1. Он на полную катушку использует слоты для reasoning в checklists/CoT. А Structured Output в исполнении Fireworks помогает придерживаться схемы.

Да, в новом бенчмарке, у каждой модели теперь есть возможность пройти по custom chain of thought, который оптимизирован для конкретной задачи. И это дается вдобавок к внутренним reasoning tokens, которые есть у новых моделей.

Модели могут отказаться использовать возможность для размышления и сэкономить tokens. Но те, кто следуют - повышают свою точность.

Мы эти подходы используем во всех новых проектах для буста качества (в обмен на небольшое количество с пользой потраченных tokens), поэтому в бенчмарке большая часть тестов уже идет с таким reasoning.

Еще добавил gemini-2.0-flash, Qwen-Max/Plus/Turbo.

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

Ваш, @llm_under_hood 🤗

PS: Бенчмарк личный, закрытый, в черновой версии. Кому хочется стабильности и разных моделей см полтора года отчетов по не-reasoning бенчмарку LLM на бизнес задачах.

Читать полностью…

LLM под капотом

Краткая история использования ChatGPT o1 pro для создания ассистента

С утра мне в голову пришла идея - а что, если создать свою ChatGPT, которая будет хранить заметки и списки вещей для поездок? Чтобы можно было просить компилировать списки из старых поездок и сверяться с ними голосом во время сборов.

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

Запустил новую сессию и в течение дня уточнял задачу и критиковал результаты. Один пункт - один запрос.

(1) Начал с запроса о минимальном API для бэкенда заметок и списков: нужны основные методы и эндпойнты.
(2) Посмотрел результаты и уточнил, что не требуется «голый CRUD». Предпочтение — «LLM-friendly» методы, ориентированные на логику, плюс заранее определённые теги.
(3) Попросил рассмотреть идею объединить заметки и списки в единую сущность. «Комментарии» станут обычными пунктами со специальным статусом, а хранение будет через виртуальную файловую систему. Естественно, переписать все под новую парадигму.
(4) Неплохо. А если добавить иерархические идентификаторы (в стиле «1.1.1»), чтобы каждый список был древовидной структурой?
(5) Так, а теперь добавим логику транзакций. Пусть LLM может отправлять в API все изменения одним батчем с откатом при ошибке.
(6) Напиши-ка мне пример реализации на Python (в одном файле) с Pydantic и тестами на pytest.
(7) Ничего так. Но лучше переписать в Go, с хранением списков в памяти и JSON-файлах, используя метод ApplyTransaction.
(8) ядро есть, теперь оберни все в API, а данные сохраняй на диск
(9) А теперь нужно это все описать в виде документации для LLM-ассистента — как тот может считывать списки, добавлять или изменять пункты, менять статус, всё через один транзакционный вызов.
(10) А теперь сделай мне OpenAPI спецификацию, я ее загружу в CustomAction.
(11) Финальный аккорд - собери выжимку разговора за день — этот список тезисов и последовательность шагов, чтобы передать общую картину разработки бэкенда для семейного ассистента.

В промежутке между 10 и 11 я еще скомпилировал бинарь, запустил его на сервере и вытащил его по секретному url. Этот url вместе с инструкцией вставил в CustomAction и добавил в своего ChatGPT. Написал только 3 строчки кода - handle_path в прокси сервере.

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

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Ловите второе preview бенчмарка v2 c Mistral 3 и DeepSeek-Llama-70B

Это - превью второй версии моего личного бенчмарка. Оно будет полезно тем командам, кто прошел курс и присматривается к возможностям новых LLM за один промпт ставить сложную многоходовую задачу и добиваться ее.

Тесты в нем собраны из проектов внедрения AI/LLM в бизнес задачах за последний год. Первоначальная задача бенчмарка - оценивать потенциал моделей для разворачивания систем с LLM под капотом на них.

Важно: плохая оценка на текущей стадии говорит не о том, что модель плохая, а просто что она не осилила все задачи за один промпт. На текущей стадии сбора бенчмарка я пока постепенно добавляю cамые сложные задачи из кейсов, а самые простые - выкидываю. Задача сейчас - набрать запас прочности бенчмарка, чтобы не было, как с первой версии, когда все топовые модели толпились на уровне выше 95%.

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

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

Пара интересных инсайтов:
(1) дистиллят DeepSeek r1 llama-70B пока выглядит очень бодро. Но его обязательно нужно использовать со structured output
(2) Microsoft Phi-4 бодра, но JSON Schema в сыром виде не понимает, подавай ей примеры. Да и вообще, это применимо к моделям без нативного Structured Output в целом.
(3) Llama 3.3-70B тоже держится очень бодро. Она не так уж сильно отстает от r1-Llama-70B

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Первые инсайты из Enterprise RAG Challenge r2

Мы с вами их обнаружили вместе!

Во-первых, качество извлечения документов важно для точности. Тут внезапно хорошо себя проявила библиотечка Docling от IBM (даже за пределами WatsonX AI Track).

Во-вторых, при наличии хорошой архитектуры можно получить высокие результаты даже на локальных моделях.

Смотрим на архитектуру Ильи, которую он запускал на разных моделях.

PDF parsing with heavily modified Docling library + Dense retrieval + Router + Parent Document Retrieval + SO CoT + SO reparser


o3-mini R: 83.8 │ G: 81.8 │ Score: 123.7
llama3.3-70b R: 83.9 │ G: 72.8 │ Score: 114.8
llama-3.1 8b R: 81.1 │ G: 68.7 │ Score: 109.3

R - Retrieval score
G - Generation score


Видно, что по мере снижения размера модели, у нас снижается качество ответов. Но оно падает не так быстро, как можно было бы ожидать. Я думаю, что это все благодаря качественно сделанной Retrieval части - она “облегчает” работу LLM на финальных этапах.

В-третьих, в топовых решениях часто используются reasoning паттерны на основе SO CoT (Structured Outputs + Chain of Thought == Custom Chain of Thought). Причем они работают даже там, где SO нет и впомине (только нужно использовать Schema Repair).

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

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

---
- Победители Enterprise RAG Challenge r2
- Табличка с результатами (лучший результат от каждой команды)

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Завтра в 10:00 по CET (UTC+1) я расскажу про победителей Enterprise RAG Challenge и новые инсайты. Встретимся в MS Teams. Ссылку на встречу выложим в discord, а видео - потом на timetoact-group-at">Youtube.

А пока, для затравки, самый первый инсайт. Он очевиден, и я рассказывал про "signal vs noise" и на вебинарах и в курсе, но так наглядно я его увидел впервые.

Качество ответов RAG системы всегда будет ограничено качеством работы retrieval части. Если Retrieval тащит мусор или нерелевантную информацию в контекст - то это опускает максимальный предел точности всей системы в целом. Если Retrieval пропускает нужную информацию - тоже самое.

Посмотрите на Retrieval Score и Generation Score в таблице в комментариях. R-Score - оценивает то, насколько правильно найдены релевантные страницы. G-Score - насколько правильны в итоге ответы.

Напомню, что R-score я обычно своих систем считаю сурово. Изначально есть балл. За каждую ненужную цитату - минус 0.1, за каждую пропущенную цитату - минус 0.25.

Результаты Enterprise RAG Challenge показывают, что такой алгоритм оценки, внезапно, неплохо аппроксимирует теоретический потолок точности RAG системы. Практически всегда [1] G-Score ниже, чем R-Score. Это как если бы Retrieval часть задавала теоретический предел точности системы. А вот получится ли его реализовать - уже зависит от мощности модели и последнего reasoning шага. Signal-vs-noise на входном контексте этапа синтеза-генерации.

Отсюда следует и обратное. Если Retrieval Score хороший, но итоговые ответы - не очень, то что-то мы на самом последнем этапе недокрутили. Тут можно улучшить.

Побольше про это мы поговорим на объявлении итогов соревнования завтра. Приходите!

Ваш, @llm_under_hood 🤗

---
[1] "практически всегда", но не "всегда". За пределами TOP-25 есть примеры, где retrieval достает много мусора, но generation часть в целом находит ответы.

Читать полностью…

LLM под капотом

Презентация «The Power of Context» от Stefan Gillich (директорAI GTM в Intel).

Основная часть довольно техническая, но потом он отвечал на вопросы из нашего канала. В основном, это было про то, какой AI нынче востребован крупным бизнесом.

https://youtu.be/_2gPwGSSxs0

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Бенчмарк OpenAI GPT-4.5 preview - не докручивает

Новый GPT-4.5 preview в моем reasoning бенчмарке внезапно показал себя всего лишь на уровне топового GPT-4o, что не очень много.

Я пока не буду делать поспешных выводов о качестве модели. Это preview версия, и все может сильно поменяться (у Google такое бывало не раз с preview версиями). Плюс сам бенчмарк довольно нишевый под бизнес задачи, и пока не заполнен кейсами до конца.

Давайте посмотрим, как эта модель думает и где подскальзывается.

Как я запускаю модели без Reasoning режима в бенчмарке? В StructuredOutput схеме у меня есть специальные "слоты" на размышления. В каждом тесте - своя схема. Эти слоты расположены таким образом, чтобы в процессе ответа помогать модели двигаться в правильном направлении. В итоге у нас получается паттерн Checklist/Custom CoT, который хорошо работает в бизнес-кейсах.

Один из тестов в новом бенчмарке - работа с кодом и доменными моделями. Дается здоровый файл с event sourcing aggregate для кредитной карты (баланс, транзакции, лимиты, KYC, авторизации итп) вместе со спеками. LLM задается вопрос о последствиях добавления новой фичи:

Which specs would fail, if I add a new feature to automatically block the card and decline any transaction above 1,000 (regardless of available credit)?

Посмотрим, как решает эту задачу GPT-4.5 preview - см short_thought_steps. Она смотрит список всех спеков, где идет речь о транзакциях больше $1000, проверяет их и дает варианты:


{
"short_thought_steps": [
"Review transaction-related specs.",
"Identify specs with transactions over 1,000.",
"Check if these specs expect successful transactions."
],
"failing_spec_names": [
"authorize_transaction_success",
"make_payment_success",
"close_card_success",
"close_card_fails_if_balance_not_zero"
]
}


Кстати, правильный ответ в данном тесте - сломаются спеки "authorize_transaction_success", "transaction_declined_over_limit"

Что говорит claude-sonnet-3.5 (без reasoning) в этом тесте? Модель анализирует глубже и дает более корректные выводы:


{
"short_thought_steps": [
"1. The new feature will block cards and decline transactions over $1,000",
"2. Need to identify specs that authorize transactions over $1,000 and expect success",
"3. Need to identify specs that assume a card stays active after a large transaction",
"4. Need to check specs that assume transactions are only declined for credit limit reasons"
],
"failing_spec_names": [
"authorize_transaction_success",
"post_transaction_success",
"transaction_declined_over_limit"
]
}


А что же делает deepseek-r1-llama-70b? Почему эта небольшая локальная модель по очкам работает лучше, чем GPT-4.5 и куча других моделей?

Этот тюн Llama-70B научился включать reasoning режим и думать тензорами, закидывая проблему токенами.

Она сначала подумает текстом, а потом в том же промпте выдаст правильный ответ. Пусть у нее нет выделенного reason режима (нельзя контроллировать в рамках одного промпта, сколько она думает), но изображает она его очень неплохо (см полный текст ответа).

В итоге финальные рассуждения правильны:


{
"short_thought_steps": [
"Identify specs where transactions exceed 1000",
"Check if these specs expect successful authorization",
"Determine if the new feature changes the expected outcome"
],
"failing_spec_names": [
"authorize_transaction_success",
"transaction_declined_over_limit"
]
}


Понятно, что это только один из примеров. Но в среднем по больнице такая картина сохраняется и на других тестах. GPT-4.5-preview пока не только проигрывает reasoning моделям (что ожидаемо), но и отстает от обычных моделей, которые могут изображать reasoning при наличии доступных слотов.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

- Где найти толковых LLM-инженеров?
- Как найти хорошего консультанта, который знает про SO, reasoning и паттерны?
- Какой команде можно доверить материалов из курса в процессы компании?


Вопрос интересный, особенно с учетом того, что поле деятельности довольно новое и все меняется достаточно быстро.

Очень просто - смотрите на тех, кто работает активней всего в этом направлении. Кто рассказывает про кейсы, учится и участвует в курсах, пытается делать что-то новое, задает интересные вопросы в communities LLM под капотом и отвечает на них.

Можно вот прямо сейчас зайти в discord ERC и посмотреть, как люди на скорость анализируют PDF, обсуждают подходы и trade-offs. Обращайте внимание на автарки и ники - многие из них есть и в нашем чате.

Ваш, @llm_under_hood 🤗

PS: Похоже, хантить тоже уже начали 😁

Читать полностью…

LLM под капотом

Anthropic Claude 3.7 thinking - второе место!

Если вы очень любите Claude, то сделайте себе скриншот этого сообщения.

Anthropic Claude 3.7 в reasoning режиме вышла на второе место в моем бенчмарке! Она обогнала o1 в medium reasoning и "выбила" 100% в coding.

Reasoning parameters у этой модели: общий бюджет на ответ - 25k tokens. Из них 80% отводится под нативный reasoning. Плюс у модели еще есть слоты на размышления в рамках схемы ответа.

У Anthropic по-прежнему нет Structured Outputs, но с такими когнитивными способностями они ей и не нужны. JSON схема не была нарушена ни в одном случае.

Как я запускаю Reasoning модели без нативного SO? На вход подается с задачей описание схемы в виде кода (прямо pydantic текстом) и вручную написанный пример в JSON. Json schema я им не подаю, т.к. это обычно путает модели без SO на моих кейсах.

Предупреждаю, что 100% в coding у Claude 3.7:thinking будет не долго. У меня на подходе в бенчмарк набор тестов на разработку, анализ и исправление кода, в которых путаются все топовые модели. Поэтому оценки всех моделей позднее поедут немного вниз.

Ваш, @llm_under_hood 🤗

PS: Бенчмарк пока еще черновой. Туда загружено только 20% кейсов. Прочитать про мой подход к бенчмаркам можно тут. Там есть и FAQ со всеми вопросами, которые мне задают последние полтора года.

Читать полностью…

LLM под капотом

В чате канала обсуждают компиляцию SO схем в OpenAI:

> Кстати я заметил то, что в последнее время, если передавать в opeanai довольно сложную схему - то он ооочень долго отвечает (вплоть до минуты)

Речь идет об эффективном использовании OpenAI на полную катушку, когда мы просим выдать ответ в виде определенной схемы Structured Output. Причем, в самой схеме прописывается прямо Custom Chain-of-thought или сложная онтология для анализа. Это экономит кучу промптов и повышает точность. А для своего reasoning - это вообще идеально.

OpenAI пока не догадались брать денег за компиляцию и выполнение сложных схем. Поэтому люди и используют SO на полную катушку, вплоть до отказов компилятора префиксных деревьев. Как с этим жить - обсуждают тут.

Кстати, локально такое тоже делается и работает хорошо. Чаще всего, vllm + outlines/xgrammar упоминается. А если запустить под капотом deepseek-r1-distill-llama-70B, то gpt-4o остается далеко за бортом.

Ваш, @llm_under_hood 🤗

PS: Если впервые заходите в чат, пожалуйста, не игнорируйте запрос от бота канала. Он бдит, банит ботов и не понимает шуток.

Читать полностью…

LLM под капотом

Enterprise RAG Challenge - тестовый прогон 20 февраля

Завтра, 20 февраля в 12:00 UTC+1 / 14:00 MOW пройдет тестовый прогон Enterprise RAG Challenge. Это будет просто тестовая проверка всех систем. Я сгенерирую вопросы, выложу PDF, покажу запущенный Submission API/UI.

Если интересно задать свои вопросы и пообщаться, то приходите в discord (ссылка на него приходит после регистрации). Но это не обязательно. API и файлы останутся доступны и после, а ссылки я на них продублирую.

Ваш, @llm_under_hood 🤗

PS: Кстати, у участия в RAG Challenge или курсе по ассистентам есть побочный эффект - вас могут схантить к себе в команду. Были уже прецеденты. Так вот, не удивляйтесь, если произойдет такое:

Блин. Мне тут из-за тебя походу новую работу предложили


Такие новости меня жутко радуют. Это результат того, что вы изучаете и применяете на практике паттерны и кейсы!

А еще в чате курса со вчерашнего дня висит такое объявление от стартапа - сейлсы, ходите осторожно там:

Ну вот найти бы продажника кто пошел и купил этот курс) Есть тут такие?)

Читать полностью…

LLM под капотом

AI in Coding или эксперимент с агентами

Если кратко, у нас на одном проекте стоит повторяющаяся задача. Нужно извлекать структурированную информацию из сайтов. Структура известна достаточно жестко, но сайты постоянно меняются. И каждый раз ходить по страницам, выбирать html, писать селекторы итп - надоедает.

Коллега, который сталкивается с этой задачей не в первый раз, решил попробовать написать пару кодинг агентов с инструментами. Идея такая - натравливаем их на какой-то сайт и уходим пить чай. По возвращении получаем готовый код, который уже может автоматически извлечь данные из сайта.

Поэтому решили поставить эксперимент - выделить пару дней на попытку прототипирования таких агентов. Естественно, агенты для написания кода писались при помощи Claude/ChatGPT (ибо код давно уже почти никто не пишет - все разленились).

Задача не стояла “сделать”, а “пощупать и посмотреть, как далеко можно пройти за пару дней”. Это типичный timeboxing из стартапов.

Вот финальный протокол эксперимента:

Короче с агентами, в упрощенном виде все работает. Делаю так. Есть несколько агентов, которые заточены делать определенную функцию:

(1) поиск селектора для каталога - в итоге очень замудрено и проще его самому достать и передать, поэтому потом откажусь.
(2) генератор кода, который из html кода строки генерирует конвертер в json
(3) генератор кода, который делает next page, то есть переключает pagination

Агенты пишут самостоятельно эти генераторы (for loop) и при этом приводят к определенному интерфейсу.

Далее айдеру у себя в коде говорю, что надо уже написать полный парсер каталога, передаю ему интерфейсы инструментов, которые написали агенты, говорю про селекторы. Он уже потом генерирует код. Эту часть можно так же автоматизировать через агента, но хватит с меня экспериментов 😂

По сути, все это в разы быстрее можно было делать напрямую через aider. Но, если условно стояла бы задача “вот 100 клиентов, делайте”, то можно было запустить генератор по массиву и пойти пить чай.


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

Ваш, @llm_under_hood 🤗

PS: Если впервые заходите в чат, пожалуйста, не игнорируйте запрос от бота канала. Он бдит, банит ботов и не понимает шуток.

Читать полностью…

LLM под капотом

Enterprise RAG Challenge: Updated question generator

Новая версия опубликована тут. Она использует расширенный dataset с метаданными всех PDF (извлечены при помощи gpt-4o-mini + SO) - dataset_v2.json. Он добавлен в repository, чтобы можно было генерировать вопросы локально. А сами PDF файлы под задачу уже выложим во время RAG Challenge.

Обращаем внимание на схему ответа:


class SourceReference(BaseModel):
pdf_sha1: str = Field(..., description="SHA1 hash of the PDF file")
page_index: int = Field(..., description="Physical page number in the PDF file")


class Answer(BaseModel):
question_text: str = Field(..., description="Text of the question")
kind: Literal["number", "name", "boolean", "names"] = Field(..., description="Kind of the question")
value: Union[float, str, bool, List[str], Literal["N/A"]] = Field(..., description="Answer to the question, according to the question schema")
references: List[SourceReference] = Field([], description="References to the source material in the PDF file")


class AnswerSubmission(BaseModel):
answers: List[Answer] = Field(..., description="List of answers to the questions")
team_email: str = Field(..., description="Email that your team used to register for the challenge")
submission_name: str = Field(..., description="Unique name of the submission (e.g. experiment name)")


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

В начале следующей неделе я выложу информацию по submission API, а в четверг можно будет сделать тестовый dry run.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Enterprise RAG Challenge - новости

(1) Мы уже получили более 200 заявок на участие во втором раунде! Было бы больше, но вчера в Кёльне была авария у провайдера, и сайт всей группы прилег. А так в день 5-7 новых регистраций приходит.

(2) IBM присоединились к Challenge. Для тех, кто пилит решения на IBM WatsonX будет отдельный Leaderboard, призы и поддержка от экспертов IBM. Кстати, у них на платформу завезли deepseek-r1-llama-70B, который пока держится на 4м месте моего reasoning бенчмарка. Поэтому если кто-то уже работает с IBM, то есть все шансы показать достойный результат.

(3) Я прямо сейчас занимаюсь обновлением question генератора для второго раунда. Скорее всего, уже завтра в github выложу обновленную версию и начну в дискорде отвечать на все вопросы. Потом на следующей неделе хочу запустить все API и провести dry run для всех желающих. Со временем пока не определился - whenever ready.

Регистрироваться можно тут.

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Пример из теста на работу с кодом в новом reasoning бенчмарке

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

Вот пример простого теста на понимание кода:

Which specs would fail, if I add a new feature: after authorizing any transaction larger than 3000, the system automatically blocks the card due to “Large Transaction Risk.” We do not add new event type, just extend the existing command handler.

Source code:


Кстати, обратим внимание, что я вопрос ставлю до исходников файла. Это мне портит кэш, зато позволяет в среднем облегчить жизнь моделям и повысить качество на несколько процентов.

Файл-исходник к этой задаче во вложении в первом комментарии. Там очень простой event-driven aggregate состояний для кредитной карточки вместе со спецификациями на желаемое поведение. В реальности, кстати, такая логика на порядки сложнее.

Скажем, Claude Sonnet 3.5 отвечает на вопрос так:


{
"short_thought_steps": [
"1. New feature: block card if transaction > 3000",
"2. This affects authorize_transaction command",
"3. Current specs that test large transactions:",
"4. 'authorize_transaction_success' tests 2000 amount - would pass",
"5. But any spec testing transactions > 3000 would fail",
"6. Looking for specs with large transactions..."
],
"failing_spec_names": [
"authorize_transaction_success"
]
}


Кстати, смотрим внимательно, на 4-м шаге LLM-ка мыслила правильно, но потом что-то у нее пошло не так.

А вот o1 отвечает на этот вопрос с подвохом правильно:


{
"short_thought_steps": [
"Check specs that authorizeTransaction with amounts > 3000",
"No spec has an authorization > 3000",
"Hence no test scenario triggers the new block logic",
"No spec fails"
],
"failing_spec_names": []
}


Кстати, еще на этот вопрос отвечают правильно только o3-mini и microsoft phi-4 (из моделей, которые добавлены в бенчмарк на данном этапе).

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

Курс “LLM под капотом: выбираем эффективные технические решения для AI-ассистентов”

С когортами поработали, апдейты добавили, приглашения к покупке по листу ожидания разослали, и вот теперь курс можно купить на моей странице https://abdullin.com/ai-assistants-course.

Спасибо всем, кто был с самого начала, тестировал, задавал сложные вопросы и помогал делать курс лучше! Спасибо и тем, кто недавно присоединился из списка ожидания. Пусть этот курс даст вам свежие идеи и рабочие решения.

А тем, кто только планирует, — курс открыт для покупки, он в записи. Можно изучать материалы в своём темпе и применять на практике.

Помимо самого курса у нас есть чат курса, который постепенно превращается в мини-комьюнити. Там можно разбирать вопросы, обсуждать идеи и делиться решениями.

Присоединяйтесь, будет интересно!

Ваш, @llm_under_hood 🤗

Читать полностью…

LLM под капотом

o3-mini в бенчмарке на втором месте, добавил hard mode

Продолжаю портировать задачи из кейсов во вторую версию моего личного бенчмарка LLM на бизнес задачах. В этот раз я догрузил в него часть самых изуверских задачек из доклада про text-to-sql c Neo4j конференции. В итоге "потолок" для o1 (medium reasoning) просел до 67%. И это несмотря на то, что у всех моделей есть две возможности подумать в рамках своего reasoning - сначала свободный CoT, а потом еще наиболее эффективный checklist.

Кстати, свежая o3-mini пока закрепилась на втором месте.

Второй интересный момент. Llama 405B - 49%, а DeepSeek r1 с его 37/671B MoE параметрами - только 53%. Как видим, прогресс не такой уж большой.

Там еще рядом интересно примостилcя дистиллят r1 на базе Llama 70B c 50% точности, что уже интереснее. Если раньше базовые Llama хорошели после тюнов на OpenChat, то теперь пойдет мода на дистилляты. А еще больше очков этой модели дает то, что пока она у меня справляется с задачами без Structured Outputs (на Fireworks не завезли пока).

Замазанные колонки пока можно игнорировать - туда портировано слишком мало кейсов, чтобы были стабильные цифры. Потом открою.

SO - в Features - Structured Output (response schema), который можно из коробки уже найти у большинства моделей. Если так дело пойдет, то через пару месяцев можно просто будет перестать тратить время на модели без поддержки SO.

Costs пока не считаю, чтобы заранее не плакать. Но стоимости там должны заметно подрасти из-за cot/reasoning tokens, если сравнивать с первым поколением бенчмарка.

Ваш, @llm_under_hood 🤗

PS: Бенчмарк личный, закрытый, в черновой версии. Кому хочется стабильности см полтора года отчетов по не-reasoning бенчмарку LLM на бизнес задачах.

Читать полностью…

LLM под капотом

Что мы хотели знать про DeepSeek r1, но стеснялись спросить?

(1) Правда ли, что DeepSeek r1 лучше o1?

Вот никаким боком. Болтает, может, и приятно, но на конкретных бизнес-задачах он на уровне между 4o и 4o-mini. Да, это предварительные результаты бенчмарка v2 (см. рисунок 1). Да, там есть возможность поразмышлять вволю. Да, DeepSeek пользуется этой возможностью и размышляет только так.

(2) Правда ли, что DeepSeek r1 настолько дешевле o1? Как у них экономика сходится?

А тут начинаются интересные нюансы, про которые журналисты не всегда упоминают. Идем в Wiki статью про DeepSeek.

DeepSeek - это китайская лаборатория искусственного интеллекта, которая разрабатывает большие языковые модели с открытым исходным кодом. DeepSeek в значительной степени финансируется китайским хедж-фондом High-Flyer, основанным и управляемым Лян Вэньфэном из Ханчжоу, Чжэцзян.


А из этого следует два вывода:

- Им не обязательно, чтобы модели окупались.
- Они могут заработать денег, если выпустят такие новости, от которых мировые рынки зашатает.

А если мы пойдем на OpenRouter и сравним цены на DeepSeek от разных конкурентов (модель же любой может хостить), то получится интересная картинка (см рисунок 2). DeepSeek хостят ее с крошечным контекстом, никаким throughput и вообще не в силах продолжать этот аттракцион невиданной щедрости (желтый статус - качество просело).

TLDR; модель потенциально интересная, но не это не настолько переворот, как про это пишут. А в бизнес-задачах даже не самая оптимальная (не забываем про размер). Можно получить качество лучше просто разбив workflow на несколько небольших логических шагов для модельки послабее.

Ваш, @llm_under_hood 🤗

Читать полностью…
Subscribe to a channel