b0sh.net

Proudly debugging the system since 1981

AI Workflow 2.0

Ho rimesso mano al workflow del post di luglio rivendendo un po il sistema di memoria, che ora registra sia la richiesta che la risposta e utilizzano un solo modello LLM per tutte le operazioni, evitando quindi di caricare scaricare la VRAM più volte per dare seguito ad una sola risposta. La scelta in questo caso è ricaduta su Qwen3 8B, che a volte viene eseguito senza ragionamento ( /no_think ) per i compiti più facili.

E’ stata inoltre introdotta l’integrazione con GMail per accedere alle mail delle ultime 24 ore e rispondere a domande ad essere inerenti. Il workflow non effettua una vera e propria ricerca, ma le scarica tutte, scarta quelle di spam o comunque non utili, sintetizza quelle poco importanti e mantiene inalterate quelle importanti. Il risultato viene aggiunto al prompt dell’utente.

L’integrazione con GMail si attiva solo se la valutazione del prompt dato fà pensare che possa servire accedere alle email recenti.

Vista l’integrazione con GMail il workflow si interrompe immediatamente se il tigger iniziale non viene da me.

Il workflow è scaricabile qua sotto:

Coding agent con Ollama + Qwen3 + Continue – Parte 2

Alla fine l’ho provato, ottenendo sicuramente risultati migliori che i semplici completamenti di testo offerti da altri plugin.

Rispetto alla configurazione proposta ho utilizzato Qwen3:14b invece del MOE, anche per limiti di memoria a disposizione. Inoltre ho utilizzato Intellij IDEA in una macchina diversa da quella su cui risiede ollama. Cioè in realtà fisicamente sono la stessa ma una è una VM e l’altra è il ferro vero. Per rendere tutto piu divertente ho fatto passare le richiesta dal proxy di OpenWebUI, che è esposto su rete pubblica e che quindi richiede un token di autenticazione.

Rimaneggiata un po la configurazione:

Chiedo all’agente di generarmi una nuova semplice applicazione Spring Boot.

E lui parte a generarmi tutto perfettamente integrato con la IDE e scrivendo direttamente i file.

Dopodiché chiedo di cambiare il sistema di build da Maven a Gradle e di aggiungermi Swagger.

E dopo un paio di altri prompt per sistemare le cose ecco online il backend di una applicazione avendo scritto solo prompt e accettato il risultato:

Si tratta ovviamente di una micro applicazione, senza business logic rilevante e senza, al momento una UI. Farò altre prove in contesti un po più sfidanti ma per ora sono comunque abbastanza impressionato.

Coding agent con Ollama + Qwen3 + Continue – Parte 1

Quanto segue e’ la traduzione di Build a LOCAL AI Coding Assistant: Qwen3 + Ollama + Continue.dev (Blazing Fast & Fully Private!) … non ho ancora provato il setup ma son molto curioso e lo faro’ a breve.

Volevo condividere il mio percorso nell’utilizzare diversi assistenti AI per la programmazione — da GitHub Copilot a Cursor e ora a Windsurf — e come infine ho trovato il punto ideale passando a una soluzione completamente locale, senza compromettere velocità o qualità 🔥.
Vediamo insieme come ci sono arrivato:

💡 L’evoluzione del mio stack AI per la programmazione

  1. GitHub Copilot : Buon inizio, ma contesto limitato e non molto profondo.
  2. Cursor : Un notevole balzo in termini di potenza e flessibilità, specialmente grazie a Cursor Composer.
  3. Windsurf : Wow, questa mi ha impressionato! La sua capacità di indiciare e comprendere le basi di codice è eccezionale. Non è necessario dargli a conoscere i file da analizzare — semplicemente sa . Dai un’occhiata a lukalibre.org — interamente costruito con Windsurf 🤯Ma… c’è sempre un problema.

🛑 Il problema: Costo, velocità e limiti 😤

  • Windsurf costa 20 dollari al mese — prezzo equo per ciò che offre.
  • MA… ti limita a 500 crediti al mese, e la modalità di pensiero di Claude 3.7 utilizza 1,5 volte per ogni chiamata .
  • Anche pagando, a volte è lento ⏳.
  • Stessa storia con Cursor e Copilot.
  • E non iniziamo nemmeno a parlare delle preoccupazioni per la privacy dei dati — se la tua azienda non permette strumenti esterni, sei bloccato.

🚨 L’ingresso: Ollama + Continue.dev

Avevo pensato:

“Cosa succederebbe se potessi eseguire modelli potenti in locale?”
Così ho provato:

  • Ollama : Ospita LLM in locale (idea fantastica).
  • Continue.dev : Offre un’esperienza simile a quella di Cursor/Windsurf.

MA…

  • Modelli come Llama3 o Mistral non erano proprio all’altezza.
  • Sono pesanti e lenti sui laptop 💻➡️🐢

✨ Poi arrivò Qwen3: Alert di cambiamento di gioco 🎯💥

Ecco dove le cose si fecero veramente interessanti.
Qwen3 (soprattutto la variante 30b-a3b) mi ha lasciato a bocca aperta!

  • Utilizza distillazione + Mixture-of-Experts (MoE) → inferenza estremamente veloce.
  • Nonostante sia un modello da 30B, vengono utilizzati solo 3B di parametri per ogni prompt 🚀.
  • Le prestazioni? Strabiliantemente vicine a quelle di giganti come Claude 3.7 Sonnet e GPT-4o.
  • Funziona senza problemi su un laptop decente — testato su: i7 + RTX 2070Mac M4 Max

E il meglio di tutto: Nessuna perdita di dati, nessuna chiave API, nessuna attesa.

📌 Passo passo: Come impostare Qwen3 localmente con Continue.dev (Mac & Windows) 🖥️🛠️

Facciamolo insieme:

✅ Passo 1: Installare Ollama

Mac :

brew install ollama

Windows : Scaricare da: ollama.com/download

Avviare Ollama dopo l’installazione.

✅ Passo 2: Scaricare Qwen3 e modello di embedding

Nel terminale o in PowerShell:

ollama pull qwen3:30b-a3b

ollama pull nomic-embed-text

Perché questi modelli?

  • qwen3:30b-a3b: Il cervello principale AI 🧠 (gestisce chat, completamento automatico, modifiche).
  • nomic-embed-text: Aiuta l’AI a comprendere l’intera base di codice (spiegato di seguito ⬇️).

✅ Passo 3: Installare l’estensione Continue.dev in VS Code

  1. Apri VS Code.
  2. Vai alle Estensioni (icona 🔍 nel lato sinistro).
  3. Cerca “Continue”.
  4. Clicca su Installa.

✅ Passo 4: Configurare Continue per utilizzare Qwen3

  1. In VS Code, vai alla scheda Continue (icona 🧠).
  2. Clicca sull’icona ingranaggio ⚙️ > Apri Configurazione.
  3. Sostituisci la configurazione predefinita con questa:
name: Local Assistant  
version: 1.0.0
schema: v1
models:
- name: Qwen3-30b
provider: ollama
model: qwen3:30b-a3b
roles:
- chat
- edit
- autocomplete
- apply
- summarize
- name: embeddingsProvider
provider: ollama
model: nomic-embed-text
roles:
- embed
context:
- provider: code
- provider: docs
- provider: diff
- provider: terminal
- provider: problems
- provider: folder
- provider: codebase

🔍 Cosa fa ogni parte del YAML

models:

Definisce i “cervelli” del tuo assistente.

  • Qwen3–30b
  • embeddingsProvider

context:

Dichiara a cosa può accedere l’AI quando risolve problemi:

  • codice: File corrente.
  • docs: Documentazione (come i README).
  • diff: Cambiamenti Git.
  • terminal: Output del terminale (per il debug).
  • problems: Errori del linter.
  • folder: Cartella intera del progetto.
  • codebase: Indice completo della base di codice (grazie al modello di embedding!).

Senza questo, il tuo assistente vedrebbe solo il file che stai modificando — come cercare di riparare un motore di un’auto senza vedere l’intera auto 🚗.

✅ Passo 5: Finito! 🎉

Ora hai un assistente AI per la programmazione locale che è:

  • 🔒 Privato (nessuna perdita di dati)
  • ⚡ Veloce (eseguito sul tuo computer)
  • 💪 Potente (si confronta con GPT-4o/Claude 3.7)
  • 🌐 Pronto per l’offline

📌 Pensieri finali

Se sei stanco di pagare per token limitati, risposte lente o vuoi il pieno controllo sul tuo codice e i tuoi dati, prova Qwen3 + Ollama + Continue.dev.
È stato un cambiamento di gioco per me 🧠✨, e spero che ti aiuti anche tu.

Workflow AI, un altro caso d’uso

Credo che sta cosa mi stia sfuggendo di mano. Ho messo insieme un po’ tutto. Riconoscimento vocale, chatbot potenziato con rag, embedding, sintesi della risposta e sintesi vocale in uscita.

Risultato: una assistente personale a portata di messaggistica istantanea con due tipi di memoria, una a breve termine per sostenere efficacemente una conversazione, e una a lungo termine supportata dal RAG. L’embedding si attiva inserendo nel messaggio di input una parola chiave. Il sistema inoltre risponde (anche) a voce se l’interazione iniziale avviene mediante voce o solo scritto se l’interazione e’ stata iniziata in forma testuale.

Lo utilzzero’ davvero? Non lo so, ma potrebbe essere che si … specie per via della memoria a lungo termine, in modo che posso di fatto prendere appunti velocemente e poi poterci accedere in modo altrettanto facile e veloce.

Intanto il trascrittore di vocali, nato per provare, l’ho usato varie volte.

Il tutto, come negli esempi precedenti, e’ selfhosted. Utilizzo:

WebSocket su proxyPass con Apache 2

Note to self: quando le richieste websocket non funzionano in una applicazione proxata con Apache 2 questa pagina può essere di aiuto : https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

In caso in futuro non sia più disponibile la configurazione che che ho usato e’

ProxyPass / http://example.com:9080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://example.com:9080/$1" [P,L]

N8n e un caso d’uso

N8n è un bel progettino per realizzare workflow automatizzati, mettendoci dentro un po di AI.

Come da esperienze precedenti ho provato a farlo funzionare utilizzando il meno possibile servizi su cloud, più che altro per essere consapevole di come funziona ogni passaggio.

Per cui, primo passo installo N8N con una immagine che gira in locale su docker. Niente di difficile. Le istruzioni sul repository sono facili. N8N parte, richiede una mail di registrazione per sbloccare un po’ di funzionalità in modo gratuito. Va bene, anche se non ho verificato bene la differenza tra con e senza registrazione.

A questo punto mi pongo il problema di cosa fargli fare. Ce ne sarebbero mille ma di cose ma provo ad implementare una trascrizione di audio mediante telegram. L’obbiettivo è avere facilmente la trascrizione di messaggio audio provenienti da varie piattaforme di messaggistica, non necessariamente solo telegram.

Continua a leggere

PhotoPrism – Parte 2

Qualche aggiornamento di medio periodo. PhotoPrism di per se va bene, ma ha esposto un problema latente nel mio Raspberry PI, ovvero che i dischi dati erano formattati in NTFS. E che il supporto in scrittura di NTFS su linux fa abbastanza schifo. Nel senso che finché leggi va bene. Se fai “poche” scritture forse te la cavi, ma lo usi per appoggiarci un database e i millemila file che genera PhotoPrism il file system degradata molto rapidamente.

Tempo due giorni il file del database era corrotto. Sgancio il disco USB, lo attacco a un PC Windows e trovo una infinita di errori, più o meno aggiustati tutti ma ho seriamente rischiato di perdere due terabyte di dati personali. Foto, video etc…

Nel nuovo assetto i due dischi gemelli del Raspberry sono ora un in ExFAT e uno EXT4. Per ora non danno problemi.

PhotoPrism

Continuo la serie di segnalazioni di software con PhotoPrism. La ricerca di un software migliore per gestire il mio personale archivio di foto e’ nata dalla consapevolezza delle capacita’ dell’ AI di categorizzare le foto dopo un meetup di Codemotion.

Con tutte le evoluzioni avvenute negli ultimi 20 anni e’ davvero riduttivo avere un archivio di foto il cui unico indice e’ la data in cui la foto e’ stata scattata.

PhotoPrism, in modo assolutamente semplice permette di aggiungere il luogo (dati EXIF), la persona nella foto e alcuni tag basati sul contenuto delle foto.

La categorizzazione AI delle foto incide sugli ultimi due aspetti, riconoscimento dei volti, e riconoscimento delle situazioni e dei contenuti delle foto.

Il primo e’ ragionevolmente efficace, il secondo qualche spazio di miglioramento sicuramente ce lo ha ma già da un buon contributo.

L’istanza che ho messo in piedi gira sul Raspberry Pi 5, insieme a molte altre cose tra cui anche il recentemente citato Jellyfin, e si e’ scansionato 32000 foto e 1000 video in meno di 24 ore utilizzando solo la potenza di calcolo del Raspberry, senza utilizzare servizi esterni a supporto ma solo il modello locale di AI installato con PhotoPrism. Unica accortezza: dargli un po’ swap su disco (2-4 giga), essendo il mio con solo 4 giga di ram. Nei modelli con 8 giga si può evitare.

Qualche riferimento:

P.S.: Come ho scoperto PhotoPrism? Ho chiesto a Gemma.

Jellyfin, dopo qualche tempo

Posso confermare che la soluzione descritta qualche post fa, in Da Plex a Jellyfin, funziona correttamente per il mio utilizzo. Unica aggiunta, per la musica, consiglio il player Finamp, disponibile per Android e IOS, che rispetto al client ufficiale permette di scaricare sul dispositivo mobile alcune canzoni o anche intere playlist, cosa molto utile in viaggio fuori dall’Europa o in aereo.

Per quanto riguarda altri client l’ho provato direttamente via web, sul telefono Android col client nativo, su una FireTV e su una SmarTV sempre android sempre con risultati uguali o migliori di Plex, che presto verrà disinstallato.

« Articoli meno recenti

© 2025 b0sh.net

Tema di Anders NorenSu ↑