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-servererp-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 туннель.
Что хочет бизнес
- Один интерфейс — чат в админке. Floating chat-bubble в правом нижнем углу, доступен на любой странице админки франшизы.
- Пользователь пишет команду на естественном языке — «создай заказ маргарита и кола на вынос», «что в стоп-листе сегодня?», «сколько продали за день в Арбате».
- Агент сам решает что делать — извлекает намерение, вызывает нужные методы ERP-API.
- Прозрачность: пользователь видит что агент делает (стримит ход рассуждения и каждый tool_call).
- Авторизация — от имени юзера: агент действует ровно как сам юзер, никаких суперправ.
Пользователи
| Профиль | Permissions | Что может |
|---|---|---|
| Владелец франшизы / партнёра | agent.use (по умолчанию входит в системную «Администратор») | Полный доступ к агенту — все 5 базовых tools |
| Менеджер ТТ | agent.use (опционально, если выдан) | Те же tools, но в scope своей ТТ (фильтры срабатывают на бэке) |
| Кассир | По умолчанию нет agent.use | Не использует агента (POS — другой канал) |
| Администратор | agent.config | Включает агента, видит логи, может временно отключить |
Базовый набор инструментов (MVP)
| Tool | Сервис | HTTP | Параметры |
|---|---|---|---|
find_products | Catalog Service | GET /api/v1/admin/products?search=...&store_id=... | query, store_id |
create_order | Order Service | POST /api/v1/admin/orders | store_id, channel (takeaway/dine_in/delivery), items[{product_id, quantity}] |
get_stoplist | Catalog Service | GET /api/v1/admin/stop-list/store/{store_id} | store_id |
add_to_stoplist | Catalog Service | POST /api/v1/admin/stop-list | product_id, store_id |
get_sales_summary | Order Service | GET /api/v1/admin/orders/summary?store_id=...&date=today | store_id, date |
Системный промпт — фиксированный, описывает роль («ты помощник владельца франшизы кафе»), стиль ответа (короткие фразы, на русском, всегда подтверждай результат), правила безопасности (не выдумывать ID, всегда искать через find_products перед create_order).
Acceptance criteria для демо 29.05
- На любой странице админки видна кнопка «AI-агент» (floating bubble bottom-right).
- По клику открывается чат-окно с историей текущей сессии и input-полем.
- Запрос «создай заказ на маргариту и колу на вынос для точки Арбат»:
- Агент за ≤ 3 сек начинает стримить ход (видны блоки
🔍 ищу товары...,✓ нашёл,📝 создаю заказ...). - Через ≤ 15 сек ответ: «Заказ #1234 создан: Пицца Маргарита (1), Кока-кола (1). Сумма 850 ₽».
- Заказ виден в Order Service (через UI) и на KDS.
- Агент за ≤ 3 сек начинает стримить ход (видны блоки
- Запрос «что в стоп-листе?» — агент показывает список без позиции
id(русские названия). - Кнопка «Очистить чат» в чате.
- История чата сохраняется per-юзер (не теряется при перезагрузке страницы).
- Если 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-service | Permissions 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 |
Ссылки
- ADR-022 — выбор технологии
- ADR-023 — LLM-стек
- Бизнес-спека AI-агент (будет создан)
- OpenClaw Agent (будет создан)
- Frontend AI-агент (будет создан)
- Декомпозиция BR 6.3 (будет создан)