BR 6.3: OpenClaw — текстовый AI-агент через REST

Демо 29.05.2026 — Сценарий 3 (info-агент, ревизия 2)

Пользователь в чате на админке спрашивает «что в стоплисте Арбат-флагмана», «сколько продали за неделю в Арбате», «что такое kitchen-station (ADR-XX)». Агент за 3-10 сек: ищет ТТ, дёргает API, либо лезет в Obsidian-vault за документацией, формирует ответ.

create_order — отложено на fast-follow PR (нужен новый admin endpoint в order-service). На демо — info-агент с доступом к API + vault.

Ревизия 2 — 2026-05-13 (поздний вечер)

Самопис erp-openclaw-agent + erp-llm-gateway заменён на OpenClaw + наш custom MCP-server erp-openclaw-skills. Подробнее: ADR-022 (revision 2). erp-llm-gateway окончательно отказан 2026-05-13.

Контекст

Закрывается блокер ADR-022: выбрана архитектура — OpenClaw Gateway (mainstream open-source, 371k звёзд, MIT) с custom MCP-server для ERP API + filesystem MCP для доступа к obsidian-vault. Computer use и голосовой ввод отложены.

LLM-инфраструктура — см. ADR-023: Qwen 2.5 14B на Windows WSL2, доступ через autossh reverse SSH туннель.

Что хочет бизнес

  1. Один интерфейс — чат в админке. Floating chat-bubble в правом нижнем углу, доступен на любой странице админки франшизы.
  2. Пользователь пишет команду на естественном языке — «создай заказ маргарита и кола на вынос», «что в стоп-листе сегодня?», «сколько продали за день в Арбате».
  3. Агент сам решает что делать — извлекает намерение, вызывает нужные методы ERP-API.
  4. Прозрачность: пользователь видит что агент делает (стримит ход рассуждения и каждый tool_call).
  5. Авторизация — от имени юзера: агент действует ровно как сам юзер, никаких суперправ.

Пользователи

ПрофильPermissionsЧто может
Владелец франшизы / партнёраagent.use (по умолчанию входит в системную «Администратор»)Полный доступ к агенту — все 5 базовых tools
Менеджер ТТagent.use (опционально, если выдан)Те же tools, но в scope своей ТТ (фильтры срабатывают на бэке)
КассирПо умолчанию нет agent.useНе использует агента (POS — другой канал)
Администраторagent.configВключает агента, видит логи, может временно отключить

Базовый набор инструментов (MVP)

ToolСервисHTTPПараметры
find_productsCatalog ServiceGET /api/v1/admin/products?search=...&store_id=...query, store_id
create_orderOrder ServicePOST /api/v1/admin/ordersstore_id, channel (takeaway/dine_in/delivery), items[{product_id, quantity}]
get_stoplistCatalog ServiceGET /api/v1/admin/stop-list/store/{store_id}store_id
add_to_stoplistCatalog ServicePOST /api/v1/admin/stop-listproduct_id, store_id
get_sales_summaryOrder ServiceGET /api/v1/admin/orders/summary?store_id=...&date=todaystore_id, date

Системный промпт — фиксированный, описывает роль («ты помощник владельца франшизы кафе»), стиль ответа (короткие фразы, на русском, всегда подтверждай результат), правила безопасности (не выдумывать ID, всегда искать через find_products перед create_order).

Acceptance criteria для демо 29.05

  1. На любой странице админки видна кнопка «AI-агент» (floating bubble bottom-right).
  2. По клику открывается чат-окно с историей текущей сессии и input-полем.
  3. Запрос «создай заказ на маргариту и колу на вынос для точки Арбат»:
    • Агент за ≤ 3 сек начинает стримить ход (видны блоки 🔍 ищу товары..., ✓ нашёл, 📝 создаю заказ...).
    • Через ≤ 15 сек ответ: «Заказ #1234 создан: Пицца Маргарита (1), Кока-кола (1). Сумма 850 ₽».
    • Заказ виден в Order Service (через UI) и на KDS.
  4. Запрос «что в стоп-листе?» — агент показывает список без позиции id (русские названия).
  5. Кнопка «Очистить чат» в чате.
  6. История чата сохраняется per-юзер (не теряется при перезагрузке страницы).
  7. Если LLM-хост недоступен — UI показывает понятную ошибку «AI временно недоступен», а не белый экран.

Затронутые сервисы

КомпонентЧто меняется
erp-openclaw-agent (Node.js + TS, порт 3031)ReAct-цикл, регистр tools (OpenAPI mapping), стрим SSE, история conversations. Самопис erp-llm-gateway (порт 3030) отказан 2026-05-13 — не оправдал ожиданий
erp-admin (BFF + web)BFF-роут POST /api/v1/admin/agent/chat → openclaw-agent; floating chat-bubble в Layout; страница чата
erp-user-servicePermissions agent.use, agent.config (миграция, привязка к системной «Администратор»)
erp-catalog-serviceБез изменений — API уже есть
erp-order-serviceБез изменений — API уже есть

Что НЕ входит в скоуп

  • Голосовой ввод (STT, микрофон) — Phase 2 после демо
  • Computer use, программный курсор — отменено ADR-022
  • Память агента между сессиями (только в рамках текущего диалога)
  • Кастомизация системного промпта пользователем
  • Голосовой ответ (TTS) — Phase 3
  • Multi-turn без анкеров — только сессии (на ≤ 20 ходов)
  • Векторная база, RAG по документации — Phase 2
  • Безопасность от prompt injection через данные ERP (товары с подозрительными названиями) — Phase 2

Open questions (закрыты)

ВопросРешение
Какая модель LLM?Qwen 2.5 14B Instruct Q5_K_M (ADR-023)
Где хостится?Windows WSL2 Алексея + autossh tunnel (ADR-023)
Текст / голос?Только текст в MVP, голос — Phase 2
Computer use или REST API?REST API (ADR-022)
UI где?Floating chat-bubble на всех страницах админки франшизы
Авторизация?Действует от имени юзера, передаёт его JWT downstream

Ссылки