Telegram-бот с расшифровкой голосовых, AI-комментариями, function-calling tools для диагностики LoPlus-инфры.
| Хост | duck.4gain.pro (DNS → firefly 5.101.14.132, AWG 10.9.0.191, CentOS Stream 9, RTX 3060 12GB). Не путать с mirkwood.4gain.pro (94.25.50.91) — это AWG-сервер. |
| Каталог | /home/compose/lo-voicebot/ |
| Bot username | @forGainVoiceBot |
| Контейнер | lo-voicebot |
| Сеть | bridge 172.27.0.0/24, gateway 172.27.0.1 |
| AmneziaWG | внутри контейнера (для Telegram-обхода + AWG mesh к 10.9.0.196) |
aiogram 3.x — Telegram bot frameworkfaster-whisper large-v3 int8 — RU STT (~3 GB VRAM, или CPU int8)silero-tts v4_ru — голос ответа (по умолчанию OFF, /voice xenia включает)http://172.27.0.1:8089/v1)/api/agent/*/home/compose/lo-voicebot/.env:
TG_BOT_TOKEN=<токен от @BotFather>
ADMIN_IDS=71364922[,...] # comma-separated TG user IDs
# LLM endpoint (llama-swap на host duck)
QWEN_URL=http://172.27.0.1:8089/v1
QWEN_MODEL=qwen3-8b
QWEN_TOKEN= # пусто, llama-swap без auth
# Whisper
WHISPER_MODEL=large-v3
WHISPER_DEVICE=cpu # GPU занят llama-swap'ом
WHISPER_COMPUTE=int8
WHISPER_LANG=ru
# LoNGFW agent API (через AWG mesh)
LONGFW_API_URL=http://10.9.0.196:8080
LONGFW_AGENT_TOKEN=<тот же что в /opt/LoNGFW/.env>
# SearxNG
SEARXNG_INSTANCES=http://searxng:8080
systemctl status llama-swap # должен быть active
curl http://localhost:8089/v1/models # 5 моделей
journalctl -u llama-swap -f # логи
Конфиг: /etc/llama-swap/config.yaml. Модели:
qwen3-8b (default, 8K context, fast)deepseek-r1-distill-14b (reasoning)deepseek-coder-v2-lite (code)qwen3-coder-30b (advanced code)qwen3.6-35b (largest, slow)TTL после запроса 600с — выгружается из VRAM.
loplus_lookup, loplus_subscribers, loplus_tariffs, loplus_diagnose,
loplus_dhcp, loplus_ping, loplus_device_ports, loplus_capacity,
loplus_top_traffic, loplus_olt_status, loplus_olt_health,
loplus_ont_state, loplus_issues
+ web_search, web_fetch (через свой SearxNG)
+ save_note, search_notes, delete_note (per-chat scope)
+ set_reminder, list_reminders, cancel_reminder
Bot ходит в LoNGFW по LONGFW_API_URL с Bearer-token. После 2026-04-30 — напрямую через AWG 10.9.0.196:8080 (раньше был autossh-tunnel на 172.27.0.1:18080).
/start — приветствие
/ping — проверка llama-swap + LoNGFW
/forget — забыть контекст текущего чата
/forget all — забыть все контексты юзера
/preset <имя> — пресет комментариев (business/sarcastic/offensive/friendly/off)
/presets — список пресетов
/voice <голос> — TTS голос (xenia/aidar/baya/...)
/voices — список голосов
/model <id> — переключить LLM (qwen3-8b/deepseek-r1-distill-14b/...)
/models — список моделей
ADMIN_IDS)@mention или reply на бота@forGainVoiceBot <запрос> в любом чате → поиск/диагностикаPer-(user, chat) — каждый чат держит свою историю агента (DB SQLite в контейнере). Лимит 16 последних сообщений. Очистка через /forget.
# Локально (Mac)
cd ~/Projects/LoPlus/applications/LoVoiceBot
rsync -az ./ root@duck.4gain.pro:/home/compose/lo-voicebot/ -e 'ssh -p 21150'
# На сервере
ssh -p 21150 root@duck.4gain.pro 'cd /home/compose/lo-voicebot && docker compose up -d --build'
docker logs lo-voicebot, проверить awg0-туннель docker exec lo-voicebot awg showsystemctl status llama-swap, curl localhost:8089/v1/modelsWHISPER_COMPUTE=int8 или WHISPER_DEVICE=cpudocker exec lo-voicebot curl -m 5 http://10.9.0.196:8080/api/healthLONGFW_API_URL на http://10.9.0.196:8080 (через AWG, без autossh)Changelog