Как работает разговорный ИИ-агент изнутри
6 этапов одного диалогового хода в OpenClaw — с реальной задержкой, стоимостью за разговор и 4 уровнями защиты от галлюцинаций.
Equipe OpenClaw · Time de Engenharia & Produto
A Equipe OpenClaw é formada por engenheiros, designers e especialistas em IA dedicados a construir a melhor plataforma de agentes conversacionais para negócios brasileiros. Combinamos expertise…
Как устроен разговорный ИИ-агент изнутри (Архитектура OpenClaw)
Как работает разговорный ИИ-агент на практике, ход за ходом? Этот пост открывает чёрный ящик OpenClaw: от момента, когда сообщение клиента приходит в WhatsApp, до текста, который агент пишет в ответ. Будет технично. Стоит прочитать, если вы принимаете решения по архитектуре продукта, если собираетесь покупать решение и хотите оценить его глубину, или если вам просто интересно, что происходит за кулисами разговора.
TL;DR: каждый ход проходит через 6 стадий — приём, разрешение контекста, выбор навыков, принятие решения о следующем действии, выполнение с защитными ограничениями, сохранение памяти. Весь цикл выполняется за <2 секунды на edge-инфраструктуре Cloudflare, без выделенного сервера.
Почему архитектура важна
Разговорный агент, который вроде бы работает на демо, но ломается в продакшене, обычно имеет одну из этих 4 проблем:
- Высокая задержка — клиент ждёт ответа 8 секунд, разговор умирает.
- Неконтролируемые галлюцинации — агент выдумывает цену, расписание, политику.
- Потеря контекста — клиент возвращается через 2 дня, а агент «забыл» всё.
- Неконтролируемые расходы — каждый длинный разговор раздувает промпт, и вы платите целое состояние за токены.
Все 4 — это выбор архитектуры, а не ограничения модели. OpenClaw был построен так, чтобы избежать всех 4 — и путь к пониманию лежит через рассмотрение цикла одного хода.
Цикл одного хода (6 стадий)
Представьте, что клиент только что отправил сообщение "quero marcar pra sábado de manhã". Что происходит между «received» и ответом агента?
Стадия 1 — Приём (edge worker, <50ms)
Сообщение из WhatsApp приходит через вебхук Meta напрямую в Cloudflare Worker на ближайшей географически точке присутствия (PoP). В Бразилии это означает Сан-Паулу или Рио, сетевая задержка < 20ms.
Worker выполняет три действия:
- Проверяет подпись вебхука (HMAC по секрету WABA).
- Определяет тенанта по номеру телефона получателя (мультитенантность по
to_number). - Нормализует полезную нагрузку — аудио превращается в транскрипцию, изображение — в описание, геолокация — в
{lat,lng}, текст остаётся как есть.
В конце стадии 1 у вас есть объект {tenant_id, conversation_id, user_message}, готовый для следующего шага.
Стадия 2 — Разрешение контекста (D1 + KV, ~80ms)
Агенту нужны 3 элемента контекста перед принятием решения:
- Недавняя история разговора (последние N релевантных ходов).
- Долгосрочная память о клиенте (предпочтения, история покупок, заметки).
- Состояние агента (персона, подключённые skills, правила).
Всё это хранится в D1 (распределённый SQLite от Cloudflare). D1 заменяет традиционные Postgres/Mongo — никакого сервера БД для обслуживания, доступ за несколько мс из worker'а, мультитенантность по tenant_id.
Ключевой момент: мы не загружаем весь разговор в промпт. Memory Manager v2 от OpenClaw (описан в нашей внутренней документации) выбирает только релевантные ходы для текущего хода (последние N + N с высокой семантической релевантностью). Это позволяет поддерживать предсказуемый расход токенов даже в разговорах на 100+ ходов.
Этап 3 — Выбор skills (policy engine, ~20мс)
У каждого агента есть набор доступных skills — функций, которые он может вызывать. Примеры: consultar_calendario, criar_evento, gerar_link_pagamento, consultar_pedido, chamar_humano.
Для сообщения "quero marcar pra sábado de manhã" policy engine фильтрует:
- Skills, совместимые с обнаруженным намерением (запись на приём).
- Skills, разрешённые для данной фазы разговора (не все skills доступны постоянно).
- Skills, которые этот tenant подключил (calendar появляется только если tenant выполнил интеграцию).
В итоге вы получаете небольшое подмножество skills, передаваемое модели — не все 50 возможных, а только 4, которые имеют смысл в данном контексте. Это радикально снижает вероятность того, что модель вызовет неправильный skill.
Этап 4 — Принятие решения (LLM call, 400-1200мс)
Теперь в дело вступает модель. OpenClaw выполняет один вызов к frontier LLM (Anthropic Claude, OpenAI GPT, Google Gemini — настраивается для каждого tenant) с:
- System prompt = персона агента + правила + доступные skills.
- History = ходы, отобранные на этапе 2.
- User message = сообщение текущего хода.
Модель отвечает одним из двух вариантов:
- Финальный ответ (текст напрямую клиенту).
- Tool call (запрос на выполнение конкретного skill с параметрами).
В примере "quero marcar pra sábado de manhã" модель обычно возвращает:
{
"tool": "consultar_calendario",
"args": { "date_range": "2026-04-19 06:00 to 12:00" }
}
Этап 5 — Выполнение с guard-rails (варьируется, ~100-500мс)
Skill не выполняется в модели. Он выполняется в нашем коде, который:
- Валидирует параметры (date_range имеет правильный формат? соответствует правилам тенанта?).
- Проверяет разрешения (этот агент имеет право запрашивать этот календарь?).
- Выполняет вызов (Google Calendar API в данном случае).
- Возвращает структурированный результат модели.
Почему это важно? Потому что модель никогда не фабрикует результат. Если календарь вернул [10h, 11h], именно это и попадёт в следующий вызов. Если скилл завершился с ошибкой, модель знает, что произошёл сбой. Нулевой риск того, что агент «выдумает», будто есть свободное время в 9 утра, когда его нет.
Для случаев, связанных с чувствительной информацией (цена, сроки, имя клиента), пайплайн принудительно использует tool call — не позволяет модели отвечать из собственных «знаний». Это устраняет самый распространённый класс галлюцинаций в коммерческих агентах.
Этап 6 — Ответ и персистентность (~50ms)
Имея результат скилла на руках, модель делает второй вызов — теперь для формирования финального ответа клиенту. Пример:
"Tenho sábado às 10h e 11h. Qual prefere?"
Параллельно воркер:
- Отправляет сообщение обратно через API WhatsApp.
- Сохраняет полный ход диалога (user + assistant + tool calls + длительность) в D1.
- Обновляет долгосрочную память, если в ходе диалога появился новый факт (например: «клиент предпочитает субботу»).
- Генерирует событие наблюдаемости (метрика латентности, стоимость токенов, коэффициент эскалации).
Всё это выполняется параллельно. Персистентность не блокирует отправку сообщения — клиент не ждёт D1.
Где находится защита от галлюцинаций
Агент, который галлюцинирует в продакшене, быстро теряет доверие. В OpenClaw есть 4 линии защиты:
- Принудительный источник истины. Фактические данные (цена, время, имя) всегда берутся из скилла, никогда из модели самостоятельно.
- Двойная проверка чувствительных данных. Запись на приём подтверждается с клиентом перед сохранением. Оплата подтверждается перед предоставлением доступа.
- Явные негативные правила. Персона каждого агента включает «никогда не выдумывай X, Y, Z» — модель подчиняется.
- Фоллбэк на человека. Когда ни один скилл не покрывает вопрос, агент говорит
"deixa eu checar com o time"и создаёт тикет — не угадывает.
В аудитах, которые мы проводили за последние 6 месяцев (реальные разговоры, проверенные вручную), уровень фактических галлюцинаций составил менее 0,3% от всех ходов диалога — и почти все случаи были вызваны конфигурацией (тенант забыл включить соответствующий скилл), а не ошибкой модели.
Стоимость одного разговора
Хорошая архитектура невидима, пока вы не посмотрите на счёт. Учитывая, что каждый ход делает 1-2 вызова LLM + запросы к D1, типичная стоимость за полный разговор (10-15 ходов) составляет:
Equipe OpenClaw
Опубликовано 27 мая 2026 г.