А что если настоящее узкое место в ваших ИИ-мечтаниях — не огромные LLM, а скрипучая Python-опора, на которой они держатся?
Бесблокировочный рантайм агентов на C++17 только что это доказал: 25 000 сессий в секунду, в то время как LangChain еле ползёт на 10–50. Forge — это не игрушка для бенчмарков, а полноценный оркестратор для ReAct-циклов, вызовов инструментов и стриминговых API. Всё без блокировок и на бешеной скорости.
Представьте GIL в Python как ревнивого вышибалу у входа в модный клуб: только один гость внутри за раз, даже если очередь виляет вокруг квартала. 64 ядра бездельничают, моля о работе, — но нет. Каждые 5 мс всех выгоняют на бессмысленную перетанцовку. Вот такая ваша платформа для ИИ-агентов, задыхающаяся под весом оркестрации.
Forge? Это вип-лист без вышибалы. Чистые параллельные потоки, атомарные обмены данных — как электроны в сверхпроводнике. Никаких мьютексов в драке, никаких паник ядра от конкуренции. Только голое железо на полной мощности.
Почему Python задыхается на ИИ-агентах?
Все модные фреймворки — LangChain, CrewAI, AutoGen — висят на Python. Прототипы? Рай. Но продакшн? Катastroфа. Одиночные чатботы урчат себе. Масштабируйте до сотен параллельных сессий — поддержка клиентов, пайплайны код-ревью — и ба-бах. Фреймворк плавится.
Не провайдер LLM виноват. Не капризные сети. Сам слой оркестрации. Шаблоны промптов, парсинг JSON, цепочки колбэков — всё сериализовано этим проклятым GIL.
asyncio пытается вырулить, чередуя задачи как жонглёр на кофеине. Но параллелизм? Забудьте. CPU-задачи остаются однопоточными. AgentExecutor в LangChain раздувается объектами: обёртки LLM, плейсхолдеры сообщений, парсеры вывода, менеджеры колбэков. Тысячи аллокаций кучи на сессию — вечеринка malloc с последующим похмельем от сборщика мусора.
Forge сдирает всё лишнее. Структура Session? Ровно 104 байта. Атомарные переключения состояний. Добавление задачи? Две машинные инструкции:
void push(T value) { auto node = new Node(std::move(value)); Node prev = head_.exchange(node, std::memory_order_acq_rel); // ONE atomic instruction prev->next.store(node, std::memory_order_release); // ONE store }
Вот и всё. 307 наносекунд на задачу. LangChain? 50–100 микросекунд. Разрыв в 200–300 раз, который накапливается в реальных сценариях.
А бенчмарки — настоящие, на одном ReAct-цикле (вызов LLM, инструмент, LLM, ответ) против мок-сервера:
Метрика Forge (C++17) LangChain (Python) Разрыв Оверхед планирования на задачу 307 нс ~50–100 мкс 200–300x Пропускная способность сессий 25 000/сек ~10–50/сек 500–2500x Память на сессию 0,8 КБ ~2–5 МБ 2500–6000x Масштабирование по ядрам Линейное Ограничено GIL N/A
Ошеломляет. Линейное масштабирование по ядрам — а почему бы и нет?
Бесблокировочный C++ — революция в инфраструктуре ИИ?
Бесблокировочное программирование звучит как магия: структуры данных, где потоки танцуют, не давя друг друга. Без блокировок — без зависаний. Потоки крутятся в юзерспейсе, атомики гарантируют согласованность через аппаратные модели памяти. Forge юзает очереди Michael-Scott, hazard pointers — всё проверено ThreadSanitizer.
Но вот мой горячительный тейк, который никто не озвучивает: это эхо базовых войн 90-х. Помните, как PostgreSQL и MySQL обошли раздувшийся Oracle lean-кодом на C? Python запустил веб-эру — Django, Flask правили прототипами. Теперь ИИ требует того же поворота. C++ не мёртв; он тихо жужжит в Redis, в прокси Envoy и скоро в ваших рантаймах агентов.
Forge предвещает гибридное будущее: Python для клея, C++ для горячих путей. Смело? Ещё бы. Но пропускная в 2500 раз не врёт. Компании, пиарющие «enterprise LangChain», плетут сказки — а это разоблачает императорскую медлительность.
Как работает Forge — без воды
Запускаете: HTTP API, стриминг SSE, три вида workflow (ReAct, Plan-Execute, Map-Reduce). 106 тестов зелёные. Отправляете сессию — и она летит.
Магия в пуле потоков. Задачи ставятся в очередь