Содержание статьи +
- Кратко
- Зачем это нужно
- Три способности, которых нет у обычной модели
- Использование инструментов: как агент взаимодействует с внешним миром
- Память: почему модель забывает и что с этим делать
- Планирование: превращаем цель в упорядоченные шаги
- Как три примитива работают вместе
- Когда стоит оставить всё простым
- Где здесь Фора Софт
- Ключевые выводы
- Что почитать дальше
Кратко
Модель превращается в агента, когда вы даёте ей три способности, которых у неё изначально нет: инструменты для взаимодействия с внешним миром, память для сохранения знаний между шагами и сессиями, а также планирование – чтобы превратить цель в последовательность действий. Работа с инструментами осуществляется через структурированный вызов: модель указывает нужный инструмент и заполняет JSON-форму, ваш код выполняет запрос и возвращает результат. С конца 2024 года протокол Model Context Protocol стандартизирует способ подключения инструментов.
Память делится на четыре типа, вдохновлённые человеческим восприятием: рабочую, эпизодическую, семантическую и процедурную. Главная сложность в том, что рабочая память модели крайне ограничена, поэтому всё остальное должно храниться во внешнем хранилище и подгружаться по мере необходимости.
Планирование реализуется тремя проверенными подходами – ReAct, plan-and-execute и reflection – и выбор подходящего метода для конкретной задачи напрямую влияет на скорость, стоимость и надёжность работы агента.
Зачем это нужно
В прошлом уроке мы нарисовали цикл агента – восприятие, рассуждение, действие, наблюдение – и объяснили, почему видеопродукты строятся вокруг него. Этот урок раскрывает «двигатель» цикла и выделяет три ключевые компоненты, которые его запускают. Если вы разрабатываете агентную функцию для видеосвязи, видеонаблюдения, OTT, e-learning или телемедицины, именно эти три части станут предметом споров с поставщиками или инженерами, на них будут закладывать бюджет и в них – допускать ошибки. Писать код вам не придётся, но важно понимать, что такое «инструмент», «хранилище памяти» и «паттерн планирования», чтобы оценить, подходит ли предложенный дизайн под вашу задачу. К концу урока вы сможете взглянуть на любое предложение по агенту и проверить: присутствуют ли все три примитива, правильно ли они сбалансированы и не перегружены ли излишними деталями.
Три способности, которых нет у обычной модели
Языковая модель сама по себе – это закрытая система. Она читает текст, который вы ей передаёте, и генерирует ответ. Она не может открыть файл, запустить детектор на видео, вспомнить, что делала вчера, или решить выполнить пять шагов вместо одного. Чтобы превратить такую «закрытую коробку» в агента – систему, способную самостоятельно достигать цели, – ей добавляют три ключевые способности. Каждая из них закрывает определённый пробел.
Первая способность – использование инструментов (tool use) – позволяет модели действовать в мире за пределами собственного текста. Вторая – память (memory) – даёт возможность хранить и вспоминать информацию, выходящую за рамки одного текущего текста. Третья – планирование (planning) – позволяет разбить цель на шаги и определить их последовательность. Уберите любую из них – и агент перестаёт работать: без инструментов он может только говорить; без памяти он забывает всё, как только задача становится длинной; без планирования он не справляется ни с чем, что требует более одного действия. Всё остальное в инженерии агентов – фреймворки, оркестрация, оценка – строится именно на этих трёх основах.
Использование инструментов: как агент взаимодействует с внешним миром
Инструмент – это любая функция, которую агент может вызвать, чтобы выполнить действия, недоступные модели при генерации текста: запустить детектор объектов, расшифровать аудио, обратиться к базе данных, отправить webhook, найти фрагменты в архиве. Механизм, обеспечивающий это, называется технически, но описывает простую вещь: вызов функций (function calling), или, как его ещё называют, tool calling.
Вот вся идея в одном проходе. Вы описываете каждый инструмент модели так же, как заполняете анкету для нового сотрудника: имя (run_person_detector), краткое описание его назначения и список необходимых входных данных с указанием типов – ID камеры (текст), время начала и окончания (таймкоды), порог уверенности (число от 0 до 1). Это описание входов оформлено в формате под названием JSON Schema – это просто точный способ сказать: «это поле – число, это – текст, а это обязательно». Когда модель решает использовать инструмент, она сама ничего не запускает. Она лишь заполняет анкету – выдаёт небольшой блок структурированного текста, в котором указан инструмент и заданы значения для каждого входного параметра. Ваш код читает этот блок, запускает реальную функцию и возвращает результат модели как следующее наблюдение. Модель никогда не взаимодействует с детектором напрямую – она только заполняет анкету и читает полученный ответ.
Надёжность здесь обеспечивается тем, что модель корректно заполняет анкету, и к 2026 году эта задача в значительной степени решена. И OpenAI, и Anthropic предлагают режим структурированного вывода (structured outputs), который ограничивает генерацию на уровне токенов – так что модель не может пропустить обязательное поле или сгенерировать недопустимое значение. Anthropic сообщает о валидности схемы выше 99% при constrained decoding. Для видеопайплайна это особенно важно: неверный таймкод не просто даёт плохое предложение – он направляет детектор в неправильный момент записи и тратит GPU-минуту впустую. Практическое правило: у каждого инструмента должна быть строгая схема, но ваш код всё равно должен проверять результат перед выполнением действий.
Почти всю короткую историю этой технологии подключение инструмента к агенту означало написание отдельного адаптера для каждого – одна интеграция для детектора, другая для сервиса расшифровки, третья для базы данных. Это изменил Model Context Protocol (MCP) – открытый стандарт, представленный Anthropic в ноябре 2024 года, чтобы инструменты могли общаться на одном общем языке. Теперь вместо создания самописного адаптера для каждого инструмента он один раз публикуется как MCP-«сервер», и любой MCP-совместимый агент может его обнаружить, прочитать схему и вызвать. Принятие протокола пошло быстро: OpenAI внедрила MCP в марте 2025 года, а к началу 2026 года было уже около десяти тысяч публичных MCP-серверов. В декабре 2025 года Anthropic передала протокол нейтральному фонду под крылом Linux Foundation, созданному совместно с Block и OpenAI – это сигнал, что MCP стал общей отраслевой инфраструктурой, а не решением одного вендора. Для продуктовой команды вывод очевиден: узнайте, использует ли предлагаемый агент MCP для своих инструментов, потому что ответ покажет, сколько самописного интеграционного кода вам придётся поддерживать.
Частая и дорогая ошибка – перегрузка инструментами: дать агенту сорок инструментов, потому что каждый показался полезным. Чем больше инструментов в распоряжении, тем чаще агент выбирает не тот или зависает, размышляя над выбором, а точность использования падает по мере роста их количества. Агенту-исследователю видео нужен небольшой, но точный набор инструментов – детектор, вызов расшифровки, запрос в архив фрагментов, генератор отчёта, – а не ящик со всем подряд. Начните с минимального набора, необходимого для решения задачи, и добавляйте новый инструмент только тогда, когда реальная работа покажет, что он действительно нужен.
Память: почему модель забывает и что с этим делать
Модель обрабатывает всё содержимое одного текстового блока, который называют контекстным окном (context window) – это объём слов, который она может удерживать «на виду» одновременно. Что попадает в окно – то модель знает в данный момент; что вышло за его пределы – становится недоступным. Это рабочая память модели: она работает быстро, но очень ограничена по сравнению с объёмом реальной видеонагрузки. Именно этот фактор определяет любые решения, касающиеся памяти при проектировании агента.
Посчитайте один раз – и проблема станет очевидной. Модель измеряет текст в токенах (tokens), где один токен – примерно три четверти слова, то есть одно слово составляет около 1,33 токена. Часовая встреча, расшифрованная при обычном темпе речи – около 150 слов в минуту, – даёт 150 × 60 = 9 000 слов, то есть 9 000 × 1,33 ≈ 12 000 токенов. Крупная модель 2026 года с окном в 200 000 токенов может вместить примерно 200 000 ÷ 1,33 ≈ 150 000 слов, или около шестнадцати часов расшифровки. Звучит много – пока вы не попробуете обработать неделю записанных встреч: сорок часов, или около 480 000 токенов, что превышает окно более чем вдвое. «Вставить всё целиком» не масштабируется. Записи и расшифровки реального видеопродукта всегда превышают размер окна.
Выход – держать в окне только активную задачу, а всё остальное хранить вне модели и подгружать нужный кусок, когда он понадобится. Исследователи разделили память агента на четыре вида, заимствованных из того, как в когнитивной науке картировали память человека, и формализованных для языковых агентов в рамках фреймворка CoALA 2023 года из Принстона. Определим каждый простыми словами – до ярлыка:
Память о том, что происходит прямо сейчас – текущая цель, последние наблюдения, текущий план – это рабочая память (working memory). Она существует в контекстном окне и исчезает, когда задача завершена. Память о конкретных прошлых событиях – «во вторник камера погрузочной зоны зафиксировала человека в 23:14» – это эпизодическая память (episodic memory). Она сохраняется во внешнем хранилище и доступна между сессиями. Память об общих фактах, не привязанных к отдельному событию – карта камер объекта, список известных лиц сотрудников, каталог объектов, которые система способна распознавать, – это семантическая память (semantic memory), обычно хранящаяся в поисковой базе. А память о том, как выполнять действия – стандартная процедура расследования, правила, которым агент всегда следует, – это процедурная память (procedural memory), заложенная в системные инструкции агента или приобретённая в процессе обучения.
| Тип памяти | Что хранит | Где живёт | Срок жизни | Пример в видео |
|---|---|---|---|---|
| Рабочая | Текущую задачу, цель, последние шаги | Контекстное окно | Только эта задача | Текущее расследование |
| Эпизодическая | Конкретные прошлые события | Внешнее хранилище (часто vector DB) | Между сессиями | «Человек у камеры 3, 23:14 во вторник» |
| Семантическая | Общие факты и знания | Поисковая база | Долгоживущая | Карта камер, известные лица, каталог объектов |
| Процедурная | Как выполнять задачу | Системный промпт или веса модели | Постоянная | Постоянная процедура расследования |
Инженерный паттерн, объединяющий всё это, – извлечение (retrieval). Долгосрочные виды памяти хранятся во внешнем хранилище; когда они нужны агенту, поиск извлекает лишь несколько релевантных элементов и помещает их в рабочее окно на текущий ход. Это та же технология извлечения, что используется для видеоархивов и подробно рассмотрена в уроке про video RAG по архиву – память и retrieval-расширенная генерация – это одна и та же идея, применяемая к разным данным. Одна из влиятельных систем 2023 года, MemGPT, описала всю задачу как операционную систему: контекстное окно – это быстрая «оперативная память», внешнее хранилище – медленный «диск», а агент подгружает информацию между ними по мере необходимости. Чтобы запомнить эту аналогию, не нужен сложный дизайн – достаточно самой идеи: небольшая быстрая память плюс большая медленная, и механизм, определяющий, что загрузить.
Ошибка, которой стоит избегать, – это «зеркало перегрузки инструментами»: переполнение контекста (context stuffing), стремление втиснуть в окно весь архив, все прошлые расшифровки и длинную инструкцию «чтобы у агента было всё». Это вредит дважды. Во-первых, это стоит денег – вы платите за токен на каждом вызове. Во-вторых, это снижает точность: модели хуже работают с информацией, затерянной в слишком длинном контексте. Держите окно лёгким – задача и несколько фактов, непосредственно к ней относящихся, – а всё остальное пусть хранится во внешнем хранилище.
Планирование: превращаем цель в упорядоченные шаги
Планирование – это способность взять цель, сформулированную одним предложением – «скажи, входил ли кто-нибудь в погрузочную зону после 22:00 прошлой ночью», – и составить упорядоченную последовательность действий, которая на неё отвечает. На практике доказали свою эффективность три формы планирования, которые различаются по времени, когда происходит обдумывание.
Первая, ReAct, чередует размышление и действие по одному шагу за раз: агент сначала размышляет о следующем шаге, выполняет его, наблюдает результат и затем анализирует, что делать дальше. Этот подход формализован в статье ReAct 2022 года и является выбором по умолчанию для интерактивной работы, где следующий шаг действительно зависит от результатов предыдущего. Примером может служить расследование по видеозаписям с камер наблюдения: невозможно заранее спланировать, какой фрагмент рассмотреть подробно, пока детектор не определит, какие фрагменты вообще присутствуют.
Вторая стратегия – plan-and-execute – разделяет обдумывание и исполнение: планировщик заранее составляет полный список шагов, после чего исполнитель последовательно их выполняет, перепланируя только в случае сбоя. Поскольку дорогую модель рассуждений не нужно вызывать перед каждым действием, на задачах с заранее известной структурой этот подход оказывается дешевле и быстрее. Ночная задача, которая принимает, расшифровывает, размечает и индексирует пакет записей, – типичный пример «спланировать, потом исполнить»: шаги одинаковы для каждого файла, поэтому их достаточно определить один раз.
Третья стратегия – reflection (паттерн, представленный в статье Reflexion 2023 года) – добавляет этап самокритики: агент выдаёт результат, оценивает свою работу по отношению к цели, фиксирует, что пошло не так, и пробует снова, учитывая эту обратную связь. Этот подход самый затратный, поскольку требует дополнительных итераций, поэтому его применяют только в задачах, где ошибка дорого обходится, а качество можно однозначно проверить – например, при составлении отчёта о соответствии нормативным требованиям, где каждое утверждение можно сверить с исходными фрагментами.
| Паттерн планирования | Когда происходит обдумывание | Лучше всего для | Относительная стоимость | Пример в видео |
|---|---|---|---|---|
| ReAct | Перед каждым шагом, по одному | Интерактивные задачи; следующий шаг зависит от прошлого | Средняя | Живое расследование в архиве |
| Plan-and-execute | Всё заранее, потом исполнение | Известные повторяемые многошаговые задачи | Ниже | Ночной пакетный приём и разметка |
| Reflection | После результата, затем повтор | Ответственный вывод с проверкой качества | Выше | Отчёт о соответствии по записи |
Под всеми тремя лежит один общий навык: декомпозиция задачи (task decomposition) – разбиение большой цели на достаточно мелкие части, с которыми можно работать. «Расследовать погрузочную зону» превращается в «перечислить камеры, покрывающие зону», затем – «прогнать детектор людей по каждой из них с 22:00 до 06:00», далее – «осмотреть фрагменты-кандидаты» и, наконец, «написать вывод». Паттерн планирования определяет, выдаются ли эти шаги сразу все или по одному, но именно декомпозиция делает расплывчатую цель выполнимой. Полезная проверка при ревью дизайна агента – попросить показать декомпозицию реальной задачи. Если никто не может выписать шаги, агент тоже не справится.
Как три примитива работают вместе
Примитивы – не независимые гаджеты; они тесно связаны на каждом шаге цикла агента. Пройдём один ход расследования на основе видеонаблюдения и увидим, как работают все три. Агент хранит цель и прогресс в рабочей памяти. Его паттерн планирования – здесь ReAct – определяет, что следующим шагом будет запуск детектора людей на камере в зоне погрузки. Он выполняет этот шаг с помощью инструментов, заполняя JSON-форму с ID камеры и временным интервалом. Детектор возвращает три кандидата, которые сохраняются обратно в рабочую память как новое наблюдение. Прежде чем анализировать их, агент сверяется с семантической памятью – картой расположения камер на объекте, чтобы убедиться, что выбранный канал действительно охватывает нужную зону, – и с эпизодической памятью, чтобы проверить, не было ли у этой камеры ложных срабатываний на прошлой неделе. Цикл повторяется снова. Каждый примитив выполнил свою часть работы, и ни один из них не справился бы с задачей в одиночку.
Вот почему порядок этих уроков важен. Урок о цикле агента дал вам основу цикла. Этот урок раскрывает его составляющие. Следующий – об агентных фреймворках – рассказывает об инструментах, с помощью которых инженеры собирают эти компоненты, не создавая всё с нуля: LangGraph, CrewAI и другие существуют именно для управления вызовами инструментов, хранилищами памяти и циклами планирования, чтобы команде не приходилось реализовывать все три элемента вручную.
Когда стоит оставить всё простым
Каждый примитив оправдан только тогда, когда задача в нём действительно нуждается, а самый эффективный агент – тот, что использует их минимально. Если задаче не требуется информация сверх объёма одного окна, ей не нужна внешняя память – не запускайте vector DB ради задачи, которая создаёт краткое содержание десятиминутного видео. Если задача представляет собой фиксированную последовательность шагов, ей не нужен открытый планировщик – просто закодируйте эти шаги, как описано в предыдущем уроке в разделе workflow. Если задача вызывает один сервис один раз, ей нужен один инструмент, а не целый фреймворк. Дисциплина, которая предотвращает крах агентных проектов под тяжестью собственных издержек, – это точное соответствие примитива потребностям: добавляйте память, когда задача выходит за пределы одного окна, планирование – когда шаги заранее неизвестны, а инструменты – по одному, по мере реальной необходимости.
Где здесь Фора Софт
Мы создаём видеопродукты для видеосвязи, стриминга, OTT, видеонаблюдения, e-learning, телемедицины и AR/VR, и когда в функции нужен агент, именно в этих трёх базовых компонентах реализуется проектная работа. В видеонаблюдении это означает дать агенту-исследователю ограниченный набор инструментов и эпизодическую память о прошлых инцидентах, чтобы он не фиксировал одну и ту же тень каждую ночь. В видеосвязи – это агент-копилот встречи, чья семантическая память хранит контекст команды, а рабочая память отслеживает текущий звонок, не пытаясь проанализировать годовой архив расшифровок. В OTT и e-learning – это асинхронные ревьюеры, которые следуют заранее заданной последовательности «принять и разметить», а не начинают с нуля при обработке каждого файла. Наша задача – подобрать подходящий примитив под конкретную задачу и исключить всё, что ей не требуется.
Ключевые выводы
- Инструменты, память и планирование – три ключевые способности, превращающие модель в агента.
- Использование инструментов – это заполнение структурированной формы; MCP теперь обеспечивает стандартизированный интерфейс подключения.
- Контекстное окно – это ограниченная рабочая память; долговременная память должна храниться за пределами модели.
- У агента четыре типа памяти: рабочая, эпизодическая, семантическая и процедурная.
- Применяйте ReAct для интерактивных задач, plan-and-execute – для повторяющихся, reflection – для ответственных.
- Добавляйте каждый примитив только тогда, когда задача выходит за рамки более простого решения.