Мультиагентная оркестрация без Python: TypeScript-фреймворк с 3 зависимостями и локальными моделями
Open-multi-agent — минималистичный TypeScript-фреймворк для мультиагентных систем. Три зависимости, локальные модели через Ollama, параллельное выполнение задач. Разбираем архитектуру и сравниваем с Python-стеком.
Проблема: Python-монополия в мультиагентных системах
Если вы строите мультиагентную систему в 2026-м, выбор кажется очевидным: LangGraph, CrewAI, AutoGen — всё на Python. Экосистема зрелая, документации много, примеров хватает.
Но у этого «очевидного» выбора есть цена.
Python-фреймворки для агентов тащат за собой десятки зависимостей. LangChain — это 80+ пакетов. CrewAI добавляет свои. Вы получаете dependency hell ещё до того, как написали первого агента. Обновление одной библиотеки ломает три другие. Virtual environments множатся. И если ваш основной стек — TypeScript (а это весь фронтенд, большая часть бэкенда, serverless-функции), вы вынуждены держать два рантайма, два набора инструментов, два CI-пайплайна.
Open-multi-agent — проект, который говорит: это необязательно.
Что такое open-multi-agent
Это TypeScript-фреймворк для мультиагентных систем с радикально минималистичным подходом:
- 3 зависимости. Три. Не тридцать, не триста — три npm-пакета.
- Node.js рантайм. Никакого Python, никаких виртуальных окружений.
- Ollama для моделей. Локальные LLM, никаких API-ключей, никакой зависимости от облачных провайдеров.
Ключевая абстракция — runTeam(). Вы описываете цель (goal), фреймворк динамически разбивает её на подзадачи и запускает агентов параллельно. Каждый агент получает свою подзадачу, выполняет её, результаты собираются и проверяются.
Архитектура: goal → subtasks → parallel agents
Паттерн, который реализует open-multi-agent: Goal (высокоуровневая цель) → декомпозиция → Subtasks (конкретные подзадачи) → назначение → Parallel Agents (каждый агент — своя подзадача) → выполнение → Results (сбор и валидация).
Декомпозиция цели
Вы передаёте runTeam() текстовое описание задачи. Первый этап — «планировщик» (тоже LLM) разбивает goal на подзадачи. Это не статическое дерево — разбиение динамическое, зависит от конкретного запроса.
Параллельное выполнение
Подзадачи распределяются между агентами и выполняются параллельно. В Node.js это работает естественно — event loop и промисы делают конкурентность тривиальной. Не нужен asyncio, не нужен threading, не нужен multiprocessing.
Контроль результатов
Встроенная валидация: фреймворк проверяет, что каждый агент действительно выполнил свою подзадачу. Если результат не соответствует ожиданиям — повторный запуск или эскалация.
Сравнение с LangGraph и CrewAI
LangGraph
LangGraph — это графовый рантайм для агентов от создателей LangChain. Мощный, гибкий, с поддержкой стейтов, чекпоинтов, стриминга. Но:
- Тянет за собой весь LangChain (или большую его часть)
- Граф нужно описывать явно — каждый узел, каждое ребро
- Python-only
- Сложность конфигурации растёт нелинейно
Open-multi-agent выигрывает в простоте: вы описываете что нужно сделать, а не как маршрутизировать между нодами.
CrewAI
CrewAI ближе по идеологии — тоже «команда агентов». Но:
- 40+ зависимостей
- Привязка к OpenAI API по умолчанию
- Python-only
- Много «магии» — декораторы, автоматическая маршрутизация, неочевидное поведение
Open-multi-agent прозрачнее: три зависимости, код читается как обычный TypeScript.
Когда TypeScript-стек лучше
- Ваш продукт на TypeScript. Агенты живут рядом с бэкендом, используют те же типы, те же инструменты.
- Edge/serverless. Node.js-агенты деплоятся на Cloudflare Workers, Vercel Edge, Deno Deploy. Python-агенты — нет (или с костылями).
- Минимальный footprint. Три зависимости vs. сотня — разница в размере образа, времени холодного старта, поверхности атаки.
- Локальные модели. Ollama работает на любой машине с GPU. Не нужен API-ключ, не нужен интернет, данные не уходят наружу.
Паттерн runTeam() на практике
Допустим, вы хотите проанализировать конкурентов. Цель: «Собрать информацию о пяти конкурентах и сравнить их по фичам, ценам и отзывам».
runTeam() разобьёт это на:
- Агент 1: исследовать конкурента A
- Агент 2: исследовать конкурента B
- ...
- Агент 5: исследовать конкурента E
Пять агентов работают параллельно. Каждый вызывает Ollama с контекстом своей подзадачи. Результаты собираются, проверяются на полноту, агрегируются в финальный отчёт.
На Python-фреймворке вы бы описывали граф из 7-8 узлов, настраивали маршрутизацию, определяли стейт-схему. Здесь — один вызов runTeam() с текстовым описанием цели.
Ограничения
Нужно быть честным:
- Экосистема инструментов. У LangChain тысячи интеграций — векторные хранилища, коннекторы к базам, парсеры документов. У open-multi-agent — три зависимости. Это и сила, и слабость.
- Зрелость. LangGraph и CrewAI — проекты с командами, бюджетами, документацией. Open-multi-agent — молодой open-source проект.
- Сложные графы. Если вам нужен DAG с условными переходами, чекпоинтами, human-in-the-loop — LangGraph сделает это лучше.
- Ollama-only. Привязка к Ollama ограничивает выбор моделей (хотя Ollama поддерживает большинство популярных open-source моделей).
Когда выбирать open-multi-agent
Этот фреймворк идеален если:
- Вы на TypeScript-стеке и не хотите тащить Python
- Вам нужна параллельная обработка задач, а не сложный граф
- Вы работаете с локальными моделями и не хотите зависеть от облачных API
- Вам важен минимальный footprint — три зависимости, понятный код, быстрый старт
- Вы self-host'ите инфраструктуру и контролируете, где работают модели
Что это значит для индустрии
Open-multi-agent — это симптом более широкого тренда: деPythonизация AI-стека. TypeScript-экосистема для AI растёт — Vercel AI SDK, LangChain.js, ModelFusion. Разработчики на TypeScript больше не хотят переключаться на Python ради агентов.
Три зависимости — это заявление. Не «мы тоже можем», а «может, сложность Python-фреймворков — необязательная?». Может, для 80% задач с мультиагентными системами не нужен граф из 30 узлов. Может, достаточно runTeam(), понятного TypeScript-кода и локальной модели через Ollama.
Проверить легко — проект открытый.