AI-Driven Development. Родион Мостовой – Telegram
AI-Driven Development. Родион Мостовой
4.15K subscribers
87 photos
3 videos
1 file
82 links
Увлекательно рассказываю про AI в разработке, про построение продуктов с LLM под капотом и иногда про .NET.
Связь: @rodion_m_tg
Чат: @ai_driven_chat
Download Telegram
Текущая картина по моделькам для кодинга, мое грядущее выступление на DotNext и... конкурс

Но начну вот с чего: набрел тут на сервис https://glhf.chat/ - он позволяет в один клик запускать разные модели с HF, а по запросу могут даже включить API доступ к развернутым вами моделькам. Сервис пока в бете, поэтому доступ бесплатный (после регистрации). В лимиты пока не успел упереться, так что неизвестно, есть ли они вообще.
Быстрый чек показал, что модели похожи на настоящие (ну кто ж знает, вдруг, обманывают). Во всяком случае, по запросу Create API client in .NET for OpenAI that supports parallel embeddings generation with configurable dop что-то адекватное выдала только самая большая ллама на 405b. Хваленая Reflection, кстати, без подсказок не реализует адекватный параллелизм.
А на скриншоте ключевой кусочек корректной реализации задачки на параллелизм от llama-3.1-405b (в котором моделька выбрала "продвинутый" метод из TPL, появившийся в .NET 6 - кажется, о нем разработчики-то не все еще знают).

Собственно, уже давно был запрос написать что-то про новую большую лламу на 400b параметров. Вот, пишу.
Опираясь на мой любимый LiveCodeBench (задачки а-ля литкод дают более-менее объективнумю картину), видно, что LLama3.1-405b-Ins-FP8 хорошая модель, но не лучшая. Что касается моего (небольшого) субъективного опыта применения этой модели в .NET-specified задачах, то могу лишь сказать, что мне ответы Sonnet 3.5 и gpt-4o нравятся больше.

Кстати, пощупать новую большую лламу помимо glhf.chat можно еще и на https://hyperbolic.xyz/ (при регистрации они дают халявные 10$ - этого должно хватить примерно на 2 млн токенов).

Далее, из интересных актуальных моделек хочу отдельно выделить Yi-Coder-9B-Chat - судя по LiveCodeBench на текущий момент это единственная открытая 9B модель, которая перегнала gpt-3.5 в кодинге. Напомню, что 9B модели можно запускать на M1,2,3 макбуках с 32 GB shared memory, а если они квантизованные, то и 18 GB будет достаточно.

Еще, 11 сентября в 11:30 (по МСК) я буду выступать с очередным докладом про применения LLM в разработке (онлайн с Бали).
Кроме меня на конференции, как обычно, выступает множество спикеров, в т. ч. многоуважаемый Евгений Пешков (@epeshkblog) с докладом про сравнение реализаций асинхронности в разных платформах: .NET, Java и Go - это одна из моих любимых тем (после AI, конечно), так что должно быть очень интересно. Кстати, конкретно доклад Жени будет транслироваться для всех безоплатно.

🔥Конкурс🔥
Я люблю коллекционировать классные кейсы применения LLM в разработке, а потом о самых удачных рассказывать другим разработчикам. Поэтому, если у вас есть крутые кейсы из практики - предлагаю поделиться ими в комментариях к этому посту. А автору самого интересного кейса достанется билет на этот DotNext (онлайн или оффлайн).


Пробелов.NET. Спасибо, что читаете :)
🔥14👍6
Media is too big
VIEW IN TELEGRAM
aider — AI-Junior разработчик, доступный из вашей любимой IDE

Друзья, совместно с клубом Эволюция Кода публикуем воркшоп по (субъективно) наиболее удобному и мощному инструменту для разработки, доступному из любой IDE.
По-моему, на текущий момент это единственный воркшоп по aider в открытом интернете.

А что вообще за aider такой?
aider это инструмент для парного программирования с использованием языковых моделей (LLM), позволяющий редактировать код в вашем локальном git-репозитории. С его помощью вы можете начать новый проект или работать с существующим git-репозиторием. Aider наиболее эффективен при использовании GPT-4o и Claude 3.5 Sonnet, но также совместим практически с любыми другими языковыми моделями (официальное описание).

От себя добавлю, что aider — это действительно прекрасный инструмент, который, фактически, служит клеем между IDE и LLM; в консоли разработчик на естественном языке описывает то, что нужно исправить/создать, aider обрабатывает это сообщение, сам патчит необходимые исходные файлы, (если надо) запускает команды в консоли (типа dotnet install) и коммитит изменения в репозиторий. В общем, инструмент мощнейшний.
Единственная проблема aider в том, что с ходу его вряд ли получится использовать эффективно. По-хорошему, нужно будет посвятить какое-то время на его изучение. Именно поэтому мы записали воркшоп, в котором на примере конкретной задачи демонстрируем установку, настройку и использование aider.

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

Пользуясь случаем подробнее расскажу про клуб Эволюция кода.
В клубе регулярно проводятся тематические созвоны и воркшопы, а его участники регулярно делятся полезными инструментами - например, недавно запостили ссылочку на открытый инструмент для чата с репозиторием (поиск по коду на естественном языке).
Еще, доступна открытая коллекция юзкейсов от участников клуба.
В общем, горячо рекомендую Эволюцию Кода.

Отдельно хочу поблагодарить Лекса @itbeard, который организовал этот воркшоп.

Upd: залили на YouTube: https://youtu.be/NXwWLNPHd38


Пробелов.NET совместно с клубом Эволюция кода. Спасибо, что читаете :)
🔥14👍1
🍓o1 — Новая прорывная модель для кодинга от OpenAI

Не успел я выступить на DotNext с докладом про использование LLM в разработке (слайды тут) и хвалами в адрес Claude Sonnet 3.5, как OpenAI выпустили новую модель для программирования, которая по их же описанию оставила далеко позади все остальные модели в задачах на программирование и математику.
Результаты у этих моделей, судя по анонсу OpenAI, действительно прорывные. Я не буду здесь пересказывать анонс OpenAI, т. к. это уже многие сделали (раз, два, три).

Результаты моделей o1 в задачах на программирование
Собственно, перейду сразу к результатам. Я предлагаю сразу смотреть на мой любимый LiveCodeBench, т. к. кажется, что остальные бенчмарки по программированию с выходом Sonnet 3.5 и o1 уже не очень показательны (например, HumanEval).
Сосредоточим внимание на колонке Hard и Medium (т. к. в. категории Easy там уже почти некуда соревноваться). Если включить все задачки (оттянуть ползунок влево), то мы увидим картинку как на скриншоте. Видно, что в категории задач уровня Hard (требующих наилучшего reasoning), модель O1-Preview опережает Sonnet 3.5 почти на 30%, а вот модель O1-Mini на сложных задачах оказалось умнее, чем Sonnet 3.5 аж более, чем в 3 раза!

Кроме того, на свеженькие вопросы со StackOverflow новые модели отвечают на 30% лучше.

Отмечу, что размер контекстного окна на output существенно расширен (для o1-preview до 32к токенов, а для o1-mini до 65к). При этом, общий размер контекстного окна (вход + выход) 128к токенов (тут, увы, не удивили).

Как это работает?
Есть такой интересный прием CoT (Chain of thought) - это когда в конце промпта мы просто добавлявляем "Думай шаг за шагом". Удивительно, но этот подход существенно улучшает способности модели к решению сложных задач - он универсален, т. е. применим чуть ли не к любым LLM. Так вот, OpenAI каким-то образом приучили свои новые модели всегда использовать этот подход, наделив их, по сути, нативными способностями к декомпозиции и подробному, многошаговому анализу задачу. Примечательно, что новые модели даже иногда могут прийти к некому промежуточному выводу, затем поймать себя на ошибке исправиться. Всю инфу по o1 OpenAI собрали в хабе o1.

А еще, ребята из GitHub Copilot тоже подсуетились и, похоже, совсем скоро мы увидим новые модели и там.

Как попробовать?
1) В интерфейсе ChatGPT с подпиской ChatGPT Plus.
2) Через API OpenAI (но для этого пока нужен аж 5-й tier upd: уже 3-й tier)
3) Через API OpenRouter - я тестировал именно так, работает действительно отлично.
4) Через API Azure OpenAI (но сначала нужно оставить заявку на доступ)
5) Бесплатно из плагина Double для VSCode (спасибо автору канала Not Boring Tech за инструкцию)
6) Через телеграм-бот Ильи Гусева (бесплатно всего 2 запроса в день)

P.S. Рад видеть новых подписчиков в своем канале - спасибо всем, кто присоединился! Чуть позже будет пост-навигатор по самым интересным материалам канала, а также мощный воркшоп про смысл асинхронности в .NET.


Пробелов.NET. Спасибо, что читаете :)
🔥19👍8
Актуальная картина по LLM для разработки на октябрь

Звезда недели — Claude Sonnet 3.5 v2 — самая практичная модель для кодинга
Многие ждали новую Opus, но Anthropic всех удивили слегка улучшенной Sonnet. И действительно, если посмотреть на мой любимый бенчмарк LCB, то там новая Sonnet и вовсе оказалась даже чуть хуже своего предка (50.2 vs 50.8 на всей выборке). А вот если посмотреть LiveBench (они расширили секцию кодинга задачами на заполнение недостающего кода, а также добавили несколько других секция, включая Reasoning).
claude-3-5-sonnet-20241022 - это и есть Claude 3.5 Sonnet v2.
Можно было бы и на этом закончить, но давайте пойдем дальше. Я иногда люблю поглядывать бенчмарк от aider - из него уже можно получить более практичную картину по LLMкам в программистских задачах, требующих работы с несколькими файлами одновременно или даже рефакторингов. Так вот, в aider новая соннет показывает результаты даже круче, чем o1 (o1 очень "умная", но у нее проблемы с соблюдением форматов). Особенно существенный прирост (почти 30%) мы видим как раз в задачах на рефакторинг (у меня, например, таких больше всего в реальной разработке).
Так что, работу ребята из Anthropic проделали существенную, за что им и спасибо.

Кстати, самое интересное, что Anthropic со своей новой моделью с ходу залетели в лидерборд бенчмарка по разработке ПО SWE-bench Verified, еще и сразу с лучшим результатом (49%). Тут я обращаю внимание на то, что они использовали не чистую модель, а некий Tools (в посте ниже описываю как они этого добились) - результат потрясающий. Еще, отрадно видеть в этом лидерборде весьма неплохие результаты от команды nFactorial AI (ребята из Казахстана).

Как попробовать обновленную Sonnet?
1) В веб интерфейсе Anthropic (после регистрации и с лимитами)
2) Через API Anthropic (платно)
3) Через веб интерфейс или API OpenRouter (платно)
4) Через Blackbox (слева сверху нужно выбрать модель Sonnet (работает хорошо, но нет 100%-й уверенности, что это именно новая Sonnet).
5) Через LLM Playground (бесплатно и с лимитом до 1000 символов)
6) Через телеграм-бот Ильи Гусева (бесплатно всего 3 запроса в день)

Qwen 2.5 Ins 72B - открытая модель уровня GPT-4o в кодинге
Что еще случилось за этот месяц? Ребята из Alibaba Cloud выпустили очередное обновление своей линейки Qwen до версии 2.5. Теперь их самая большая моделька Qwen2.5-72B-Instruct кодит на уровне самых топовых закрытых моделей, на уровне GPT-4o (судя по LCB). Эта модель доступна через OpenRouter по цене в несколько раз ниже GPT-4o.
Ну и последний фаворит (точнее, фаворитка) - модель Qwen 2.5 Coder Ins 7B, показывающая в LCB результаты в кодинге, сопоставимые с одной из первых версий gpt-4 (а это очень достойный уровень). В действительности, именно с этой моделью все сложнее, т. к. если выборку начать с 4/1/2024, то в рейтинге эта модель сильно падает аж до уровня Claude 3 Haiku. Так что, возможно, ее как-то очень по хитрому обучили на задачах из бенчмарка. Но если вы любитель локальных моделей, то попробовать стоит в любом случае.

А вот нашумевшая модель llama-3.1-nemotron-70b оказалось не такой уж и выдающейся (Qwen 2.5 72B показывает существенно лучшие результаты).


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

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


Пробелов.NET. Спасибо, что читаете :)
🔥15👍4
Как устроен лучший автономный AI-разработчик на сегодня (публично доступный)

Anthropic сделали большое дело — опубликовали статью о том, как им удалось добиться лучшего результата в бенчмарке AI-агентов-программистов SWE-bench (см. Verified). Почему дело большое? Потому, что SWE-bench — это поле битвы автономных AI-агентов-программистов, в котором разные компании пытаются зарезловить как можно больше Issues из определенного списка OpenSource проектов. Так вот, Anthropic с их Claude 3.5 Sonnet v2 действительно удалось добиться выдающегося результата, сместив всех предыдущих "Senior AI-инженеров" с пьедестала.
А про SWE-bench недавно был хороший пост в канале Сиолошная (последняя новость в посте). Вот, кстати, емкое определение оттуда же, оно мне понравилось:
SWE-bench — Это бенчмарк оценки способностей LLM по внесению изменений, описанных текстом, в кодовую базу большого существующего проекта (одни из самых популярных Python-фреймворков, например, Django).

В каждом задании бенчмарка ИИ предоставляется настроенная среда Python и копия репозитория в состоянии перед тем, как ошибка была устранена. Модель должна проанализировать, изменить и протестировать код, а затем предложить своё решение.

Для тех, кто хочет глубже, вот подробное описание SWE-bench Verified.

Как это работает
Высокоуровнево, они это сделали через Tool Use (function calling) — это когда разработчик описывает для нейросети список доступных функций и просит ее, когда это уместно, вызывать одну (или несколько) из описанных функций. Например, можно объявить функцию получения текущей даты и времени и когда пользователь спросит текущее время у LLM, она "вызовет" функцию и ответит ему правильно.
Ребята реализовали две функции:
1. Bash Tool для запуска bash комманд.
2. Edit Tool для просмотра, создания и редакирования файлов. А Edit Tool, в свою очередь, состоит из 5-х команд: view, create, str_replace, insert, undo_edit.

Отдельный интерес представляют промпты (в т. ч. описание тулинга) — только посмотрите на сколько они подробные.
В главном промпте хочу обратить внимание на предложение к LLM сначала воспроизвести баг локально (изолированно) и только после этого решать проблему.
Челленджы такого подхода в статье описаны отдельно. Пример так же есть в статье.

Эти 2 функции LLM выполняет последовательно в том порядке и с теми аргументами, которые считает нужными, а результат выполнения передается обратно в LLM и, таким образом, итеративно накапливается довольно большой контекст, состоящий из messages к LLM (для Claude 3.5 контекст все еще ограничен 200к токенами). Если задача решена, либо модель вышла за пределы контекста, цикл останавливается.

Что нам с этого?
В принципе, такой подход можно применить и для решения рабочих задач — взять какой-нибудь баг или даже небольшую фичу из таск трекера и делегировать реализацию описанному агенту. Кстати, вместо Sonnet 3.5 v2 можно использовать и другую LLM, поддерживающую function calling.

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


Пробелов.NET. Спасибо, что читаете :)
🔥13👍7
SearchGPT для задач программирования

Новая функция поиска в ChatGPT — вещь потрясающая и для задач на программирование тоже. Рисовал только что графы через React Flow, и GPT никак не мог изменить background color графа — но стоило лишь активировать поиск и он тут же справился с задачей. Для этого я включил функцию поиска (внизу под чатом) и просто отправил сообщение "Still (not working). Try to search in the internet.".
Что отдельно радует — так это то, что работает поиск очень быстро (по ощущениям менее секунды).

Похоже, что вот оно и долгожданное решение проблемы неактуальных версий и API.
Браво, OpenAI!

Доступна новая фича пока только по подписке Plus, но в будущем обещают и бесплатным пользователям выдать доступ.

Кстати, уже давно есть бесплатные суррогаты а-ля GPT с поиском для программистов. Например, на devv.ai или blackbox.ai. Но лучше оригинальный SearchGPT, конечно.

А у вас какой опыт использования нового поиска?
🔥10👍4
Поиск по коду на естественном языке + вакансии в CodeAlive

Известное дело, что современные LLM открывают большие просторы для продуктов с AI под капотом. Сейчас делают множество решений для No/Low Code и создания софта с нуля (v0.dev, bolt.new, Replit Agent и т. д.), но вот продуктов для доработки уже существующих больших кодовых баз, позволяющих хотя бы задавать вопросы по всему проекту пока не так много.
Из наиболее доступных решений могу отметить:
1) Поиск по коду через чат в Cursor (нужно написать в чатике @codebase и задать вопрос).
2) Поиск по коду через чат GitHub Copilot (нужно написать в чатике @workspace и задать вопрос, работает пока только в VSCode)
3) Команда /ask в aider тоже работает довольно неплохо (но чуть хуже, чем в Cursor и Copilot)

Перечисленных выше решения работают неплохо, но у них есть несколько важных недостатков:
1) Privacy - не до конца понятно как именно работает индексация в Cursor и Copilot, найти достоверную инфу об этом оказалось не так просто (раз, два), а Perplexity и SearchGPT уверенно отвечают, что эмбеддинги генерируются удаленно - если это так, значит, весь ваш код Курсору/Копайлоту приходится отправлять на third-party сервера - что часто является нарушением NDA.
2) Индексация зачастую ограничивается одним проектом или репозиторием, поэтому отсутствует понимание того, как реализовано взаимодействие компонентов в рамках всей системы, с учетом вспомогательных репозиториев (например, понимания как фронтэнд общается с бекендом). Из-за этого может хромать качество поиска.
3) Отсутствует интеграция с таск трекером - зачем дожидаться пока разработчик задаст вопрос по кодовой базе, если AI может прямо в таск трекере оставить dev notes о том, как пофиксить тот или иной баг или реализовать ту или иную фичу.

Все эти проблемы (и много больше) мы сейчас решаем в CodeAlive. А хорошая новость в том, что сейчас мы расширяем команду разработки и ищем разработчиков, которых так же, как и нас драйвят продукты с LLM под капотом.
На данный момент нужны Middle+ (желательно Senior) уровня разработчики на React / TypeScript; кроме того, есть потребность в DevOps. Возможен фулл и парт тайм формат работы. Т. к. проект на ранней стадии, еще есть возможность войти в проект за equity (долю в компании) + график обсуждаемый, поэтому вилку не пишем намеренно.
Вакансии тут.
Если вы (как и я когда-то) устали от рутинных задач на работе и у вас остается некоторое количество свободного времени, то, вероятно, вам будет интересно поучаствовать в разработке CodeAlive.
По всем вопросам пишите: @rodion_m_tg
👍8🔥3
Новые библиотеки от MS для работы с AI/LLM в .NET

В .NET потихоньку завозят новые библиотеки для работы с AI/LLM: Microsoft.Extensions.AI и Microsoft.Extensions.VectorData.
Для чего? Для унификации. Ранее какую-то унификацию пытались добавить в SemanticKernel, но кажется, что процесс добавления поддержки новых LLM-провайдеров неприлично долгий (пример Anthropic), да и сложно, видимо, качественно поддерживать разных провайдеров своими силами в рамках этой библиотеки.
Теперь же разработчикам LLM-провайдеров (API клиентов) будет достаточно просто реализовать соответствующие интерфейсы из Microsoft.Extensions.AI.Abstractions и это позволит другим .NET разработчикам (зависимым от Microsoft.Extensions.AI.Abstractions) бесшовно заменять у себя одного LLM провайдера на другого — мне этого прям не хватало.
У меня есть весьма неплохая библиотека для работы с API OpenAI/OpenRouter/Azure OpenAI из .NET и, возможно, пришло время вдохнуть в нее новую жизнь реализацией соответствующих интерфейсов из Microsoft.Extensions.AI.Abstractions + добавить поддержку генерации эмбеддингов из разных сервисов, а то с SemanticKernel я уже успел намучаться (недавно они просто сломали совместимость с моделями из OpenRouter). И вообще, для .NET очень не хватает аналога питоновской LiteLLM. Кстати, если кто-то ищет себе актуальный опенсорсный проект, то вот вам хорошая возможность (условный LiteLlm.NET).

NB: Новость увидел у denisio в канале Записки программера (он периодически постит годный контент про .NET).


Пробелов.NET
👍7🔥4
Reasoning models: o1, o1-pro, Gemini Flash Thinking, QwQ 32b, o3-mini

Ну что, всех с наступившим! Если меня спросят какой тренд в AI мире наблюдается в 2025 году, то я смело отвечу, что это reasoning модели и AI-агенты. "Агентность" - это когда LLM наделяют волей самостоятельно принимать решение о том, каким должен быть следующий шаг для достижения успеха в решении задачи. Пример в контексте программирования - это системы типа Devin, Cursor Agent и автономный aider. AI-Агенты - это очень интересная тема, о которой я еще обязательно буду говорить, но сейчас сфокусируемся на reasoning моделях как средстве еще больше повысить нашу, программистскую продуктивность.

Итак, OpenAI провели серию больших (и маленьких релизов) и в течение 12-ти дней что-то да выпускали - почитать саммари релиза каждого дня можно, например, в канале Игоря Акимова. Мы же здесь поговорим про самые важные релизы для программистов — это модельки о1 (pro) и o3.
Описание моделей линейки o я уже приводил в этом посте, напомню лишь кратко, что это специальная линейка моделей от OpenAI, к котором прикручена способность к рефлексии - иными словами, интеллектуальные способности этих моделей (которые так важны для решения задач на программирование) существенно выше, чем все, что было до этого в LLM.
Сразу скажу от себя, что эти модели действительно большой прорыв в решении задач на программирование, я могу это подтвердить и своим личном опытом их использования. Да, я опять буду показывать вам бенчмарки, но только те, которые в моем понимании хорошо мапятся на реальность.

В LiveCodeBench видно, что o1-high превосходит Sonnet 3.5 в решении сложных алгоритмических задач примерно в x5 раз.
Да, модель o1 по API доступна в 3-х вариациях reasoning effort: low, medium и high - чем выше это значение, тем дольше модель будет "думать" (кстати, у меня есть подозрение, что в Web версии ChatGPT reasoning effort определяется автоматически).

И, напоследок, посмотрим бенчмарк от самой OpenAI - задачки на CodeForces (смотрим второй бенчмарк на 4/4 стабильных ответов): o1-preview - 26, о1 - 64, o1-pro - 75. o1 Pro - это самая продвинутая модель в линейке o1, которая "думает" больше (и дольше) всех остальных моделей, зато выдает более продуманные и стабильные ответы. На текущий момент модель o1-pro доступна для в подписке ChatGPT Pro за 200$. Доступ к модели o1-pro по API обещали открыть позже.
Подробнее про o1 можно почитать в этом посте.
Кстати, про о1 ребята из OpenAI+DeepLearning аж курс часовой сделали и блок про метапромптинг определенно стоит вашего внимания, т. к. он еще и имеет прямое отношение к реализации продвинутых AI-агентов.
А на сколько хорошо o1-pro пишет многопоточный код я проверю на реальной задаче в следующем посте.

Как попробовать?
1. В GitHub Models модели o1 и o1-mini доступны как из веб интерфейса, так и по API. Но чтобы воспользоваться, похоже, что нужна подписка на GitHub Copilot.
2. В веб/десктоп версии ChatGPT подписка Plus открывает доступ к модели o1.
3. По OpenAI API, но для этого понадобится аж Tier 5.
4. В Azure OpenAI, но только по заявке.

Еще reasoning модели
Китайцы активно догоняют OpenAI и уже сейчас можно отметить 2 модели, которые тоже очень хорошо умеют решать сложные задачи:
1. Qwen QwQ 32b - доступна в веб интерфейсе или через OpenRouter.
2. DeepSeek-R1-Lite-Preview - доступна в веб интерфейсе при включении опции "DeepThink".
3. Gemini Flash Thinking - Google тоже пытаются в reasoning и у них получается.
По LiveCodeBench видно, что эти модели действительно хороши в решении задач уровня Medium и Hard.

Еще, OpenAI анонсировали модель o3, результаты которой эквиваленты 175-му разработчику в мировом рейтинге CodeForces, но модель эта пока не доступна никому, кроме исследователей безопасности, а стоимость генерации там вообще какая-то заоблачная. Из более реального, в течение нескольких недель обещают зарелизить модель o3-mini примерно уровня o1-pro по словам Сэма Альтмана, но еще и с доступом по API. Будем ждать.

И это еще не было ответа от Anthropic. 2025-й год обещает быть очень интересным.


Пробелов.NET
👍12🔥4
o1-pro: Реализуем Parallel.ForEachAsync с регулируемым "на лету" параллелизмом

Не все знают, но в .NET начиная с 6-й версии есть прекрасный метод Parallel.ForEachAsync, который позволяет распараллелить задачу на заданное количество воркеров. По умолчанию выполнение происходит на тредпуле, поэтому в случае использования асинхронных методов некоторые задачи можно решать в десятки, а то и в сотни раз быстрее.
Одна из таких задач - это, например, генерация embeddings или любые другие обращения к облачной LLM или даже парсинг. Это здорово работает, но иногда возникает необходимость изменять количество воркеров (degree of parallelism) "на лету" - к примеру, в зависимости от пропускной способности LLM провайдера. Написать такую реализацию DynamicParallel.ForEachAsync самому, конечно, можно, но делать это нужно максимально внимательно с учетом всяких возможных дедлоков и race condition.
Делегировать эту задачу LLMке я порываюсь еще с сентября, но тогда ни GPT-4o, ни Sonnet 3.5 ни в какую не могли с этим справиться, хотя бы даже частично.

Шаги к решению
1. Итак, я попросил o1-pro сначала реализовать решение, позволяющее динамически регулировать параллелизм на лету. После примерно 5-ти минут раздумий, она выбрала решение на основе SemaphoreSlim (из цепочки рассуждений было видно, что так же в серьез рассматривалось решение с DataFlow, но в итоге было отметено ну и хорошо)
2. Затем, понимая комплексность задачи (многопоточный код жеж), я попросил Claude Sonnet 3.5 и обычную o1 поревьюить результат (ревью от Клода там во втором моем сообщении) - они нашли какие-то проблемы, на первый взгляд мне они показались адекватными и я правки принял.
3. Взял результат из шага 2, и попросил o1-pro на базе DynamicConcurrencyLimiter реализовать метод DynamicParallel.ForEachAsync. И тут важно отметить, что для упрощения нейросети задачи, я добавил ей в контекст исходник оригинального Parallel.ForEachAsync из актуальных сорсов .NET (оригинальный ForEachAsync НЕ поддерживает динамический параллелизм). Кстати, обратите внимание, что промпты в моих сообщениях довольно простые (для reasoning моделей это ок).
4. [важнейший шаг] Я попросил o1-pro написать тесты на получившиеся классы.

Про валидацию решения
Валидация сгенерированного кода тестами - это эдакий лайф-хак, особенно на случай когда код получается реально сложный и его трудно проверить глазами - тут уже важно, чтобы программист имел понимание возможных уязвимых мест разного сложного кода и всевозможных corner cases - в принципе, этот этап тоже можно практиковать совместно с LLM, но я бы все равно рекомендовал взять минутку и продумать какие-то сложные сценарии, которые должны быть покрыты. Возвращаюсь к нашему кейсу мне показалось важным убедиться в 3-х вещах:
1. В том, что при активной динамической регулировке параллелизма не возникает дедлоков (не хотелось бы где-то встрять навечно).
2. В том, что все элементы действительно обрабатываются.
3. В том, что каждый элемент списка обрабатывается ровно один раз.
Поэтому, я сам спроектировал еще один дополнительный стресс-тест, который делает все эти вещи. В этом тесте сейчас 1M элементов - но когда речь идет о проверке потокобезопасности, этого может быть мало для надежного теста, больше того, по-хорошему подобные решения еще имеет смысл прогонять на разных архитектурах (x86, arm, ...), т. к. из-за различий в модели памяти поведение многопоточного кода может слегка отличаться. Кстати, здесь бывает полезным погонять тесты в цикле до провала (в течение дня, например) - в Rider для этого есть опция Run Unit Tests Until Failure.

Что в итоге?
После пары косметических правок (в тестах было 2 ошибки компиляции), к моему удивлению, все тесты прошли с первого раза. Код и тесты тут.
Продолжение.
7👍4