На экране Mac агент читает запросы на слияние через консольную программу GitHub CLI, перебирает изменения и делает сводку. В соседней демонстрации он собирает небольшое приложение в Xcode и исправляет ошибку в уже готовом проекте. Apple показывает эти сцены в докладе о MLX как работу целиком на компьютере: модель и агент остаются на Mac, сеть нужна только там, где к ней обращается инструмент.

За этой демонстрацией стоит более прозаичная программа. В шести докладах об ИИ Apple раскладывает агентную функцию на части: где запускается модель, как она помнит ход работы, кто проверяет её вызовы и почему текст из календаря или ленты не должен сам превращаться в команду. Мы посмотрели эти записи и сверили пересказ с локальными расшифровками.

Локальный агент — это цикл, а не окно чата

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

Схема на Mac состоит из четырёх слоёв. MLX отвечает за вычисления, Metal и память на Apple Silicon. MLX-LM загружает и запускает модели. MLX-LM Server даёт локальный HTTP-интерфейс, совместимый с OpenAI API. Сверху работает агент — в демонстрации это OpenCode и Xcode. Apple показывает агента, который через GitHub CLI читает запросы на слияние, а затем делает сводку изменений.

MacBook с терминалом и окном агента OpenCode, который локально обрабатывает данные из GitHub
В демонстрации OpenCode обращается к локальной модели через MLX-LM Server, а данные о запросах на слияние получает отдельным сетевым инструментом.Кадр: Apple, WWDC 2026

Авторы отдельно разбирают три ограничения: повторное чтение длинного контекста после каждого инструмента, одновременные запросы нескольких агентов и модель, которая не помещается в память одного компьютера. Для последнего случая показано распределённое выполнение модели на нескольких Mac через Thunderbolt или Ethernet. Это описание конкретного стека MLX, а не обещание, что любой агент будет работать локально с той же скоростью.

В записи есть и конкретная настройка: сначала установить MLX-LM, затем запустить сервер с моделью, умеющей вызывать инструменты, и направить на него агент. Авторы советуют начинать с небольшой модели. В Xcode локальный сервер добавляют как Locally Hosted provider — локально размещённого поставщика; в примере используется порт 8080. Это не скрытая интеграция внутри macOS, а обычный локальный HTTP-сервис, к которому должен обратиться выбранный инструмент.

Первая демонстрация хорошо показывает, где заканчивается слово «локальный». Модель читает код и принимает решения на Mac, но команда GitHub CLI всё равно обращается к GitHub за списком запросов на слияние. Локальная модель не превращает сетевую задачу в автономную: она лишь не отправляет провайдеру модели сам репозиторий и промежуточные рассуждения. Любой инструмент, которому нужна сеть, продолжает ею пользоваться.

Во второй демонстрации на экране сначала почти ничего нет — только пустой проект. OpenCode изучает папки, пишет файлы SwiftUI, запускает сборку, получает ошибку компилятора и возвращается к коду. В симуляторе появляется приложение для рисования; после короткой просьбы линия получает другую форму концов. Третий пример начинается уже с поломанного проекта в Xcode. Модель ищет причину рядом с ошибкой и предлагает исправление. Момент, когда программа наконец оживает, короткий: сразу следом результат проверяют git, компилятор и симулятор.

34-секундный фрагмент: агент заканчивает сборку, после чего приложение запускают в симуляторе iPad и проверяют рисованием.Видео: Apple, WWDC 2026

Разговор о скорости тоже привязан к строению агента. После каждого вызова инструмента в историю попадает новый вывод — иногда большой фрагмент кода или журнал сборки. Модель снова читает этот контекст, прежде чем выбрать следующий шаг. Apple утверждает, что матричные умножения на Neural Accelerators в M5 выполняются в четыре раза быстрее, чем на M4, и связывает это с почти таким же ускорением обработки входного текста в показанном стеке. Это заявленное сравнение двух поколений чипа, а не измерение времени выполнения целой задачи.

Когда несколько агентов обращаются к одному серверу, MLX-LM Server использует непрерывное пакетирование: новые запросы добавляются к уже выполняемой группе вместо строгой очереди по одному. Для моделей, которые не помещаются даже в 512 ГБ памяти одного компьютера, доклад показывает разделение весов между несколькими Mac. Apple приводит до трёхкратного ускорения на четырёх узлах при использовании Thunderbolt RDMA в macOS 26.2; это снова результат из презентации Apple для конкретной конфигурации.

Core AI и Foundation Models: несколько путей к модели

В «Meet Core AI» Apple представляет фреймворк выполнения моделей на устройстве. Компания называет его основой Apple Intelligence и показывает разработчику полный путь: преобразование и оптимизация модели, запуск на CPU, GPU и Neural Engine, отладка и профилирование. В примерах есть распознавание объекта камерой, сегментация изображения и ответ на вопрос о предмете в кадре.

В обновлении Foundation Models Apple объявляет открытый исходный код самого фреймворка и части новых API. В одном интерфейсе могут быть системная модель на устройстве, Private Cloud Compute Language Model, Core AI Language Model и MLX Language Model. Доклад приписывает Private Cloud Compute окну контекста в 32 тысячи токенов и режим reasoning; это характеристики показанной Apple модели, а не свойство всех облачных моделей.

Также в Foundation Models появились системные инструменты на базе Spotlight и Vision Framework. Они дают модели строго описанные операции поиска и анализа изображения. В этом подходе модель не получает произвольное управление устройством: приложение заранее определяет доступные инструменты.

Важная деталь доклада — выбор модели остаётся частью конфигурации приложения. Локальная модель подходит там, где важны работа без сети и данные на устройстве; Private Cloud Compute Apple показывает как вариант для более тяжёлой задачи. Доклад не говорит, что один маршрут всегда лучше другого: он вводит общий протокол, чтобы приложение могло явно задать источник модели, инструменты и пределы работы.

Core AI не означает, что разработчик обязан взять модель Apple. В докладе показаны импорт и преобразование собственных моделей, каталог готовых вариантов и низкоуровневое описание вычислений. После преобразования инструменты сообщают, какие операции попадут на разные вычислительные блоки. Если формат массива не подходит следующей операции, система тратит время на перестройку данных; профилировщик показывает такие переходы, чтобы их можно было убрать.

В демонстрации визуального вопроса приложение сначала получает кадр камеры, затем передаёт изображение модели, которая связывает визуальные признаки с текстовым запросом. Это отличается от системной модели Foundation Models: Core AI здесь служит средой для собственной модели приложения. Разработчик отвечает за вес модели в поставке, память, время первого запуска и то, на каких устройствах она вообще сможет работать.

Сессия «What’s new in the Foundation Models framework» посвящена другому уровню. Apple обновила системную модель, добавила ей работу с изображениями и инструменты Vision и Spotlight, а также объявила Foundation Models framework открытым исходным кодом. Отдельный пакет Utilities должен обновляться между выпусками операционной системы и служить площадкой для новых конструкций.

Private Cloud Compute появляется не как незаметное продолжение локальной модели, а как отдельный источник с другими возможностями. Apple показывает явный выбор модели в коде и сообщает, что облачный вариант не требует от пользователя отдельной учётной записи. Для watchOS именно облачный путь позволяет использовать Foundation Models там, где собственной большой модели на часах нет. Значит, одинаковый программный интерфейс не делает способы исполнения одинаковыми: один работает на устройстве, другой отправляет запрос в инфраструктуру Apple.

Dynamic Profiles: менять конфигурацию по ходу сессии

Отдельный доклад о построении агентных приложений раскрывает Dynamic Profiles. Это конфигурация внутри сессии языковой модели: инструкции, выбранная модель, доступные инструменты и способ обработки истории. Apple связывает её с тремя проблемами: длинная история упирается в окно контекста, разные шаги требуют разных возможностей, а приложение хочет разделить роли вместо одного безграничного агента.

В показанном приложении-дневнике один профиль помогает с творческой задачей, другой сохраняет результат через инструмент. Историю можно сжать, убрать уже не нужные вызовы инструментов или заменить старый фрагмент кратким итогом. Есть и паттерн «phone-a-friend»: основной сеанс запускает короткий отдельный сеанс для узкой задачи и получает его ответ. Это API для такого устройства сессии, а не готовый продуктовый агент.

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

История при этом не исчезает магически. Доклад показывает, что длинный разговор приходится менять руками: выбрасывать старые технические сообщения, оставлять сжатое резюме или переносить часть работы в отдельный короткий сеанс. Это заметно отличается от образа «вечного помощника», который помнит всё. Apple показывает работу с ограниченным окном контекста как обычную задачу разработчика.

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

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

Оценивать нужно и ответ, и действия

В сессии об оценке агентных приложений Evaluations framework в Xcode 27 используется для проверки функций с моделями. Авторы начинают с малого набора примеров: несколько вручную написанных запросов могут дать хороший результат в тесте, но не покрыть разнообразие реальных случаев. В примере BookTracker команда генерирует структурированные синтетические образцы, проверяет их и только затем использует в наборе оценок.

Главная часть доклада — агентные действия. Для такого приложения недостаточно увидеть приятный финальный текст. Тест может проверить, какой инструмент агент выбрал, с какими аргументами, в каком порядке и остановился ли после нужного действия. В демонстрации ищут книгу и добавляют её в коллекцию; ожидание описывает сами вызовы, а не только ответ модели.

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

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

BookTracker автоматически ставит книгам метки по отзывам. На нескольких аккуратных примерах всё может выглядеть готовым: тексты короткие, тон очевиден, жанры легко различить. Настоящий читатель пишет иначе — сбивчиво, двусмысленно, иногда сразу о нескольких вещах. Поэтому генератор получает структуру будущего примера и условия разнообразия, а редкие случаи отбираются отдельно. Задача оценки здесь состоит не в красивой зелёной отметке, а в том, чтобы неудобный отзыв встретился программе в тесте, а не впервые у пользователя.

После генерации данные проходят отдельную проверку. Часть правил можно выразить обычным кодом: поле не пустое, значение входит в допустимый список, образец не повторяется. Там, где ответ нельзя свести к точному совпадению, применяется оценщик на основе модели. Но качество такой оценки зависит от критериев и проверочного набора с человеческими ответами. Иначе одна модель просто подтвердит вывод другой.

Почему внешний текст не должен становиться командой

Доклад «Secure your app: mitigate risks to agentic features» рассматривает косвенную инъекцию инструкций. Внешний текст — например, приглашение в календаре или пост в ленте — может попасть в контекст модели и содержать скрытую команду. Если у агента есть инструмент с побочным эффектом, такая команда может подтолкнуть его к удалению данных, публикации закрытой информации или другому действию, которого пользователь не просил.

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

Авторы не называют все меры абсолютной защитой: например, специальная разметка недоверенного контекста остаётся вероятностной мерой. Но правило о вызовах инструментов сформулировано намного жёстче: право на действие должно оставаться у кода приложения и пользователя, а не появляться у внешнего текста внутри запроса.

Примеры риска в записи намеренно земные: публикация поста, удаление фотографии без возможности отмены, доступ к календарю или передача закрытых данных. Их объединяет не «опасная модель», а цепочка из недоверенного текста и инструмента, способного изменить мир за пределами диалога. Поэтому авторы советуют проверять каждый вызов перед исполнением, а не только добавлять в запрос фразу «не следуй чужим инструкциям».

В календаре это выглядит почти безобидно: название встречи, время, несколько строк описания. Среди них может прятаться фраза, которая для человека остаётся чужим текстом, а для модели звучит как приказ. Если агент умеет публиковать записи или удалять файлы, атака пытается пройти именно этот короткий путь — от прочитанной строки к настоящему действию. Поэтому Apple предлагает сохранять происхождение данных: календарное приглашение остаётся недоверенным, даже когда лежит рядом с просьбой владельца аккаунта.

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

Apple делит последствия атаки на влияние на решение модели и реальное действие. Первый эффект можно заметить как странный ответ. Второй опаснее: модель вызывает функцию, которая публикует, переводит деньги, управляет устройством или стирает данные. Поэтому защита строится вокруг перехода между этими двумя этапами. Даже если вредная инструкция повлияла на рассуждение, проверка инструмента ещё может остановить операцию.

Подтверждение пользователя тоже должно быть содержательным. Если окно спрашивает только «продолжить?», человек не видит, что именно произойдёт. Перехватчик вызова знает название инструмента и его аргументы, поэтому интерфейс может показать конкретное действие и объект: какой пост будет опубликован, какой файл удалён или к каким данным запрошен доступ. Именно эта информация позволяет человеку принять решение.

Последнее решение остаётся за приложением

В этих шести докладах Apple не собирает единого всезнающего помощника. Она показывает набор деталей, из которых разработчик строит функцию: выбирает локальную или облачную модель, ограничивает историю, перечисляет инструменты, проверяет цепочку действий и ставит подтверждение перед необратимой операцией.

Поэтому самая важная граница проходит не между Mac и облаком, а между текстом и полномочием. В календарном приглашении могут оказаться слова, понятные модели, но право удалить фотографию, изменить запись или отправить сообщение остаётся у кода приложения и у человека перед экраном.