Голосовой ассистент для Windows: запись голоса, распознавание речи, генерация ответа через LLM, выполнение действия и озвучка результата.
core/cmd/jarvis(Go): оркестратор пайплайна.frontend(Go/Fyne): GUI для запуска/остановки сервисов, выбора микрофона и тестовой записи.stt-service(Python/FastAPI):POST /api/transcribe.tts-service(Python/FastAPI):GET /api/text-to-speech.action-service(Go/Gin):POST /api/command-execute— выполнить действие (сейчас открытие URL/поиска в браузере).POST /api/play-audio— проиграть WAV, полученный от TTS.GET /api/wait-for-a-key-press?key=space— ожидание нажатия выбранной клавиши.
core/internal/llm: интеграция с Ollama (config/ollama-config.json).
- В
frontendвыбирается микрофон, клавиша запуска записи и длительность, затем значения сохраняются вconfig/microphone-config.json. jarvisполучает список микрофонов черезffmpeg -f dshow -list_devices true.jarvisчитаетconfig/microphone-config.json, ждёт нажатие выбранной клавиши черезaction-service /api/wait-for-a-key-press?key=..., записывает аудио и отправляет в STT (:8001).- Текст отправляется в LLM дважды:
- для голосового ответа (
PromptForTaskVoice); - для JSON-команды выполнения (
PromptForTaskExecution).
- для голосового ответа (
- Голосовой ответ уходит в TTS (
:8002), затем WAV пересылается вaction-service /api/play-audio(:8003) для воспроизведения. - JSON-команда уходит в
action-service /api/command-execute(:8003).
- Windows 10/11.
- Go (версия из
go.mod). - Python 3.10+.
ffmpegвPATH.- Ollama (локально поднятый сервер) + модель из
config/ollama-config.json. piperвPATHи модель TTS изconfig/tts-config.json.
Нужно 4 терминала из корня репозитория.
cd .\frontend\cmd\app
go run main.goВ приложении на главной странице можно запускать/останавливать сервисы, а в меню Настройки микрофона выбрать устройство, клавишу записи и сделать тестовую запись.
core/README.mdaction-service/README.mdstt-service/README.mdtts-service/README.mdconfig/README.md
cd .\stt-service
pip install -r requirements.txt
python -m uvicorn src.app.main:app --host 127.0.0.1 --port 8001cd .\tts-service
pip install -r requirements.txt
python -m uvicorn src.app.main:app --host 127.0.0.1 --port 8002cd .\action-service\cmd
go run main.gocd .\core\cmd\jarvis
go run main.go- STT (
127.0.0.1:8001)GET /api/healthPOST /api/transcribe(multipart/form-data, полеfile)
- TTS (
127.0.0.1:8002)GET /api/healthGET /api/text-to-speech?text=...→audio/wav
- Action (
127.0.0.1:8003)POST /api/command-executePOST /api/play-audio(multipart/form-data, полеaudio)GET /api/wait-for-a-key-press?key=space
config/ollama-config.jsonmodel: имя модели Ollama (текущее значение в репозитории:qwen2.5:1.5b).
config/stt-config.jsonmodel,device,compute_typeдляfaster-whisper(текущие значения:medium,cuda,float16).
config/tts-config.jsonmodel: путь к.onnxфайлу модели Piper (относительноtts-service/src/app/services).
config/microphone-config.jsondevice: выбранное имя микрофона изffmpeg.duration_seconds: длительность записи дляjarvisи тестовой записи из frontend.trigger_key: клавиша, которую ждётaction-serviceдля запуска записи (space,enter,aи т.д.).
logs/frontend.log— действия GUI (запуск/остановка сервисов, сохранение конфига, тестовая запись).logs/jarvis.log— логи оркестратораjarvis.
- В
jarvisURL сервисов пока захардкожены в коде (8001,8002,8003). action-serviceвcommand-executeсейчас принимает только командыbrowserиsearch.- Для браузерной команды используется
args[0]как URL/строка запуска.