Files
infra/stacks/astra-marusia/README.md
T

3.5 KiB
Raw Blame History

Разговор с Астрой через Марусю

Код: ruzzy/astra-bot, marusia/server.py, тесты test_marusia.py. Сервис на rpi слушает только 127.0.0.1:8788; наружу пока не опубликован. Webhook: POST /webhook/<секрет из /etc/astra-marusia.env>. Проверка: GET /health.

Отдельный разговор на идентификатор пользователя Маруси, до 16 реплик в памяти; при перезапуске история очищается, через сутки простоя удаляется. Беседа семейная, ответы подходят ребёнку 10 лет. Тексты не пишутся в access log. Голос распознаёт Маруся, Астра отвечает текстом, Маруся озвучивает response.tts.

Codex использует существующую авторизацию ChatGPT: файл auth.json привязан только для чтения в отдельный CODEX_HOME. Пользовательская конфигурация, правила, документы проекта и инструменты shell/apps/browser отключены. systemd скрывает домашние каталоги, запрещает повышение привилегий и запись за пределами своего StateDirectory. Не подключать этот сервис к административному треду Telegram. После обновления Codex повторно проверять список отключаемых feature flags.

Быстрый ответ ожидается до 2 секунд. Если ответ ещё готовится, колонка просит сказать «готово?»; новая реплика во время ожидания не запускает вторую задачу. Повтор webhook с теми же session_id/message_id получает кешированный ответ. Не более двух обращений к модели одновременно, не более 50 разговоров.

Для завершения нужны: приватный навык в аккаунте VK владельца, его skill_id в env, публичный HTTPS URL с проксированием на rpi (например nginx на fr1 и отдельный ограниченный SSH-туннель). Доступа SSH к fr1 у astra на rpi сейчас нет; ключ Gitea — не ключ сервера. Не открывать домашний порт в интернет напрямую. На публичном прокси отключить access log webhook (секрет в URL), ограничить размер тела 64 KiB, POST и частоту запросов; таймаут 5 секунд. Регистрация/проверка: https://platform.vk.com/ и https://skill-tester.marusia.mail.ru/ (актуальность интерфейса проверить при входе). До заполнения skill_id все POST закрыты (403), знание случайного пути обязательно. skill_id не является криптографическим доказательством отправителя; секрет URL и приватный доступ навыка обеспечивают первичное ограничение доступа.