[ docs / актуально по README ]
Vera
Полностью локальный голосовой агент для Windows с оффлайн-распознаванием речи, встроенной локальной LLM и графическим интерфейсом.
Основные компоненты
- Распознавание речи: Sherpa-ONNX, streaming и оффлайн.
- LLM: локальная GGUF-модель или внешний сервер Ollama / LM Studio.
- Синтез речи: Supertonic с локальным голосом Lily через ONNX Runtime.
- Интерфейс: плавающий виджет и полноценное окно чата поверх всех окон.
Системные требования
С учетом встроенной локальной LLM (Qwen3.5-2B-GGUF) и нейросетевых движков распознавания/синтеза речи (Sherpa-ONNX STT, Supertonic TTS):
| Компонент | Минимальные | Рекомендуемые |
|---|---|---|
| ОС | Windows 10 (x64) | Windows 11 (x64) |
| Процессор (CPU) | 2 ядра, с поддержкой AVX2 | 4+ ядер (Intel Core i5+ / AMD Ryzen) |
| ОЗУ (RAM) | 8 ГБ | 16 ГБ |
| Место на диске | 4 ГБ | 5 ГБ (на SSD) |
| Видеокарта (GPU) | Встроенная (работа LLM на CPU) | Совместимая с Vulkan (для ускорения LLM) |
| Микрофон | Любой встроенный | Внешний USB или гарнитура |
Для разработчиков
Python 3.10+Node.js 18+— требования Vite и@vitejs/plugin-reactизui/package.json.
Установка и запуск
Шаг 1: Клонирование
git clone https://github.com/tripleguard/Vera.git
cd agent_vera
Шаг 2: Зависимости
pip install -r requirements.txt
Для сетевых запросов веб-слой использует niquests как основной
HTTP-клиент с автоматическим fallback на requests.
cd ui
npm install
cd ..
Шаг 3: Бинарные модели
- Скачайте модель
sherpa-onnx-streaming-zipformer-small-ru-vosk-2025-08-16и распакуйте ее в корень проекта. - Для встроенного механизма запуска скачайте GGUF-модель, например Qwen3-4B-Q4_K_M, и поместите ее в корень проекта.
Запуск
cd ui
npm start
Команда запускает Vite + Electron и автоматически поднимает Python backend
server.py из .venv, если окружение найдено.
Графический интерфейс
Vera работает в фоне через графический интерфейс с плавающим поверх остальных окон виджетом. Также доступны окно чата и отдельная панель сессий.
- Системный трей с командами открытия чата и выхода.
- Сессии с переименованием, закреплением, архивированием и раздельным контекстом.
- Прикрепление файлов, drag-and-drop и вставка изображений из буфера обмена.
- Рабочая панель с деревом файлов и интерактивным CMD-терминалом.
- Раздел «Проекты» для созданных презентаций.
- Шесть тем: Обсидиан, Дневной, Терминал, Сакура, Графит и Аврора.
- Индикаторы «Думает» и текущего действия инструмента.
Примеры команд
Приложения, окна и система
Вера, открой хром
Вера, переключись на телеграм
Вера, громкость 75 процентов
Вера, сделай скриншот
Вера, перезагрузи через час
Файлы, веб и продуктивность
Вера, найди файл резюме
Вера, погода в Москве
Вера, найди информацию о Python
Вера, таймер 10 минут
Вера, читай мне новости каждое утро в 9:30
Память и создание материалов
Вера, запомни меня зовут Имя
Вера, что ты знаешь обо мне
Вера, сделай презентацию про искусственный интеллект
Вера, создай таблицу с расходами
Вера, посчитай факториал 20
Архитектура памяти
Память Vera работает полностью локально без векторной базы и эмбеддингов. Основное
хранилище — data/memory.json; старый data/MEMORY.md мигрирует в JSON при первом запуске.
Категории фактов
| Категория | Триггеры | Пример |
|---|---|---|
identity | зовут, моё имя, кто я | «Меня зовут Тимур» |
contact | @, телефон, почта, email | «мой email t@x.ru» |
preference | люблю, нравится, ненавижу, предпочитаю | «Любит тёмный шоколад» |
project | проект, задача, работаю над, разрабатываю | «Работаю над Vera» |
fact | (по умолчанию) | «Есть кот по имени Барсик» |
Для поиска используются BM25, свежесть, совпадение категории и бонус закрепленным фактам. В системный промпт попадают три наиболее релевантных и закрепленные факты.
Skills и Tools
Skills
Каждый skill хранится в отдельном каталоге с SKILL.md. Он описывает назначение,
правила, разрешенные инструменты и профиль модели. Vera загружает только подходящий
skill, чтобы не раздувать системный prompt.
Tools
- Чтение документов с автоматической суммаризацией длинных файлов.
- Python code interpreter в отдельном процессе с защитой от зависания.
- Создание текстовых файлов, таблиц, презентаций, докладов, отчетов и статей.
Интеграции
Внешний LLM-сервер
- Откройте настройки Vera.
- Включите «Внешний LLM-сервер».
- Для Ollama укажите
http://localhost:11434/v1. - Для LM Studio укажите
http://localhost:1234/v1. - Сохраните настройки — перезапуск не требуется.
Telegram
Telegram-режим работает через Telethon и папку «Избранное» (Saved Messages). Vera может находить и отправлять файлы, присылать созданные PPTX и читать сообщения из переписок. Управление компьютером в этом режиме отключено из соображений безопасности.
Веб-поиск
Поиск сначала идет через Brave Search, затем при необходимости переключается на DuckDuckGo Lite. Страницы загружаются параллельно, очищаются и ранжируются перед передачей локальной модели.
Конфигурация
Основной файл настроек: data/config.json.
- Слово активации и таймаут тишины.
tts.voice_name,tts.total_steps,tts.volume.- Внешние серверы LLM.
- Алиасы сайтов.
Тестирование
python tests/run_all.py
В README указано 52 теста. Они покрывают аудио и мультимодальность, память и сессии, Skills, маршрутизацию tools, генерацию документов и веб-экстракцию.
python tests/test_memory.py
python tests/test_tool_router.py
python tests/test_presentation_generator.py
Устранение неполадок
Sherpa-ONNX не загружается
Проверьте, что каталог модели распознавания речи находится в корне проекта.
LLM не запускается
Проверьте GGUF и наличие llama-server.exe с DLL. Для установленной версии
стандартный каталог — C:\Program Files\Vera.
Нет звука или не работает микрофон
Проверьте tts.voice_name, доступные устройства воспроизведения и
настройки звука в Windows.
Память забывает факты
Проверьте целостность data/memory.json. Лимит памяти — 20 фактов; закрепленные
факты сохраняются при вытеснении.
FAQ
Передает ли Vera данные в интернет?
Нет, кроме веб-поиска, погоды и курсов валют. STT и LLM работают локально или на вашем внешнем сервере, если он настроен.
Можно ли изменить слово активации?
Да, в config.json.
Как прервать Веру, когда она говорит?
Скажите «Вера» или «Вера, стоп» — она сразу остановится.
Как работает поиск по памяти?
Последняя реплика используется как поисковый запрос. Факты ранжируются по BM25, свежести, категории и бонусу закрепления; top-3 и закрепленные факты попадают в системный промпт.
Можно ли закрепить факт, чтобы он не потерялся?
Да, через API MemoryManager.pin(fact_id). Закрепленные факты попадают
в контекст и не вытесняются при достижении лимита MAX_FACTS=20.