Данный проект - это локальный голосовой ассистент с открытым исходным кодом, построенный на принципах модульной архитектуры и агентного подхода с использованием LangGraph. Он понимает голосовые команды, планирует их выполнение с помощью LLM и исполняет через подключенные модули, оставаясь при этом полностью оффлайн.
- Изменяемый вид ввода: При запуске будет выбор между текстовым и голосовым общением. Ответ получаете голосовым и текстовым. Распознавание (STT) и синтез речи (TTS) работают локально.
- Модульная архитектура: Четкое разделение логики на независимые агенты (модули). Легко добавлять новые функции, создавая собственные модули.
- Планирование на LangGraph: Центральный orchestrator_agent анализирует запрос, строит план выполнения и управляет цепочкой специализированных агентов через мощный фреймворк LangGraph.
- Динамическое подключение модулей: Ключевой компонент plan_executor_agent позволяет во время выполнения подключать необходимые для задачи модули (например, test_agent, web_search_agent, music_agent).
- Полная локальность: Все компоненты, включая языковую модель (через Ollama), работают на вашем компьютере. Данные и разговоры остаются приватными.
Проект построен вокруг графа агентов LangGraph, что обеспечивает гибкость, наблюдаемость и контроль над потоком выполнения.
Графическую архитектуру проекта смотрите в файле agent_workflow_architecture.mmd.
orchestrator_agent ("диспетчер"): Принимает текст запроса от STT или сразу текст, использует LLM для его анализа и создания плана - последовательности действий для plan_executor_agent. Использует модель qwen2.5:7b-instruct-q4_0 с больше ограничениями в конфиге, чем у основной модели.
plan_executor_agent ("исполнитель"): Ключевой компонент системы. Получает план от оркестратора и динамически вызывает необходимые модули-агенты для его пошагового выполнения. Именно сюда подключаются все функциональные модули (см. graph/).
Функциональные модули (graph/): Независимые агенты, реализующие конкретные функции. По умолчанию включают:
- general_agent: Универсальный чат-агент для ответов на вопросы. Модель:
qwen2.5:7b-instruct-q4_0 - tts_agent: Преобразует текст в речь.
- stt_agent: Преобразует речь в текст.
- test_agent: Заглушка. Пример модуля-заглушки для демонстрации и тестирования архитектуры.
config/: Централизованное управление промптами, параметрами моделей (temperature, num_ctx и т.д.) и другими настройками.
- ОС: Windows (tts под эту платформу).
- ОЗУ: 16 ГБ или более (для комфортной работы локальной LLM).
- Python: 3.10 или новее.
- Клонируйте репозиторий:
git clone https://github.com/ResInferrer/VoiceAssistant.git
cd Lerche-
Установите Ollama (для локальной LLM): Скачайте и установите с (официального сайта)[https://ollama.com/download].
-
Установите менеджер зависимостей uv:
pip install uv- Установите зависимости проекта:
uv syncЭта команда создаст виртуальное окружение и установит все пакеты из pyproject.toml.
- Загрузите языковую модель:
ollama pull qwen2.5:7b-instruct-q4_0Почему именно эта модель? Она обеспечивает хороший баланс между качеством ответов, скоростью работы и требованиями к памяти для систем с 16 ГБ ОЗУ.
- Убедитесь, что служба Ollama запущена. Если нет, то запустите:
ollama serve- Выполните в терминале:
uv run main.pyГоворите в микрофон после звукового сигнала. Скажите или напишите "выход" для выхода из диалога.
VoiceAssistant/
├── main.py # Точка входа, запускает главный цикл ассистента
├── graph/ # Директория с реализациями всех агентов
│ ├── __init__.py
│ ├── agent_workflow.py # Все агенты и workflow
├── config/ # Конфигурации и промпты
│ ├── __init__.py
│ ├── llm_confing.py # Параметры LLM (температура, модель и т.д.) и системные промты/промты
├── vosk_models/ # Локальные модели для распознавания речи (Vosk)
│ └── vosk-model-small-ru-0.22/
└── pyproject.toml # Зависимости и метаданные проекта
Этот проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.