801: Пакет/Агент
- Реализует:
Эталонная реализация протоколов Актов Становления. Она предоставляет среду выполнения для запуска ИИ-центричных рабочих процессов, управляемых схемами, от атомарных Запросов до сложных Агентов с сохранением состояния.
Библиотека @augceo/agent — это каноническая реализация агентной архитектуры, определённой в Актах. В отличие от фреймворков, которые ставят во главу угла инженерию промптов, эта библиотека уделяет основное внимание соблюдению протокола. Она реализует строгую машину состояний, где каждое взаимодействие строго типизировано, управляется схемой и является отдельным.
Акты (RFC)
Эта библиотека создана непосредственно на основе спецификаций, определённых в Актах. Каждая функция соответствует определённому документу протокола.
Эта модульная архитектура спроектирована для компонуемости и расширяемости. Вместо монолитного фреймворка каждый Акт определяет отдельную возможность. Вы можете подключать только те функции, которые вам нужны — будь то простое использование Инструментов или сложная многоагентная система с сохранением состояния и делегированием.
Основные Примитивы
- 001: Агент/Запрос: Атомарная единица вычислений.
- Преобразует
Context+Schemaв структурированноеSolution. - Поддерживает мультиплексирование (одновременное создание нескольких решений).
- Является основой для всех поведений агентов более высокого уровня.
- Преобразует
- 002: Агент/Инструмент: Определение возможности в виде схемы.
- Определяет интерфейс для действий отдельно от их реализации.
- Позволяет LLM выбирать поведения на основе структурированных метаданных.
- 003: Агент/Действие: Явная, детерминированная реализация Инструмента в коде.
- Связывает абстрактные схемы Инструментов с реальным кодом.
- Поддерживает паттерн Двойного Реестра (разделение интерфейса и реализации).
- 004: Агент/Вызов: Конкретный экземпляр использования Инструмента.
- Представляет собой параметризованный запрос на выполнение.
- Служит стандартизированным транспортом между намерением LLM и действием системы.
Данные и Состояние
- 005: Агент/Данные: Протокол для структурированной информации в контексте.
- Предоставляет единую оболочку для всех постоянных сообщений контекста.
- Позволяет структурированно объединять информацию.
- 006: Агент/Ввод: Превращает общий Запрос в повторно используемую функцию.
- Определяет строгие входные параметры для Запроса.
- Позволяет автоматически генерировать пользовательский интерфейс и выполнять типобезопасные вызовы.
- 009: Агент/Состояние: Постоянная память, сохраняющаяся между несколькими шагами.
- Служит общим черновиком для цикла выполнения.
- Позволяет возобновлять работу и создавать рабочие процессы с сохранением состояния.
- 016: Агент/Мета: Управляет идентификацией и происхождением.
- Отслеживает версионирование, ветвление и источник.
- Позволяет агентам автономно развиваться и обновлять свои версии.
Связывание и Поток
- 007: Агент/Переменные: Динамические ссылки.
- Использует синтаксис
†kind.pathдля связывания выходов с входами. - Позволяет Инструментам читать из контекста без копирования данных.
- Использует синтаксис
- 008: Агент/Вывод: Механизм записи результата.
- Использует
_outputPath, чтобы указать, где должен храниться результат Инструмента. - Позволяет связывать операции в цепочки через состояние.
- Использует
- 011: Агент/Выражения: Логика в потоке данных.
- Поддерживает ветвление (
||) для резервной или условной логики. - Поддерживает разветвление (
&&) для параллельного распределения данных.
- Поддерживает ветвление (
Орхестрация
- 010: Агент/Цикл: Движок выполнения.
- Повторяет Запросы до тех пор, пока не будет достигнута цель.
- Управляет циклом обратной связи: создание вызовов, их выполнение и обновление контекста.
- 012: Агент/План: Декларативная стратегия.
- Представляет рабочий процесс в виде графа потока данных из Вызовов Инструментов.
- Разделяет планирование (рассуждение) и исполнение (действие).
- 013: Агент/Экземплирование: Масштабирование параллельного выполнения.
- Группирует сообщения по ID
_instanceдля запуска параллельных контекстов. - Масштабирует один План на неограниченное количество элементов данных.
- Группирует сообщения по ID
- 014: Агент/Делегат: Модульная композиция.
- Изолирует выполнение в изолированных подзапросах.
- Позволяет вкладывать агентов в агентов (Агенты как Инструменты).
- 015: Агент/Области: Управление контекстом.
- 017: Агент/Советник: Структурированное обсуждение.
- Внедряет определённые персоны для рассуждения перед действием.
- Обеспечивает взвешенное голосование и стратегическое руководство для основного агента.
Концепции
В то время как Акты, описанные выше, определяют механизмы, следующие концепции определяют философию архитектуры:
-
104: Концепция/Скрытое: Поведение по умолчанию "Без Кода".
- Если для Инструмента не зарегистрировано ни одного Действия, Агент по умолчанию использует Скрытое Исполнение.
- Он использует внутренние рассуждения LLM ("скрытое пространство"), чтобы симулировать результат инструмента.
- Это позволяет прототипировать сложные рабочие процессы, используя только схемы, и добавлять код лишь при необходимости.
-
Единство Планирования и Исполнения:
-
Человек-в-цикле (HITL):
Agentпредоставляет колбэкconfirm().- Это позволяет хост-системе перехватывать, проверять и одобрять каждый Вызов Инструмента перед его выполнением.
- Если вызов отклонён или изменён человеком, обратная связь возвращается агенту для корректировки его плана.
-
Восстановление после ошибок:
- Ошибки не являются фатальными. Если Инструмент вызывает исключение, оно фиксируется как Сообщение об ошибке в контексте.
- Агент "видит" сбой на следующем шаге и использует свои рассуждения для самокоррекции (например, повторяет попытку с другими параметрами или выбирает альтернативную стратегию).
Агент vs. Запрос
Библиотека различает низкоуровневый Запрос и высокоуровневого Агента.
Запрос (Низкоуровневый)
Request — это одна атомарная транзакция с LLM. Он предполагает соотношение 1<1>1> между входным контекстом/схемой и выходным решением.
- Управление: Он не зацикливается. Он выполняет ровно один шаг генерации.
- Мультиплексирование: Он поддерживает создание нескольких возможных решений из одного и того же контекста (с помощью параметра
n). - Стриминг и Колбэки: Он предоставляет механизм
callbackPath. Это позволяет системе перехватывать и обрабатывать определённые части структуры (например,calls) по мере их поступления, обеспечивая выполнение инструментов в реальном времени, пока LLM ещё генерирует остальную часть ответа.
Агент (Высокоуровневый)
Agent — это Цикл Выполнения, который управляет последовательностью Запросов.
- Зацикливание: Он многократно вызывает Запросы, выполняя полученные Вызовы Инструментов и возвращая результат обратно в контекст.
- Завершение: Он продолжает цикл до тех пор, пока система не решит записать конечный
output. - Сходимость: По соглашению, желаемая схема результата пользователя оборачивается в свойство
output, которое может быть null. Цикл считает свою работу завершённой только тогда, когда это свойство заполнено.
Единая Структура Вывода
Чтобы избежать двойственности между двумя режимами, и Агент, и Запрос нормализуют свой вывод. Пользовательская схема всегда оборачивается в свойство output.
- Запрос: Возвращает
Data<T>[](массив решений, обычно кортеж из одного элемента). - Агент: Возвращает
Data<T>(конечное сошедшееся состояние).
Видение Типобезопасности
Эта библиотека использует Схимию, чтобы обеспечить сквозную типобезопасность без генерации кода. Цель состоит в том, чтобы типы TypeScript идеально отражали преобразования, применяемые конвейером агента во время выполнения.
Проблема
В агентной системе окончательная схема, отправляемая в LLM, редко совпадает с той, что определил пользователь. Это композиция из:
- Схемы пользователя (цель).
- Системных функций (Вызовы Инструментов, Советники, Мета-свойства).
Эти функции переключаются Обработчиками Сообщений. Например, добавление сообщения Advisor в контекст активирует обработчик, который внедряет массив advisors в конечную схему вывода.
Решение: Конвейер Редукции Типов
Мы представляем себе конвейер системы типов, который отражает логику времени выполнения. Подобно тому, как обработчики сообщений преобразуют JSON-схему во время выполнения, они также должны редуцировать и преобразовывать выведенный тип TypeScript.
Процесс работает следующим образом:
- Вывод типа: Схема пользователя преобразуется в тип
Tс помощьюFromSchema<S>. - Редукция: Каждый активный Обработчик Сообщений оборачивает или изменяет
T.- Обработчик Советника: Добавляет
{ advisors: Advisor[] } - Обработчик Инструмента: Добавляет
{ calls: Call[] } - Обработчик Мета: Добавляет
{ meta: Meta }
- Обработчик Советника: Добавляет
- Реконструкция: Конечный тип представляет собой строгое пересечение намерения пользователя и возможностей системы.
Расширяемость
Эта архитектура спроектирована быть открытой.
- Пользовательские Обработчики: Пользователи могут регистрировать свои собственные обработчики сообщений. Эти обработчики могут изменять схему (во время выполнения) и участвовать в редукции типов (во время компиляции).
- Реестр Инструментов: Инструменты регистрируются глобально через
Tool.register. Это определяет интерфейс возможности. - Реестр Действий: Реализации регистрируются через
Activity.register. Это определяет логику выполнения (код) для инструмента. - Реестр Советников: (Планируется) Советники будут регистрироваться глобально, что позволит подключать определённые персоны и модели рассуждений к любому агенту.
- Реестр Схем: Схемы можно регистрировать через Схимию и ссылаться на них с помощью
$ref(например,"$ref": "MySchema"), что позволяет повторно использовать типы по всей системе.
Рассматривая схему как единственный источник истины и позволяя системе типов следовать за ней, мы гарантируем, что если код компилируется, он соответствует протоколу.
Видение Наблюдаемости и Стандартизации
Мы стремимся к строгой стандартизации операционных аспектов выполнения агентов, обеспечивая согласованность между различными провайдерами LLM.
Нормализация Токенов
Разные провайдеры по-разному сообщают об использовании. Мы планируем нормализовать эту статистику в единый интерфейс, который отслеживает:
- Входные Токены: Использование окна контекста.
- Выходные Токены: Сгенерированный контент.
- Токены Мышления: Бюджеты на рассуждения в режиме "цепочки мыслей".
Доступ к Мыслительному Процессу
Поскольку модели всё чаще предоставляют доступ к своим внутренним рассуждениям (CoT), мы рассматриваем это как первоклассного участника протокола:
- Доступ: Предоставление потока необработанного мыслительного процесса на уровень приложения.
- Бюджетирование: Стандартизация параметров "бюджета мышления" у разных провайдеров, что позволяет агентам запрашивать определённую глубину рассуждений независимо от базовой модели.
Архитектура с Учётом Кэша
Мы вводим явную поддержку Кэширования Контекста для значительного сокращения задержек и затрат при работе долгоживущих агентов.
Метрики Токенов
Мы будем отслеживать определённые метрики использования кэша для количественной оценки экономии:
- Токены, Прочитанные из Кэша: Токены, полученные из кэша.
- Токены, Записанные в Кэш: Новые токены, добавленные в кэш.
Оптимизация Только для Добавления
Для максимального использования Кэширования Префиксов библиотека вводит специальные режимы работы, которые позволяют избежать инвалидации кэша:
- Добавление Вместо Перезаписи: Предпочтение добавления новых дельт
DataилиMessageвместо полной замены контекста. - Логика Слияния: Использование естественного поведения слияния
DataиAdvisorsдля аддитивного обновления состояния. - Режим Вывода: Структурирование выводов для линейного расширения истории диалога.
Управление Контекстом
Чтобы сбалансировать попадания в кэш с ограничениями окна контекста, мы предоставим настраиваемое Сжатие Контекста:
- Ленивое Сжатие: Оптимизированная процедура, которая сворачивает лог "только для добавления" в снимок только при необходимости, сохраняя префикс кэша как можно дольше.
- Конфигурация: Переключатель "Оптимизировано для Кэша" для управления этими режимами в зависимости от конкретных требований к задержке/стоимости рабочей нагрузки.