Salta ai contenuti

Riconoscimento vocale

Guida include un motore Speech-to-Text (STT) ad alte prestazioni e completamente locale, basato sui modelli Whisper di OpenAI. Integrando whisper.cpp direttamente nell’applicazione, Guida passa da semplice renderer web passivo ad ascoltatore attivo.

Combinato con i tuoi LLM locali, Whisper agisce come un ponte vocale verso il sistema operativo: ti permette di dare comandi al browser, estrarre dati e avviare flussi di lavoro usando linguaggio naturale invece di fare clic sui pulsanti.

La tua voce e i tuoi comandi non lasciano mai la tua macchina. Trascrizione tramite Whisper e ragionamento tramite Ollama o LlamaSharp avvengono interamente sul tuo hardware locale. Non ci sono API cloud, abbonamenti o telemetria che registri il tuo audio.

Il motore vocale di Guida è ottimizzato deliberatamente per girare sulla CPU, usando istruzioni AVX2/AVX-512. Questa scelta architetturale tiene il motore STT completamente fuori dalla GPU, preservando il 100% della VRAM per eseguire contemporaneamente LLM grandi e con molti parametri.

La limitazione delle risorse fa sì che il motore usi solo core CPU fisici, evitando il sovraccarico dell’hyperthreading e mantenendo reattiva l’interfaccia del browser durante la trascrizione.

Per iniziare con flussi di lavoro vocali, configura il motore in Impostazioni > Riconoscimento vocale (Settings > Speech Recognition):

  1. Percorso modello (Model Path): configura il percorso del modello Whisper GGML che preferisci. I modelli quantizzati base.en o small.en sono fortemente consigliati per il miglior equilibrio tra velocità e accuratezza.
  2. Carica il modello all’avvio (Load model on startup): usa questo interruttore per bilanciare uso della RAM e disponibilità immediata. Se è disabilitato, il modello verrà caricato al primo uso da parte di uno script o dell’interfaccia.
  3. Scelta esplicita del microfono: non sei più costretto a usare il dispositivo audio “Predefinito” (Default) di Windows. Scegli esplicitamente l’hardware di input dal menu a discesa, per esempio separando un headset di qualità dal microfono integrato del laptop.

Guida include controlli hardware di livello professionale e feedback visivo in tempo reale, così non devi mai indovinare se il browser ti sta ascoltando:

  • Pulsante voce dinamico: il pulsante principale ”🎙 Voce” (Voice) nella barra degli strumenti è sensibile allo stato. Mostra “Caricamento…” (Loading...) quando il modello IA viene caricato in RAM, “Carica voce” (Load Voice) quando è inattivo e diventa rosso ad alto contrasto quando il microfono sta registrando.
  • Impulso visivo: il pulsante voce include un indicatore VU integrato, una sottile barra verde che reagisce alla tua voce in tempo reale e conferma immediatamente che l’hardware funziona.
  • Rilevamento intelligente del silenzio: Guida monitora attivamente i livelli audio. Se registri accidentalmente una sessione vuota, per esempio perché il microfono è fisicamente disattivato, Guida lo rileva prima di inviare dati vuoti all’IA e mostra una notifica utile.
  • Sandbox di test microfono: un pulsante “Test” nella finestra Impostazioni permette di verificare in sicurezza i livelli del microfono senza avviare un flusso di lavoro IA.

Lo spazio dei nomi g.stt permette agli sviluppatori di creare flussi di lavoro guidati dalla voce in modo programmatico.

Registra audio dal microfono selezionato per una durata specificata e lo trascrive direttamente in una variabile dello script.

async function main() {
g.log("Ascolto per 5 secondi...");
try {
// Registra per 5000 millisecondi
const transcript = await g.stt.listen(5000);
g.log("Hai detto: " + transcript);
if (transcript.toLowerCase().includes("riassumi")) {
// Avvia un LLM locale per riassumere la pagina
const content = await g.dom.extractContent("body");
const summary = await g.llm.promptLocalLlm("llama3.2", "Riassumi: " + content);
g.log("Riepilogo: " + summary);
}
} catch (e) {
g.log("Errore STT: " + e.message);
}
}

Elabora file audio .wav esistenti sul disco per estrarre dati.

async function main() {
try {
const transcript = await g.stt.transcribeFile("C:\\temp\\meeting_notes.wav");
g.log("Trascrizione completata. Lunghezza: " + transcript.length);
} catch (e) {
g.log("Trascrizione del file fallita: " + e.message);
}
}