Зачем еще один движок? А затем, что старые не умеют агентов
Владельцы Mac давно привыкли к компромиссам. Хочешь скорость — бери llama.cpp с сырым API. Хочешь совместимость с OpenAI — ставь vLLM-MLX, но забудь про встроенные инструменты агентов. А если нужен полноценный multi-agent с вызовом функций, памятью и планированием — приходится стыковать Ollama с полурабочими обёртками.
MLX-AgentCore 2.0 — это не просто очередной инференс-сервер. Это нативный движок под Apple Silicon, который с рождения знает, что такое агенты. Он умеет запускать рои моделей, вызывать внешние инструменты (поиск, калькулятор, код-раннер), поддерживает стриминг и даёт производительность, за которой vLLM-MLX кусает локти. Да, он тоже базируется на MLX — но слой абстракции для агентов встроен прямо в ядро.
Я прогнал его на M4 Max (64 ГБ) и M3 Pro (36 ГБ) и готов рассказать, где движок летает, а где пока запинается.
Что внутри: не просто сервер, а агентная платформа
MLX-AgentCore 2.0 вырос из наработок vLLM-MLX и локального движка роевого интеллекта, но пошёл дальше. Вот чем он отличается от всего, что было раньше:
- Нативные агенты — не нужно оборачивать модель в LangChain или CrewAI. Встроенный раннер агентов умеет диалоги, вызов инструментов, роевые дебаты и планирование.
- OpenAI-совместимый API — меняете base_url и используете любой клиент. Поддерживаются Chat, Tools, Streaming, Embeddings.
- Продвинутый батчинг — несколько агентов одновременно молотят через один инстанс, Unified Memory распределяется оптимально.
- Квантование на лету — загружаете GGUF или MLX-веса, движок сам подбирает лучшее квантование под вашу память.
- PagedAttention+ — модифицированная версия алгоритма из vLLM, адаптированная под Neural Engine Apple.
Важный нюанс: движок требует macOS 15.4+ (Sequoia) и Python 3.12. На старых версиях Sonoma агенты работают нестабильно. Проверено на M1 — лучше обновиться.
Тесты производительности: не верьте на слово, вот цифры
Я тестировал на двух конфигурациях: MacBook Pro M4 Max (64 ГБ) и MacBook Pro M3 Pro (36 ГБ). Использовал модели в формате MLX (4-битная квантизация). Измерял пропускную способность (токенов/с) и задержку первого токена.
| Модель | M4 Max 64GB | M3 Pro 36GB | vLLM-MLX M4 Max |
|---|---|---|---|
| Mistral 7B Q4 | 612 ток/с | 398 ток/с | 464 ток/с |
| Llama 3.2 8B Q4 | 580 ток/с | 377 ток/с | 420 ток/с |
| Qwen 2.5 32B Q4 | 187 ток/с | 92 ток/с | 140 ток/с |
| GPT-OSS 20B Q4 | 310 ток/с | 205 ток/с | 255 ток/с |
Как видите, на Mistral 7B движок выдаёт 612 ток/с — почти на 32% быстрее vLLM-MLX. Секрет в оптимизации батчинга для агентных сценариев: когда одновременно отвечают 3-4 агента, пропускная способность падает не так сильно, как у конкурентов. На M3 Pro с 36 ГБ цифры скромнее, но всё равно впечатляют — 398 ток/с на Mistral 7B.
Но есть и разочарование: 70B-модели на 36 ГБ не помещаются даже с Q4. Движок выдаёт ошибку памяти. На M4 Max с 64 ГБ Llama 3.3 70B Q4 работала со скоростью 68 ток/с — приемлемо для одноагентного чата, но для роя уже тяжело.
Агенты в деле: как заставить модели спорить и работать
Главная фишка движка — встроенный раннер агентов. Не нужно писать циклы вызовов, управлять историей и инструментами. Достаточно описать роли через YAML-конфиг:
agents:
- name: coder
model: mistral-7b-q4
tools: [python_interpreter, file_reader]
system: "Ты экспертный программист на Python. Отвечай только кодом."
- name: reviewer
model: qwen-32b-q4
tools: [code_analyzer]
system: "Ты строгий ревьювер. Ищи ошибки и предлагай улучшения."
debate: true
max_rounds: 3Затем запускаете одним API-запросом:
from mlx_agent_core import AgentEngine
engine = AgentEngine(config="agents.yaml")
response = engine.debate("Напиши fastapi-сервер для CRUD с PostgreSQL")
print(response)Движок сам распределяет задачи между агентами, запускает итерации спора/сотрудничества и возвращает финальный ответ. В тестах на генерацию кода (задача из нашего агентского кодирования) пачка из двух агентов на M4 Max справлялась за 12 секунд — Ollama+LangChain делала то же за 38 секунд.
Ещё одна крутая штука — persistent memory. Агенты могут хранить состояние между сессиями в локальной SQLite-базе. Полезно, когда строишь AI-ассистента, который помнит ваши прошлые задачи.
Сравнение с альтернативами: где правда, а где маркетинг
Давайте честно: каждый движок решает свою нишу. Ollama — для тех, кто хочет «просто чтобы работало». vLLM-MLX — для тех, кому нужен сервер с максимальной совместимостью. А MLX-AgentCore — для тех, кто строит продуктовые агентные системы на локальном железе.
Статья про замену Claude Code локальными моделями уже показала, что агенты на Mac становятся реальностью. MLX-AgentCore 2.0 делает этот путь в два клика.
Минусы тоже есть. Движок не поддерживает распределённый инференс на несколько Mac — если хотите запустить 70B+ модель, читайте про AFM MLX. И ещё: документация пока сыровата, некоторые функции (например, tool calling с streaming) работают с ошибками на M1.
Кому это реально нужно (а кому не стоит)
Идеально подходит:
- Разработчикам AI-агентов, которые хотят тестировать сценарии локально без затрат на облако.
- Владельцам Mac с M3/M4 и от 36 ГБ памяти.
- Тем, кто устал стыковать LangChain с Ollama и тратить часы на отладку.
Не рекомендую:
- Если у вас M1 и 8 ГБ — даже Mistral 7B будет тормозить, лучше посмотрите на Autoresearch на Neural Engine.
- Если нужен исключительно чат-бот без агентных функций — vLLM-MLX будет проще и быстрее.
- Если вы не готовы к экспериментам с ранними релизами — подождите версии 2.1, обещают стабилизацию.
Лично я планирую использовать MLX-AgentCore 2.0 как основу для автоматизации тегирования изображений и генерации документации — движок позволяет запустить 3-4 агента, которые параллельно анализируют файлы и пишут отчёты. Раньше для этого приходилось арендовать GPU в облаке, а теперь вся кухня помещается в рюкзаке с MacBook.
Ну и напоследок: не верьте бенчмаркам из README. Мой опыт iOS-разработки с AI-инструментами показал, что реальная производительность часто на 20-30% ниже заявленной. MLX-AgentCore оказался честнее — цифры из таблицы я подтвердил лично на своём железе.