/v1/embeddings под управлением OpenClaw и заранее прогреть зависимости RAG (веса, индексы, каталоги Hugging Face), чтобы ночные сборки не упирались в холодный диск. Опирайтесь на актуальную справку openclaw onboard в документации поставщика (в т.ч. флаги --install-daemon, --gateway-token-ref-env) и параллельно закройте периметр: безопасность шлюза, многоуровневый кеш моделей, политика повторов при сбоях.
- Расхождение токена: интерактивная оболочка и
launchdвидят разные значенияOPENCLAW_GATEWAY_TOKEN— эндпоинт отвечает 401, хотя «статус здоровья» зелёный. - Холодный первый запрос: локальные GGUF или внешний API подгружаются при первом обращении, что ломает SLO префлайта CI.
- Шум алертов: исходящий webhook на мониторинг без backoff и без различения 401 и 429 забивает канал инцидентов.
Цель и предпосылки
Цель. После любой перезагрузки узла шлюз поднимается автоматически, принимает защищённый POST /v1/embeddings на loopback (или за reverse proxy с TLS), возвращает вектор фиксированной размерности для выбранной модели, а отдельный job CI заранее кладёт те же артефакты в согласованный путь. Любая ошибка в цепочке даёт структурированный JSON наружу только на разрешённые хосты.
Предпосылки. Поддерживаемая ветка Node (на практике часто 22 LTS), аккаунт службы без интерактивных запросов пароля, корпоративный корпус TLS при необходимости через NODE_EXTRA_CA_CERTS. Для удалённого ws:// в доверенной сети документация OpenClaw допускает OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 только на этапе onboard — не распространяйте это на публичные интерфейсы.
Критерий готовности. Два последовательных curl к /v1/embeddings с одним и тем же телом дают одинаковую размерность; openclaw gateway status --deep не показывает «висячих» ссылок на несуществующие ключи; в логах CI видно, что prefetch-джоб завершился до основной сборки.
Глобальная установка и openclaw doctor
Установите CLI в глобальный префикс пользователя раннера: npm install -g openclaw. Проверьте which openclaw и npm root -g — смешение с sudo npm -g — частая причина «двух версий» и ложных срабатываний в doctor. Запустите openclaw doctor и устраните предупреждения о путях и версии Node до перехода к onboard: иначе демон будет перезапускаться с ошибками конфигурации.
Если политика безопасности запрещает прямой публичный npm, используйте внутреннее зеркало реестра и тот же .npmrc в домашнем каталоге сервисного пользователя — зафиксируйте это в runbook, чтобы новый раннер не откатывался на дефолтный registry.
openclaw onboard --install-daemon и токен шлюза
Интерактивно: openclaw onboard --install-daemon проведёт через выбор режима шлюза и при поддержке дистрибутива зарегистрирует LaunchAgent / управляемый процесс. В автоматизации (см. документацию openclaw onboard) задайте неинтерактивные флаги: например --gateway-auth token --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN, чтобы токен читался из переменной окружения процесса onboard и не писался открытым текстом туда, где это запрещено политикой. Документация предупреждает: при --install-daemon неразрешённые SecretRef для токена приводят к «fail closed» — это ожидаемо.
После установки сравните значение в launchctl print / plist с тем, что вы экспортируете в интерактивной сессии. Один лишний перевод строки в файле секрета даёт стабильный 401 на /v1/embeddings при рабочем health-check без авторизации.
export OPENCLAW_GATEWAY_TOKEN="$(openssl rand -hex 32)" openclaw onboard --non-interactive --mode local --auth-choice skip \ --gateway-auth token --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN \ --accept-risk --install-daemon
Адаптируйте флаги под вашу политику (провайдер LLM, режим секретов). Важно: --skip-health отключает ожидание живого шлюза — используйте только в пайплайнах, где нужна только запись конфигурации.
Проверка /v1/embeddings и переменные памяти
Убедитесь, что в конфигурации памяти включены поиск и встраивание, и что выбранный провайдер (облако, Ollama, локальный GGUF) совпадает с тем, что вы будете нагружать в CI. Для локальных весов задайте HF_HOME или эквивалентный каталог в EnvironmentVariables LaunchAgent; права на каталог — только у сервисного пользователя.
Проверка с loopback (подставьте порт и модель из вашей конфигурации):
curl -sS -H "Authorization: Bearer ${OPENCLAW_GATEWAY_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"model":"text-embedding-3-small","input":"ping"}' \
"http://127.0.0.1:${PORT}/v1/embeddings"
Ожидается HTTP 200 и JSON с массивом data[].embedding. Затем выполните openclaw gateway status --deep (или эквивалент из вашей версии CLI) и убедитесь, что нет отложенных ошибок аутентификации у провайдера embeddings.
| Симптом | Куда смотреть |
|---|---|
401 на /v1/embeddings | Токен шлюза, заголовок Authorization, лишние пробелы в секрете. |
| 5xx/таймаут | Недоступен upstream API или локальный движок; проверьте сеть и квоты. |
| 429 | Лимит облачного API — снизьте параллелизм, не путайте с 401. |
| 200, но размерность «плавает» | Разные model в теле запроса — зафиксируйте ID в конфиге и тестах. |
Связка с удалённым Mac CI: веса, индексы, Hugging Face
Чтобы сборка не тянула гигабайты в горячий слот, вынесите prefetch в отдельный шаг или ночной job на том же хосте, что и шлюз, с теми же переменными HF_HOME, путём к индексу и версией модели. Матрицу переноса кеша для huggingface_hub оформите по тому же принципу, что и в материале блога про HF и удалённый Mac CI — главное, чтобы канонический путь совпадал с тем, что видит процесс шлюза после readlink -f.
Приёмочный тест. После prefetch выполните короткий скрипт, который проверяет наличие файлов весов и при необходимости размерность одного пакетного embedding на том же бинарнике, что и прод. Для RAG добавьте проверку наличия sqlite/vector-индекса или контрольную сумму манифеста.
Алерты в мониторинг и ограничение повторов
После неудачного prefetch или ошибки embeddings отправляйте компактный JSON (без секретов) только на хосты из белого списка. Повторы при сетевых сбоях и 5xx — с паузами 2 / 4 / 8 с и жёстким curl --max-time; при 401 не увеличивайте backoff бесконечно — исправьте токен. Так вы связываете цепочку «шлюз → CI → мониторинг» без спама; политику повторов и разбор типичных ошибок см. во вводном блоке со ссылками выше.
FAQ
Doctor зелёный, а embeddings падают
Часто разные маршруты: health без авторизации, а embeddings требует Bearer. Проверьте глубокий статус и логи провайдера; убедитесь, что ключ для облачного API доступен именно процессу шлюза, а не только вашему интерактивному shell.
Таймаут на первом запросе после деплоя
Нормально при первичной загрузке весов. Прогрейте в отдельном шаге и мониторьте свободное место на NVMe; при постоянных срабатываниях по диску разберите квоты тома и политику очистки образов/кешей на раннере.
Нужно ли открывать шлюз в интернет
По возможности оставьте приём на 127.0.0.1 и вынесите наружу узкий HTTPS-путь с mTLS или IP-allowlist; см. раздел про периметр во вводном блоке статьи.
Резюме и ориентация на покупку
Коротко: одна версия CLI, демон через onboard, токен шлюза согласован с launchd, curl к /v1/embeddings до открытия портов, doctor и deep status, тот же кеш, что и в CI, алерты с ограниченными повторами. Так вы получаете воспроизводимый контур RAG на удалённом Mac без «магии» в проде.
Если нужен выделенный узел Apple Silicon с предсказуемым диском и SSH для отладки шлюза, откройте публичные страницы без обязательного входа: главная, покупка и конфигурации, центр помощи и каталог блога.
Итог: связка npm + onboard --install-daemon + Bearer + проверка embeddings с выровненным HF/индексом в CI снимает основной риск «немого» дрейфа конфигурации между релизами OpenClaw.
Узел OpenClaw embeddings на постоянном удалённом Mac
Помощь и SSH, покупка узла, главная и подборка в блоге — без обязательной авторизации.