nixos · openclaw · glm-4.7-flash · telegram-бот · векторный поиск · декларативная конфигурация · управление секретами · gateway24 июля в 06:31 · 5 мин

Воспроизводимый AI-ассистент на NixOS: опыт настройки OpenClaw

В мире искусственного интеллекта стабильность системы часто отходит на второй план перед стремлением к новейшим моделям. Однако опытный системный администратор может предпочесть философию «настрой и забудь». Статья описывает внедрение декларации конфигурации OpenClaw на базе NixOS, позволяющего создать AI-ассистента с долгосрочной памятью, который запускается одной командой на любой машине.

# Воспроизводимый AI-ассистент на NixOS: опыт настройки OpenClaw

Каждый новый диалог с традиционными ассистентами начинается с чистого листа. Механизмы контекста ограничены рамками текущей сессии. Меня это не устраивало. Я начал искать решение и остановился на OpenClaw.

Это решение предлагает декларативную конфигурацию, долгосрочную память через QMD, интеграцию с Telegram и использование модели GLM-4.7-flash. Главное преимущество — вся архитектура воспроизводится на любой машине одной командой.

Архитектура решения

В центре системы находится OpenClaw Gateway. К нему привязаны следующие компоненты:

1. Telegram — канал связи с пользователем. 2. Workspace — файловое хранилище, определяющее личность ассистента. 3. LLM (Large Language Model) — модель, генерирующая ответы. 4. QMD — база для долгосрочной памяти на векторном поиске.

Весь этот стек описывается в языке Nix. До перехода на NixOS автор использовал дистрибутив Arch, где регулярные обновления часто ломали систему: версии пакетов разъезжались, зависимости не сходились, а откатываться приходилось вручную. На NixOS можно настроить систему и забыть её. В случае неполадок возможно мгновенное восстановление до предыдущего состояния или конкретного коммита кода конфигурации.

Структура flake.nix

Исходный файл flake.nix связывает систему с необходимыми модулями:

* nixpkgs: основной набор пакетов. * home-manager: управление домашними директориями пользователей. * agenix: шифрование и хранение секретов (ключей, токенов). * nix-openclaw: основной флейк от проекта OpenClaw, предоставляющий оверлей для пакетов и бинарный кэш на сервере cache.garnix.io. * openclaw-workspace: локальный путь к конфигурационным файлам. Это не флейк, а просто директория с файлами, определяющими поведение ассистента.

Параметр specialArgs позволяет передать внешние инпуты (как nix-openclaw и openclaw-workspace) в модульную систему Nix. Без неё другие модули не смогут увидеть пользовательские файлы ассистента.

Модульная архитектура конфигурации

Конфигурация разделена на два логических уровня, что упрощает поддержку и расширение функционала:

Уровень 1: Базовая инфраструктура Здесь описываются параметры окружения и ядра системы:

nix # Пример конфигурации (simplified) { openclaw = { model = { name = "glm-4.7-flash"; provider = "openai"; url = "https://api.openai.com/v1/chat/completions"; # ... настройки модели }; gateway = { enabled = true; # ... настройки шлюза }; # ... другие компоненты }; }

Уровень 2: Персонализация ассистента Второй уровень конфигурации находится в директории openclaw-workspace. Эти файлы управляют поведением ассистента в моменте:

* Личность: кто такой ассистент и как он себя ведёт. * Промпт: система промптинга и шаблоны запросов. * Память: текущие диалоги и контекст. * Инструменты: доступ к внешним API и системным функциям.

Именно на этом уровне задаются bundledPlugins, thinkingDefault и другие опции, влияющие на качество ответов.

Настройка модели и инструментов

В секции openclaw.model задаются параметры модели:

* provider: поставщик API (OpenAI, Zhipu и др.). * url: конечная точка API. * apiKey: ключ, который хранится в секретах Agenix. * thinkingDefault: уровень глубины рассуждений (low, high). * compaction: параметры сжатия контекста (reserveTokensFloor), чтобы ассистент не терял фокус на больших потоках данных.

Секция openclaw.gateway активирует инструменты: * Tools: выполнение команд на хосте, установка пакетов (с ограничениями). * Elevated: повышенные привилегии (например, выполнение скриптов). * QMD: секция семантического поиска по истории.

Управление памятью

Память ассистента работает через команды запомни и забудь, которые пишутся в MEMORY.md. QMD добавляет сверху семантический поиск по всей истории. Это позволяет ассистенту не просто запоминать факты, но и находить их в огромном потоке контекста.

Опция reloadScript.enable = true позволяет регенерировать скрипт перезагрузки конфигурации без необходимости перезапуска самого Gateway. Это критично для бесшовного обновления параметров.

Бандленые плагины

Можно активировать встроенные плагины, например, summarize, который автоматически суммаризирует URL и PDF, отправляемые в чат.

Управление секретами через Agenix

Один из самых важных аспектов безопасности — управление секретами. Ключи API, токены Telegram и другие чувствительные данные хранятся в зашифрованном виде в директории secrets/.

Файлы шифруются с помощью age: * openclaw-telegram-token.age * openclaw-zhipu-key.age * openclaw-gateway-token.age

В конфигурации nix-openclaw эти файлы подключаются через age.secrets.

nix age.secrets = { "openclaw-telegram-token" = { file = ../../secrets/openclaw-telegram-token.age; owner = "vokrob"; group = "users"; mode = "0400"; }; # ... другие секреты };

Ключ шифрования лежит локально в ~/.config/agenix/age-key.txt. Расшифровка происходит только при активации системы. Файлы не попадают в /nix/store, что исключает случайный слив ключей через бинарный кэш.

Жизненный цикл сообщения

1. Пользователь отправляет сообщение в Telegram-бот. 2. Бот отправляет его на Gateway. 3. Gateway проверяет список allowFrom, чтобы убедиться, что пользователь авторизован. 4. Gateway запрашивает контекст из QMD. 5. Формируется промпт: системные инструкции + контекст + сообщение. 6. Запрос отправляется в LLM (GLM-4.7-flash). 7. Ответ модели сохраняется как новый фрагмент памяти и возвращается пользователю.

Цепочка занимает от нескольких секунд до пары минут из-за очереди к бесплатной модели.

Решение типичных проблем

Сервис не стартует Причиной часто становится неприменение скрипта активации Agenix. Решение:

1. Выполнить sudo nixos-rebuild switch. 2. Проверить наличие файлов в /run/agenix/. 3. Если файлов нет, проверить определения age.secrets (не забыть указать owner, group, mode).

Telegram-бот не отвечает Два возможных варианта: * Неправильный allowFrom (введен ID чата вместо ID пользователя). * Невалидный токен.

Проверить логи через journalctl --user -u openclaw-gateway.

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

Токен Gateway не совпадает Если пересоздать токен, необходимо обновить секреты и перезапустить сервис:

bash agenix -e secrets/openclaw-gateway-token.age systemctl --user restart openclaw-gateway

Вывод

Несмотря на временные затраты на первоначальную настройку (вечер разработки), результат того стоит. Создан воспроизводимый AI-ассистент с долгосрочной памятью, который разворачивается одной командой на любой машине.

Конфигурация идентична на всех устройствах. Достаточно склонировать репозиторий и выполнить nixos-rebuild. Код проекта доступен на GitHub.

Теги: nixos, openclaw, glm-4.7-flash, telegram-бот, векторный поиск, декларативная конфигурация, управление секретами, gateway, ai-ассистент, инфраструктура

---

*Примечание: Все секреты необходимо заменить на свои перед сборкой.*

Первоисточники

Habr AI
← Вернуться в эфир