Všetky projekty

Výskum AI2026

LangVis

Hlasový jazykový tútor v reálnom čase, ktorý opraví každú vetu a posunie študenta z A2 na B2.

Kurz
24 lekcií · A2→B2
Sledované zručnosti
~40
Vyučovacie metódy
18
Zvuk
16 kHz vstup · 24 kHz výstup

01Prehľad

LangVis je desktopový kurz rozprávania. Študent hovorí; tútor počúva, opraví vetu, požiada o zopakovanie a ponúkne silnejší spôsob, ako to povedať. Pamätá si chyby a opakované premení na krátke cvičenia.

Zámerne nie je asistentom: má jedinú úlohu - pomôcť študentovi hovoriť lepšie - a každá časť architektúry slúži tomuto cyklu.

02Problém

Nácvik rozprávania potrebuje okamžitú konverzáciu bez oneskorenia, ale dobrá oprava vyžaduje dôkladnú analýzu každej vety. Robiť oboje jedným volaním modelu buď spomalí rozhovor, alebo spraví spätnú väzbu povrchnou.

03Architektúra

Dve cesty modelov bežia vedľa seba: živá zvuková relácia udržiava plynulý rozhovor a malý rýchly model na pozadí analyzuje každú vetu a aktualizuje model študenta, ktorý formuje ďalší prompt.

Rozhranie

Osnova

Etapy, lekcie, pravidlá

Koučing

Opravy, tipy, vylepšenia

Slovník

Slová o úroveň vyššie

Tvár tútora

Kreslená podľa hlasitosti zvuku

Živá relácia

Zvukový vstup/výstup

Prúdy mikrofónu a reproduktora

Gemini Live

Obojsmerný hlas v reálnom čase

Opätovné pripojenie

Obnovenie relácie

Doména tútora

Jazykový tútor

pozorovať → merať → učiť

Analýza

Pre každú vetu, mimo hlavnej cesty

Osnovy

Zručnosti, lekcie, metódy

Pokrok

Úroveň, zručnosti, slovná zásoba

Jadro

Načítanie pluginov

Nástroje, pozorovatelia, bloky promptu

Aktivačné slovo

Voliteľné, úplne offline

Vlastný log

Vlastný výstup a chyby

Lokálne úložisko

level.json

Zdroj pravdy

progress.md

Čitateľný, generovaný znova

memory/

Nastavenia a API kľúč

04Komponenty

Živá relácia

Rozhovor bez čakania

  • Posiela 16 kHz zvuk z mikrofónu do Gemini Live API a prehráva 24 kHz odpovede.
  • Správy GoAway zo servera a zmeny nastavení rieši riadeným opätovným pripojením, ktoré môže kontext rozhovoru ponechať alebo zahodiť.

google-genai · sounddevice · asyncio TaskGroup

Analýza viet

Meria každý výrok

  • Ľahký model vráti pre každú vetu štruktúrovaný JSON: chyby, opravený tvar, značky zručností, dôkazy pre CEFR.
  • Beží na pozadí, takže živý model naň nikdy nečaká.
  • Lokálne kontroly na úrovni slov odpovedajú na lacné otázky (bolo toto slovo použité?) bez volania modelu.

gemini-flash-lite · tolerant JSON parsing

Osnovy a pokrok

Čo učiť ďalej

  • 6 etáp × 4 lekcie s cieľovými tvarmi, vzorovými vetami a pomenovanými vyučovacími metódami.
  • ~40 gramatických zručností, každá so zvládnutím, skutočnými chybami a dátumom opakovania.
  • Tri najslabšie zručnosti sa stanú zameraním, ktoré sa vloží do promptu ďalšej relácie.

Systém pluginov

Rozšíriteľný bez zásahu do jadra

  • Každý súbor v plugins/ so slovníkom PLUGIN a funkciou run() sa stane nástrojom, ktorý môže tútor zavolať.
  • Voliteľné hooky umožňujú pluginu sledovať každú vetu, pridať trvalé inštrukcie do promptu alebo sa zobraziť v rozhraní.

05Ako to funguje

  1. 1

    Hovoriť

    Zvuk prúdi do živého modelu; tútor najprv opraví a potom pokračuje.

  2. 2

    Analyzovať

    Prepis ide do analyzátora na pozadí, ktorý označí chyby a zručnosti.

  3. 3

    Aktualizovať

    Úroveň, zvládnutie zručností a slovná zásoba sa zapíšu do level.json; progress.md sa vygeneruje znova.

  4. 4

    Prispôsobiť

    Tá istá chyba trikrát spustí cvičenie; najslabšie zručnosti formujú ďalší prompt.

  5. 5

    Postupovať

    Keď sú cieľové tvary zvládnuté, ďalšia lekcia začne bez reštartu relácie.

06Technické detaily

Dva modely, dve rýchlosti

Živý model je optimalizovaný na nízke oneskorenie, analytický na štruktúru a náklady. Ich oddelenie udrží rozhovor prirodzený a každá veta pritom prejde úplnou gramatickou kontrolou.

Výsledky sa vracajú cez hook pluginu format_for_prompt(), takže tútor v ďalšej odpovedi vie, na čo sa zamerať.

Riadené opätovné pripojenia

Dlhé hlasové relácie končia, zariadenia sa menia a jazyk sa dá prepnúť uprostred relácie. Namiesto pádu sa v TaskGroup relácie vyvolá signál na opätovné pripojenie. Príznak keep_context rozhodne, či sa zachová kľúč na obnovenie relácie - pri zmene zvukového zariadenia áno, pri novom jazyku nie.

main.py (simplified)python
class _ReconnectSignal(Exception):
    """Raised inside the session TaskGroup to force a clean reconnect."""

def request_reconnect(self, keep_context: bool = True, reason: str = ""):
    self._reconnect_keep = keep_context   # False → drop resumption handle
    self._reconnect_reason = reason
    self._reconnect_event.set()

# e.g. switching language starts a fresh context,
# changing the microphone keeps the conversation
self.request_reconnect(keep_context=False, reason="new language")
self.request_reconnect(keep_context=True, reason="audio device")

Kontrakt pluginu

Pluginy sa objavia pri štarte. To isté rozhranie poháňa aj samotného jazykového tútora, vďaka čomu je jadro malé a pridanie jazyka je zmena dát, nie kódu.

plugins/_template.py (condensed)python
PLUGIN = {
    "name": "my_plugin",          # unique snake_case tool name
    "description": "When the tutor should call this tool.",
    "parameters": {"type": "OBJECT", "properties": {...}, "required": []},
}

def run(parameters: dict, player=None, session_memory=None) -> str:
    # Return a short sentence - it is spoken back to the learner.
    # Never raise: catch errors and return them as text.
    ...

# Optional hooks
def observe(text, player): ...             # see every sentence
def format_for_prompt() -> str: ...        # add standing instructions
def set_language(name: str): ...           # react to the language select

07Návrhové rozhodnutia

Úroveň sa meria, nehádže

Úroveň CEFR je priebežné skóre z posledných viet študenta, nie vstupný test.

Súkromie na prvom mieste

API kľúč, nastavenia a všetky súbory pokroku zostávajú v počítači a sú vylúčené z gitu; zvuk ide k modelu len počas relácie.

Žiadne dodané obrázky

Tvár tútora, ikony a ukazovatele pokroku sa kreslia za behu, takže rozhranie je ostré pri akomkoľvek zväčšení.

Jazyky ako dáta

Pridanie jazyka znamená zapísať jeho zručnosti a etapy do osnov a pridať detektor na úrovni slov - rozhranie ho už podporuje.

08Technológie

Umelá inteligencia
Gemini Live APIGemini Flash / Flash-LiteopenWakeWord (optional)
Aplikácia
PythonPyQt6asynciosounddeviceNumPy
Úložisko
JSON (level.json)Markdown (progress.md)

09Ďalšie kroky

  • Kurz slovenčiny (osnovy a detektor sú už naplánované).
  • Hodnotenie výslovnosti zo zvukového prúdu.

Ďalšia prípadová štúdia

DevCode Academy LMS

Systém na riadenie výučby s rolami pre programátorské školy.