Глава 49 / 51
Том 5 · Расширения, эксплуатация и проекты

xwork: оркестрация агентов

xllm отвечает за «разговор с моделью», xllm-session — за «память о сказанном», а xwork поверх них отвечает за превращение модели в агента, который делает работу: регистрация и исполнение инструментов, политика рабочей области, многоходовая оркестрация, уведомления и планирование компакции.

Введение

Место главы: завершающий камень стека AI-приложений (15-е расширение). xwork v2.3.1 (42 символа) владеет оркестрацией, политикой рабочей области, исполнением инструментов, артефактами и планированием компакции; он не владеет протоколами провайдеров и отрисовкой CLI — границы слоёв с xllm / xllm-session чёткие.

49.1 Границы трёх слоёв

СлойОтвечаетНе отвечает
xllm (гл. 34)построение запросов, три диалекта, SSE, проксиисполнение инструментов, история
xllm-session (гл. 35)бюджет контекста, компакция, journalоркестрация, инструменты
xworkоркестрация агентов, регистрация/исполнение инструментов, политика рабочей области, артефакты, субагенты, уведомления, планирование компакциипротоколы провайдеров, CLI

49.2 Жизненный цикл агента

создание → регистрация инструментов → запуск → приём уведомлений
xwork_agent_config cfg;
xworkAgentConfigInit(&cfg);              /* корень рабочей области, режим, бюджет */
xwork_agent* agent = xworkAgentCreate(&cfg);

xworkAgentRegisterBuiltinTools(agent);     /* встроенные чтение/запись/листинг и т.п. */
xworkAgentRegisterTool(agent, &myTool);   /* пользовательский инструмент */

xwork_agent_run run = xworkAgentRunBegin(agent, "проанализируй этот каталог");
while ( xworkAgentRun(agent, &run) ) {
    xwork_task_notice notices[8];
    uint32 n = xworkAgentTakeTaskNotices(agent, notices, 8);
    for ( uint32 i = 0; i < n; i++ ) { /* уведомления о вызовах/результатах инструментов */ }
}
xworkAgentRunEnd(agent, &run);
xworkAgentDestroy(agent);

42 открытых символа сгруппированы по стадиям жизненного цикла: конфигурация/создание/уничтожение 5, управление запуском 6 (включая отмену/возобновление), регистрация инструментов 10, типы субагентов 5, уведомления и запросы 8, компакция 3, прочее 5. Всё экспортировано в скрипты и во вложенный TCC.

49.3 Рабочая область и субагенты

Рабочая область xwork — граница песочницы агента: исследование с чтением/записью (внутренняя реализация или делегирование внешним rg/fd), отметки прочитанного с откатом на каталог, подключение бюджета. Система типов субагентов (xworkAgentRegisterSubagentType) позволяет агенту порождать по типу субагентов только на чтение (RunReadOnlySubagent) или полноправных — получается топология сотрудничества многих агентов.

Планирование компакции (xworkAgentCompact / MaybeCompact) работает в связке с операторами компакции xllm-session: длинные диалоги автоматически сходятся по контексту, а отметки прочитанного не дают потерять артефакты инструментов.

49.4 Практика: agent-demo

Каталог release/agent-demo/ в репозитории — полнофункциональная витрина xwork: однофайловый режим xs + браузерный фронтенд NativeHarness + движок ходов на C-скриптах (протокол поверх HTTP-опроса), приёмка в браузере пройдена целиком — включая шлюз согласования (вызовы инструментов требуют ручного одобрения), панели diff/plan и колонку трассировки исполнения. Это законченный пример связки четырёх библиотек: xwork + xllm + xllm-session + сайтовый VFS.

Расширение webview (15-я библиотека, 2 символа-пробы) и сервисный узел class: "app" добавляют этому стеку настольную форму: локальный HTTP + окно WebView2, а вместе с публикацией одним файлом получается настольное агентское приложение «по двойному щелчку».

Типичные ошибки

Грабли: потокобезопасность в колбэках инструментовИсполнение инструмента может вызывать колбэк в потоке worker — общее состояние защищайте примитивами xrt либо пересылайте обратно в поток агента (см. движок ходов в agent-demo).
Грабли: бюджет не действуетБюджеты подключаются через xllm-session — убедитесь, что собран вариант с xllm-session (выбор xwork в параметрах сборки автоматически тянет цепочку зависимостей).

Упражнения

База
Через RegisterBuiltinTools + Run прогоните один ход агента «перечисли файлы рабочей области».
Продвинутый
Зарегистрируйте пользовательский инструмент (например, чтение базы данных) и печатайте в потоке уведомлений каждый вызов и результат.
Зачёт
Упростите идею agent-demo из 49.4 в собственный шлюз согласования: пауза перед каждым вызовом инструмента и ожидание ответа HTTP-эндпоинта одобрения.

Итоги

xwork = слой оркестрации агентов (42 символа, 15-е расширение) · три слоя = xllm (вызовы) / session (память) / work (оркестрация) · регистрация инструментов + субагенты + уведомления = полноценная форма агента · agent-demo = практика связки четырёх библиотек