Skip to content

tripleguard/Vera

Repository files navigation

Vera — Голосовой агент для Windows

Python Node.js

Полностью локальный голосовой агент с оффлайн-распознаванием речи, встроенной локальной моделью LLM и удобным графическим интерфейсом.

Star History Chart

Содержание

О проекте

Vera — локальный голосовой агент для Windows, работающий без передачи данных в облако. Все вычисления выполняются на компьютере пользователя:

  • Распознавание речи: Sherpa-ONNX (оффлайн, streaming)
  • Модель LLM: Ваша локальная (при разработке использовалась Qwen 3.5 2B) или внешний сервер (Ollama, LM Studio)
  • Синтез речи: pyttsx3
  • Интерфейс: Плавающий виджет и полноценное окно чата поверх всех окон

Важно: агент может ошибаться. Проверяйте критически важные данные, включая результаты веб-поиска, курсы валют, погодные данные и статистику.

Чтобы прервать разговор Веры, скажите "Вера" — она остановится и будет ждать команду.

Вы можете скачать агента на сайте https://agentvera.ru

Возможности

Категория Функции
Интерфейс Плавающий виджет, текстовый чат, стриминг ответов, светлая/темная тема
Трей и запуск Иконка в системном трее Windows, меню «Открыть чат/Выход», защита от запуска второго экземпляра
Голосовое управление Активация по слову, прерывание командой, офлайн STT, синтез речи
LLM-управление Переключение мышления, лимит reasoning_budget, подключение внешних LLM-серверов
Приложения Запуск, закрытие, автоматический запуск по расписанию
Окна Управление окнами (свернуть, развернуть, переключить)
Файлы Поиск и открытие файлов, прикрепление документов в чат для анализа
Веб Поиск, погода, курсы валют
Продуктивность Таймеры, периодические задачи, визуальное управление расписанием
Система Громкость, яркость, управление музыкой, скриншоты, меню Пуск, проводник
Мультизадачность Декомпозиция сложных задач и выполнение их по шагам
Инструменты Чтение документов, интерпретатор Python, генерация презентаций и отчетов
Telegram Telegram-хостинг (Saved Messages), чтение/отправка сообщений
Память Долгосрочная память (персонализация) и сохранение контекста диалога
Надежность Автоперезапуск backend, уведомления о перезапуске и сетевых сбоях в GUI

Системные требования

Компонент Минимум Рекомендуется
ОС Windows 10 x64 Windows 11 x64
Python 3.10 3.11+
Node.js 14.18+ 18+ LTS
RAM 8 ГБ 16+ ГБ
Диск 4 ГБ 5 ГБ SSD
Микрофон Любой USB или качественный встроенный

Минимальные версии рассчитаны по фактическим ограничениям зависимостей проекта:

  • Python 3.10+ (требования fastapi, uvicorn, websockets, Pillow из requirements.txt).
  • Node.js 14.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
cd ui
npm install
cd ..

Шаг 3: Бинарные модели

Sherpa-ONNX:

  1. Скачайте модель sherpa-onnx-streaming-zipformer-small-ru-vosk-2025-08-16
  2. Распакуйте её в корень проекта

LLM: Если вы используете встроенный механизм запуска, скачайте модель формата GGUF (например, Qwen3-4B-Q4_K_M) и поместите файл в корень проекта.

Запуск

cd ui
npm start

npm start поднимает Vite + Electron и автоматически запускает Python backend (server.py) из .venv, если окружение найдено.

Консольные команды:

Команда Описание
/mute / /unmute Управление микрофоном
/exit Завершение работы

Графический интерфейс (GUI)

Агент работает в фоновом режиме через графический интерфейс с плавающим поверх остальных окон виджетом, который пульсирует во время разговора и обдумывания ответа. Также доступно окно чата для текстового взаимодействия. Распознанные голосовые запросы автоматически отображаются в чате вместе с ответами.

В интерфейсе чата доступны следующие визуальные элементы и кнопки управления:

  • Системный трей (Windows): Иконка агента в трее открывает чат, а через контекстное меню доступны действия «Открыть чат» и «Выход».
  • Кнопка-скрепка (Прикрепление файлов): Позволяет загружать файлы прямо в чат, передавая их содержимое в контекст запроса. Поддерживаются форматы .docx, .txt, .xlsx, .pptx, .md, .py, .pdf, .html, .json. Загрузив документ, вы можете просить агента извлечь нужную информацию, проанализировать код или таблицы, сделать саммари.
  • Переключатель темы (иконка Солнца/Луны): Расположен в верхнем меню, переключает светлую и темную темы оформления интерфейса.
  • Переключатель мышления (иконка мозга рядом с вводом): Позволяет быстро включать/выключать режим размышления модели; лимит задается в настройках (reasoning_budget).
  • Блок "Размышления модели" (иконка мозга): При решении сложных задач и генерации ответов может появляться индикатор размышлений с иконкой мозга. Нажав на него, можно развернуть внутренний монолог агента в реальном времени.
  • Кнопки источников: Ссылки из веб-поиска парсятся и отображаются в виде аккуратных кликабельных кнопок с доменами сайтов, открывающихся в браузере.
  • Кнопка "Открыть папку с файлом": После генерации документов/презентаций и создания скриншота появляется кнопка для быстрого перехода к файлу в Проводнике.
  • Системные уведомления в чате: GUI показывает служебные сообщения при проблемах backend (автоперезапуск, исчерпание попыток, сетевые неполадки).

Для удобства пользователя реализован стриминг ответов: в чате текст набирается плавно и постепенно, слово за словом (в голосовом режиме ответы выводятся целиком для синхронизации со звуком).

Внешние LLM-серверы

Агент поддерживает работу со сторонними серверами, такими как Ollama или LM Studio. Это позволяет не запускать локальную модель силами самого агента, а перенаправить запросы на уже запущенный в системе (или в другой сети) инстанс, экономя ресурсы компьютера и обеспечивая гибкость в выборе моделей.

Как подключить другой эндпоинт:

  1. Откройте настройки в графическом интерфейсе агента.
  2. Включите опцию "Внешний LLM-сервер".
  3. Введите URL вашего сервера (например, http://localhost:11434/v1 для Ollama или http://localhost:1234/v1 для LM Studio).
  4. Нажмите кнопку сохранения. Изменения применяются мгновенно без необходимости перезапуска агента.

Периодические задачи и напоминания

Вы можете управлять фоновыми задачами и напоминаниями двумя способами: ставя их голосом или настраивая самостоятельно через графический интерфейс.

Самостоятельная настройка через GUI:

  1. Откройте окно Настроек в интерфейсе агента.
  2. Перейдите к разделу "Периодические задачи".
  3. В этом разделе представлен список всех активных задач. Вы можете визуально добавлять новые напоминания, редактировать время и интервал срабатывания существующих, а также удалять их.
  4. Сложные задачи (например, запрос новостей или погоды по утрам) автоматически направляются в LLM для обработки, а простые (напоминания вроде "попей воду") сразу выводятся на экран в виде текста.

Звук таймера:
В систему добавлен обновленный звук таймера, который проигрывается по кругу до тех пор, пока вы не остановите его командой «стоп». Таймер теперь работает с секундной точностью.

Управление голосом (Примеры команд):

Вера, таймер 10 минут
Вера, напомни через полчаса позвонить начальнику
Вера, читай мне новости каждое утро в 9:30
Вера, удали таймер

Полный справочник команд

Приложения и окна

Агент использует нечёткий поиск названий программ.

Вера, открой хром
Вера, закрой телеграм
Вера, запусти калькулятор
Вера, открой командную строку
Вера, сверни окно
Вера, разверни браузер
Вера, переключись на телеграм

Запланированный запуск приложений

Агент может запускать приложения по расписанию, автоматически определяя правильные даты.

Вера, запускай телегу каждый день в 9 утра
Вера, запускай хром в 8:30 по будням
Вера, запусти дискорд в 22:30
Вера, покажи запланированные запуски

Файлы и папки

Поиск директорий и файлов с фильтрацией по дискам и fallback на встроенный поиск Windows:

Вера, открой файл отчет
Вера, найди файл резюме
Вера, открой папку проект
Вера, открой папку bb на диске d

Системные настройки и питание

Вера, громкость 75 процентов
Вера, яркость 7
Вера, открой пуск
Вера, мой компьютер
Вера, сделай скриншот
Вера, какой мой IP
Вера, выключи компьютер
Вера, перезагрузи через час
Вера, спящий режим

Музыка и медиа

Управление воспроизведением (Spotify, Яндекс Музыка и другие плееры). Команды выполняются без голосового подтверждения.

Вера, пауза
Вера, играй
Вера, продолжи
Вера, стоп музыка
Вера, выключи музыку
Вера, дальше трек
Вера, следующий трек
Вера, назад

Корзина, диспетчер задач и утилиты

Вера, открой корзину
Вера, очисти корзину
Вера, открой диспетчер задач
Вера, закрой диспетчер задач
Вера, подбрось монетку

Веб-поиск, Погода и Курсы валют

Агент самостоятельно очищает текст загруженных веб-страниц, анализирует собранные данные, используя глубокий поиск:

Вера, погода в Москве
Вера, курс доллара
Вера, найди информацию о Python
Вера, кто такой Эйнштейн
Вера, открой ютуб

Источником курсов валют является ЦБ РФ.

Память и контекст

Агент обладает долгосрочной персистентной памятью (сохраняется между запусками в файл). Факты извлекаются автоматически из обычного разговора, но можно управлять знаниями напрямую:

Вера, запомни меня зовут Имя
Вера, запомни я работаю программистом
Вера, что ты знаешь обо мне
Вера, забудь про работу

Инструменты (Tools)

Агент может выполнять сложные и алгоритмические запросы, используя систему плагинов. В случае комплексных запросов, задача декомпозируется и выполняется по шагам с передачей контекста:

Чтение и аналитика документов (read_document)

Вера, расскажи что написано в файле readme
Вера, прочитай документ отчёт.docx
Вера, о чём файл changelog.md

Длинные документы автоматически суммаризируются.

Офисные инструменты и презентации

Создание текстовых файлов, таблиц и интеллектуальных презентаций. Агент самостоятельно генерирует структуру слайдов и осуществляет веб-поиск источников:

Вера, создай заметку с текстом привет мир
Вера, сделай презентацию про искусственный интеллект
Вера, создай таблицу с расходами

Презентации генерируются с цветовым оформлением и автодобавлением источников, если использовался поиск.

Интерпретатор Python (code_interpreter)

Безопасное выполнение скриптов в отдельном процессе с защитой от зацикливания:

Вера, посчитай факториал 20
Вера, сгенерируй случайный пароль
Вера, реши уравнение x^2 - 5x + 6 = 0

Telegram-режим

Агент может работать через "Telethon", подключаясь к привязанному аккаунту Telegram, обрабатывая команды прямо из папки Избранное (Saved Messages):

Вера, уйди в телегу
Вера, перейди в телеграм
  • Работа с файлами: можно написать "скинь файл отчет.docx" — агент найдет и отправит документ или фото прямо в чат. Если доступно несколько вариантов, он предложит выбор.
  • Генерация презентаций: отправьте запрос на создание презентации, и готовый .pptx файл автоматически придет в чат.
  • Для возврата в десктопный режим напишите «вернись» в чате. С целью безопасности в Telegram-режиме отключено управление ПК.

Доступно чтение сообщений из переписок с нормализацией имён:

Вера, напиши Назару привет
Вера, что написал Назар?
Вера, мне кто-то писал в телеге?
Вера, выйди из телеги

Как работает веб-поиск

  1. Запрос через Brave
  2. Получение списка ссылок
  3. Загрузка страниц
  4. Очистка текста
  5. Суммаризация LLM

Конфигурация

Файл: data/config.json Ключевые параметры: настройки слова активации, таймаут тишины, голос для TTS (tts.voice_index), внешние серверы LLM и алиасы сайтов.

Запуск через Vite/Electron

cd ui
npm start

Пайплайн на run_vera.py и PyInstaller удалён. Актуальный entry point — Electron (ui/main.js) + FastAPI backend (server.py).

Устранение неполадок

  • Sherpa-ONNX не загружается: проверьте наличие папки с моделью (например, sherpa-onnx-streaming-zipformer-small-ru-vosk-2025-08-16).
  • LLM не заводится / Ошибка llama-server.exe:
    1. Проверьте, что в папке с программой (C:\Program Files\Vera по умолчанию) есть файл llama-server.exe и сопутствующие ему DLL.
    2. Если файлы отсутствуют (ошибка автоматического скачивания), скачайте архив llama-bin-win-vulkan-x64.zip (или cpu версию) с официального релиза llama.cpp и распакуйте его содержимое прямо в папку с приложением.
    3. Убедитесь, что там же лежит файл модели .gguf.
  • Нет звука: настройте tts.voice_index.
  • Микрофон не работает: проверьте настройки звука в Windows.
  • Backend перезапускается: в GUI появится служебное уведомление о перезапуске. Если попытки исчерпаны, перезапустите приложение и проверьте логи backend.
  • Telegram не отвечает при существующей сессии: при сетевой ошибке вида [WinError 121] GUI покажет уведомление о неполадках сети; после восстановления сети взаимодействие с Telegram возобновится.

FAQ

Передает ли агент данные в интернет?
Нет, кроме веб-поиска, погоды и курсов валют. STT и LLM работают локально (или на вашем внешнем сервере, если он настроен).

Можно ли изменить слово активации?
Да, в config.json.

Как прервать Веру, когда она говорит?
Просто скажите "Вера" или "Вера, стоп" — она сразу остановится.

Благодарности

Лицензии и ссылки

Sherpa-ONNX: https://github.com/k2-fsa/sherpa-onnx
llama.cpp: https://github.com/ggerganov/llama.cpp