← Вернуться в блог

ИИ сказал «готово». Как проверить результат?

Определите проверяемые условия завершения, сопоставьте ответ инструмента, запись в системе и её содержимое. Разберите неопределённый результат после тайм-аута без повторной записи.

OOMOL

Отчёт помечен как проверенный, отдельная записка об уведомлении всё ещё помечена как неподтверждённая

Концептуальная иллюстрация, сгенерированная ИИ; содержание — гипотетический пример.

Предположим, вы попросили ИИ сохранить отчёт в командный документ, а затем уведомить ответственного. Через несколько минут он отвечает: «Уже готово».

Вы открываете документ и видите только заголовок и один вводный абзац; затем смотрите уведомление — в указанном канале сообщения нет. Ассистент ничего не выдумал: на каждом вызванном им шаге был получен ответ, просто «уже готово» описывает процесс его вызовов, а не нужный вам результат.

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

Описывайте «готово» как проверяемый результат

«Привести в порядок отчёт и уведомить команду» подходит как краткое описание задачи, но не годится для приёмки. Это можно развернуть в набор условий, которые можно сверить в целевых системах.

Возьмём еженедельный отчёт о конкурентах:

Требование задачиУсловие завершения (где можно проверить)
Привести в порядок отчётОхватывает указанный период, сохраняет ссылки на источники, отмечает отсутствующие материалы
Сохранить документНаходится в указанном рабочем пространстве и под указанной родительской страницей, основной текст совпадает с финальной версией
Уведомить командуПоявляется в указанном канале, ссылка в сообщении ведёт на документ, описанный выше
Передать результатВозвращает расположение документа, запись об уведомлении, а также незавершённые или непроверенные пункты

Формулируя условия завершения, старайтесь сводить их к тому, «кто и где сможет это увидеть». Если требуется только сохранить черновик, уведомлять команду не нужно; если требуется, чтобы коллеги могли прочитать, нужно ещё проверить права доступа целевых участников — то, что документ открывается под учётной записью самого ассистента, не означает, что его откроют все получатели.

«Уже отправлено» и «получатель уже прочитал» тоже нужно разделять. Появление сообщения в канале может подтверждать суждение «опубликовано»; при отсутствии записи о прочтении или подтверждении нельзя делать дальнейший вывод, что получатель увидел сообщение и отреагировал.

Три вида доказательств отвечают на разные вопросы

При проверке есть три вида материалов, и каждый может ответить лишь на часть вопросов.

Ответ инструмента      Какой ответ получен на этот вызов?
                       Статус, ошибка, идентификатор возвращённого объекта
                            │
Целевая запись         Где оказался результат? Можно ли его прочитать обратно?
                       Документ, сообщение, запись в целевом приложении
                            │
Проверка содержимого   Соответствует ли артефакт требованиям?
                       Сверка основного текста, источников, отсутствующих пунктов с условиями завершения

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

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

Проверка содержимого показывает, можно ли передавать артефакт. Документ существует, но в нём всё ещё может отсутствовать раздел; отчёт содержит ссылки на источники, но может ссылаться на данные за неверный период. На этом шаге нужно вернуться к исходным условиям завершения и сверить их пункт за пунктом, а не просто смотреть, «удалось ли создать».

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

Частичный успех нужно сообщать отдельно

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

Ниже — набор гипотетических записей, иллюстрирующих подход, а не фактический журнал вызовов:

ШагНаблюдаемый результатТекущая оценка
Сохранить документВозвращён идентификатор документа; после повторного чтения основной текст полон, расположение верноеСохранён и проверен
Отправить уведомлениеЗапрос завершился тайм-аутом, идентификатор сообщения не полученРезультат неизвестен
Запросить целевой каналУ текущей учётной записи нет прав на чтение сообщенийНевозможно подтвердить с этой учётной записи

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

Тайм-аут означает лишь то, что вызывающая сторона не получила ответ в ожидаемое время. Уведомление могло не быть отправлено, а могло уже быть записано в целевую систему, тогда как ответ потерялся. Поэтому прямой повторный запуск всей задачи может как создать второй документ, так и продублировать уведомление.

Дальнейшую обработку следует начинать с того шага, результат которого неизвестен. Если у учётной записи есть права на чтение, проверьте сообщения по целевому каналу, времени отправки и ссылке на отчёт; если существует запись, соответствующая этой задаче, сверьте содержимое и дополните квитанцию. Если запрос не дал результатов, нужно также учитывать область запроса, права и задержку видимости данных — нельзя сразу записывать «не найдено» как «не отправлено».

Когда доказательства действительно получить не удаётся, попросите человека с соответствующими правами проверить целевой канал и отложите повторную отправку. Только после подтверждения, что отправку нужно повторить, продолжайте шаг уведомления и используйте уже проверенный документ повторно.

Сохраняйте статус «не подтверждено» в итоговом отчёте

Рабочая квитанция может выглядеть так. Содержимое в квадратных скобках заполняется фактическим результатом; если получить его не удалось, укажите это явно и не создавайте правдоподобную на вид ссылку.

Задача: сохранить еженедельный отчёт о конкурентах и уведомить указанный канал

Документ: сохранён и проверен
Расположение: [фактическая ссылка на документ или идентификатор записи]
Проверено: целевое рабочее пространство, родительская страница, основной текст, ссылки на источники

Уведомление: результат не подтверждён
Причина: запрос на отправку завершился тайм-аутом; текущая учётная запись не может читать сообщения целевого канала
Действие: повторная отправка приостановлена во избежание дублирования уведомления

Требуется ваше подтверждение: появилось ли в целевом канале сообщение со ссылкой на указанный выше документ

Не сводите «сбой», «не выполнено» и «результат неизвестен» к одному статусу — они требуют разных действий. Если инструмент явно сообщает об отказе в доступе, обычно нужно проверить учётную запись и права; если задача вообще не дошла до этого шага, нужно решить, продолжать ли; если результат отправки неизвестен, сначала следует проверить записи. Когда причина ошибки не изменилась, повторная отправка одного и того же запроса обычно не меняет результат.

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

Что можно узнать из записей выполнения OOMOL

Слой подключений может предоставить возможность вызова и записи о вызовах, но суждение о приёмке всё равно должна давать сама задача.

Контроль доступа в OOMOL настраивает доступные для вызова операции по connection. При проектировании задачи стоит учитывать два момента: во-первых, нужно одновременно учитывать возможности чтения, необходимые для проверки, — разрешение создавать документы не означает автоматически, что ассистент сможет прочитать обратно соответствующие записи; во-вторых, даже если права позволяют вызвать какую-либо операцию, перед отправкой сообщения, изменением внешних данных, расширением области общего доступа или удалением содержимого всё равно следует подтвердить целевой connection, операцию и окончательные параметры.

При самостоятельном развёртывании OpenConnector последние записи о запусках содержат обезличенные сводки входных данных и ошибки provider; с помощью OOMOL_CONNECT_ALLOWED_ACTIONS и OOMOL_CONNECT_BLOCKED_ACTIONS можно ограничить исполняемые операции. Ассистент видит только schema, scope, статус выполнения и безопасные метки учётных записей. Эти записи подходят для диагностики сбоев вызова, но они описывают вызов, а не то, достигнута ли бизнес-цель. Руководство по самостоятельному развёртыванию

Если задача требует ожидания ручного утверждения, узлы Approval и Wait в Open Flow сохраняют состояние ожидания, и после подтверждения можно продолжить тот же запуск, не повторяя уже завершённые шаги. История запусков связана с соответствующей версией процесса, что позволяет выяснить, какая версия логики создала тот или иной результат. Управляемая версия · Исходный код и самостоятельное развёртывание

Условия завершения, статусы шагов, решения о повторе и итоговую квитанцию должны реализовывать инструкции ассистента, бизнес-код или рабочий процесс. Слой подключений даёт путь вызова и записи, но не решает за вас, прошла ли вся задача приёмку.

Начните с задачи, результат которой можно проверить

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

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

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

Ключ к приёмке не в том, что ассистент сказал в конце, а в том, сможете ли вы по указанному им расположению найти этот результат в целевой системе. Когда каждому шагу записи соответствует проверяемое условие, у фразы «уже готово» появляется основание.