Infrastruttura IA On-Premise | Deploy Binario Singolo | Lexiane
IA on-premise in un singolo binario statico Rust. Nessun Python, nessun Docker. Deploy air-gapped, cloud o ibrido. Compatibile Kubernetes.
Deployare un sistema di intelligenza artificiale in produzione non è solo una questione di modello. È una questione di infrastruttura: come il binario si installa, quali dipendenze introduce, quale superficie di attacco crea, quali risorse consuma, come si comporta sotto carico, e come si integra nel vostro ambiente esistente.
La maggior parte dei framework IA risponde a queste domande a posteriori — le prestazioni, la sicurezza e la manutenibilità sono vincoli da gestire una volta scelto lo strumento. Lexiane parte dal principio opposto: le proprietà di infrastruttura sono decisioni architetturali, prese a monte, e non negoziabili in produzione.
Il problema di infrastruttura che Python impone strutturalmente
I framework RAG dominanti — LangChain, LlamaIndex, Haystack — sono scritti in Python. La loro ricchezza funzionale è reale. Ma le scelte di infrastruttura che impongono sono vincoli strutturali che né le versioni, né le ottimizzazioni, né le buone pratiche possono cancellare.
L’interprete e il suo ambiente. Python richiede un interprete, un gestore di pacchetti, un ambiente virtuale, e un insieme di dipendenze di sistema. Un’immagine Docker minimale per uno stack RAG Python si situa tra 500 MB e 1 GB. L’avvio a freddo di un servizio Python con le sue dipendenze si conta in secondi. In un ambiente air-gapped, l’installazione di pip è un problema di sicurezza operativa — non un fastidio di sviluppo.
Il GIL e la concorrenza. Il Global Interpreter Lock di Python serializza le operazioni parallele a livello dell’interprete. Un servizio RAG Python che gestisce più richieste simultanee introduce una contesa che né i thread né i processi risolvono correttamente — i thread si bloccano reciprocamente, i processi moltiplicano il consumo di memoria.
La latenza della pipeline. Le misurazioni pubblicate situano l’overhead di una pipeline RAG Python tra 10 e 22 ms per chiamata, escludendo il tempo di inferenza. Su workload ad alto volume, questo attrito si accumula e diventa un collo di bottiglia architetturale.
L’assenza di determinismo temporale. Python delega la gestione della memoria a un garbage collector. In produzione, pause GC imprevedibili — da alcune decine a alcune centinaia di millisecondi — appaiono sotto carico. In un sistema embedded, un sistema in tempo reale, o qualsiasi sistema soggetto a un SLA di latenza, questo comportamento è inaccettabile.
Rust elimina ciascuno di questi vincoli per costruzione. Lexiane li eredita come proprietà fondamentali — non come ottimizzazioni aggiunte.
Un unico binario: cosa significa concretamente
Lexiane si compila in un binario statico autonomo. Un unico file eseguibile contiene l’intero sistema: il motore di pipeline, il server HTTP, l’interfaccia di streaming SSE, il parser documentale, il motore di embedding locale (Candle), il motore di inferenza LLM locale (Mistral.rs), la base vettoriale in memoria, e l’interfaccia di configurazione.
Questa scelta non è un vincolo di implementazione. È una decisione architetturale con conseguenze operative dirette.
Deployment triviale. Copiare un binario e un file di configurazione: è tutto ciò che richiede un deployment Lexiane. Nessun gestore di pacchetti, nessuna macchina virtuale, nessun processo secondario da orchestrare. Il sistema è operativo in pochi secondi.
Superficie di attacco minimale. Ogni dipendenza esterna è un potenziale vettore di attacco. Un binario statico senza dipendenze dinamiche non espone superficie legata a librerie di sistema condivise, pacchetti versionati, o processi ausiliari. La superficie di attacco è delimitata dal binario stesso — verificabile, fisso, riproducibile.
Riproducibilità dei deployment. Lo stesso binario, compilato dallo stesso codice sorgente con lo stesso compilatore, produce lo stesso comportamento indipendentemente dall’ambiente target. Non c’è deriva dovuta a versioni di dipendenze diverse tra ambienti di sviluppo, test e produzione.
Footprint minimale. Senza runtime Python, senza macchina virtuale, senza ambiente di esecuzione, il footprint di memoria all’avvio è una frazione di quella di uno stack equivalente in Python. Le immagini Docker costruite attorno al binario Lexiane sono dell’ordine di alcune decine di megabyte — non alcune centinaia.
Tre modalità di deployment, un’unica architettura
L’architettura modulare di Lexiane si adatta alla vostra infrastruttura esistente — non il contrario. Tre configurazioni coprono l’insieme dei vincoli operativi incontrati negli ambienti di produzione.
Air-gapped — sovranità totale, zero dipendenza di rete
Nella sua configurazione air-gapped, Lexiane non effettua alcuna chiamata di rete in uscita. L’intera pipeline si esegue in locale: parsing documentale tramite il parser nativo Rust, calcolo degli embedding tramite Candle, inferenza LLM tramite Mistral.rs, archiviazione vettoriale nell’infrastruttura locale.
Questa modalità è progettata per gli ambienti dove la connettività di rete è assente per architettura — reti classificate, SCIF, datacenter sovrani, siti industriali isolati, sistemi embedded. Non si tratta di una modalità degradata: è la modalità di riferimento per cui Lexiane è stato architettato in primo luogo — e il fondamento del RAG privato sovrano.
Prerequisiti infrastrutturali:
- Un server Linux (x86_64 o ARM64) con le risorse adatte al volume documentale
- Una GPU opzionale per l’accelerazione dell’inferenza locale (significativa in termini di throughput, non bloccante in sua assenza)
- I modelli pre-scaricati al momento del deployment — nessun download durante l’esecuzione
Cosa deployate: un binario + un file di configurazione TOML + file di modelli. Nient’altro.
Cloud — integrazione con i migliori modelli del mercato
In configurazione cloud, Lexiane attiva i suoi adattatori esterni tramite variabili d’ambiente: OpenAI o Anthropic per la generazione, OpenAI per gli embedding, Qdrant o pgvector per l’archiviazione vettoriale, Cohere per il reranking.
La pipeline di elaborazione rimane identica alla configurazione air-gapped. Solo gli adattatori cambiano. Se sostituite OpenAI con Anthropic, o se migrate da pgvector verso Qdrant, la pipeline non cambia di una riga — la configurazione cambia, non il codice.
Questa proprietà è fondamentale per la resilienza operativa: la dipendenza da un fornitore specifico è localizzata in un adattatore, non diffusa nell’intero sistema. Un fornitore che modifica le sue tariffe, depreca un modello, o subisce un’interruzione di servizio è sostituibile senza refactoring.
Integrazioni supportate:
| Ruolo | Fornitori |
|---|---|
| Generazione (LLM) | OpenAI (GPT-4o, GPT-4) · Anthropic (Claude) |
| Embedding | OpenAI (text-embedding-3) |
| Vector store | Qdrant · pgvector (PostgreSQL) |
| Reranking | Cohere |
| Ricerca sparse | Tantivy (BM25, locale) |
Ibrido — sovranità dei dati, potenza del cloud
La configurazione ibrida è la più comune negli ambienti che combinano vincoli di riservatezza dei dati e requisiti di qualità di generazione.
Il principio: le operazioni sensibili — parsing, calcolo degli embedding, archiviazione vettoriale — si eseguono localmente. La generazione di testo è delegata a un modello cloud, ma solo sui frammenti di contesto estratti — mai sui documenti sorgente. I vostri file non lasciano il vostro perimetro. Il LLM cloud riceve estratti anonimizzabili, non la vostra base documentale.
Questa suddivisione è resa possibile dall’architettura a stage di Lexiane: ogni fase è un componente indipendente, la cui esecuzione può essere localizzata diversamente. Il confine tra locale e cloud è una riga di configurazione — non un confine di codice.
L’infrastruttura interna: ciò che Lexiane incorpora nativamente
Server HTTP e streaming SSE
Lexiane incorpora un server HTTP nativo costruito su Axum, il framework web Rust sviluppato da Tokio. Questo server espone un’API REST standard per l’ingestione documentale e la query, nonché un’interfaccia di streaming SSE (Server-Sent Events) per la restituzione in tempo reale delle risposte generate token per token.
Nessun server web esterno è necessario. Lexiane può essere posto direttamente dietro un reverse proxy (Nginx, Caddy, Traefik) senza configurazione aggiuntiva. Funziona anche in modalità libreria — integrato in un programma Rust esistente, senza server HTTP.
Strato di archiviazione
Archiviazione vettoriale. Tre opzioni secondo i vincoli di deployment:
- SQLite in memoria — per i deployment embedded o i prototipi. Zero infrastruttura, zero latenza di rete.
- pgvector — estensione PostgreSQL per gli ambienti che dispongono già di un’infrastruttura PostgreSQL. L’indice vettoriale coesiste con i vostri dati relazionali nello stesso cluster.
- Qdrant — base vettoriale dedicata per i corpus voluminosi che richiedono prestazioni di indicizzazione e recupero ottimizzate.
MetadataStore. Un registro persistente SQLite registra l’insieme dei documenti ingeriti, le loro collezioni, i loro metadati, e la cronologia delle operazioni. Le migrazioni di schema sono versionate e applicate automaticamente all’avvio — senza intervento manuale, senza interruzione di servizio.
GraphStore. Per i deployment che attivano la modalità GraphRAG, Oxigraph assicura la persistenza del triplestore RDF. Il grafo di conoscenza estratto dai documenti è archiviato in modo durevole, interrogabile tramite query SPARQL, e incrementalmente arricchito a ogni nuova ingestione.
Cache e prestazioni
Il decoratore di cache LRU (CachedEmbeddingModel, CachedLLMEngine) può essere attivato su qualsiasi adattatore di embedding o di generazione. Mantiene una cache in memoria delle richieste recenti — particolarmente efficace per gli embedding di query frequenti e le risposte a domande ricorrenti.
Questo decoratore non è accoppiato a un adattatore specifico: avvolge qualsiasi componente compatibile, in locale come in cloud. L’attivazione o la disattivazione della cache non tocca il resto della pipeline.
Ricerca ibrida e reranking
L’indice sparse Tantivy (BM25) è incorporato nativamente nel binario. La ricerca ibrida — vettoriale densa e lessicale sparse — si esegue in locale senza infrastruttura aggiuntiva. I risultati delle due modalità di ricerca vengono fusi tramite Reciprocal Rank Fusion prima del reranking.
Il cross-encoder di reranking (Cohere in configurazione cloud, o un modello locale in configurazione air-gapped) riclassifica i risultati per pertinenza semantica reale — al di là della semplice similarità vettoriale grezza.
Osservabilità e operazioni
Strumentazione senza accoppiamento
Il sistema di hook del ciclo di vita (PipelineHooks) permette di strumentare ogni fase della pipeline senza modificarne il codice. Quattro punti di osservazione sono esposti: on_stage_start, on_stage_complete, on_stage_error, on_pipeline_complete. Ogni callback riceve il nome della fase, il suo stato, la sua durata, e metadati strutturati.
Questi hook possono alimentare qualsiasi sistema di monitoring esterno: Prometheus, Datadog, OpenTelemetry, Grafana, o un sistema di supervisione interno. L’osservabilità è una proprietà della pipeline, non una dipendenza da una specifica infrastruttura di monitoring.
Metriche di esecuzione
PipelineMetrics e StageMetrics espongono dati di timing aggregati dopo ogni esecuzione: durata di ogni fase, durata totale della pipeline, identificazione delle fasi in errore. Questi dati permettono di rilevare regressioni di prestazioni, identificare i colli di bottiglia, e tracciare l’evoluzione del comportamento del sistema nel tempo.
Il monitoraggio del consumo di token (UsageStats) è accumulato nel contesto della pipeline. In configurazione cloud, questi dati permettono di monitorare e pianificare il consumo API in tempo reale — per richiesta, per collezione documentale, o su finestre temporali definite.
Healthcheck
La porta HealthCheck espone un endpoint di verifica dello stato del sistema — interoperabile con gli orchestratori di container (Kubernetes, Nomad) e i load balancer. L’endpoint restituisce lo stato di ogni componente attivo: vector store, LLM, modello di embedding. Un componente degradato è rilevabile prima che impatti gli utenti.
Caratteristiche di prestazioni
Le proprietà di prestazioni di Lexiane sono conseguenze dirette della scelta di Rust — non ottimizzazioni puntuali.
Assenza di garbage collector. Rust gestisce la memoria staticamente. Non ci sono pause GC, nessun picco di latenza imprevedibile sotto carico, nessun comportamento temporale non deterministico. Ciò che viene misurato nel test di carico è ciò che si produce in produzione.
Concorrenza nativa. Il modello di concorrenza di Rust, basato su async/await con il runtime Tokio, permette di gestire un grande numero di richieste simultanee senza contesa a livello dell’interprete. Ogni richiesta viene gestita in un task asincrono indipendente — senza GIL, senza overhead di thread.
Footprint di memoria prevedibile. Senza runtime né ambiente di esecuzione, il consumo di memoria di Lexiane è deterministico e stabile. Non cresce in modo imprevedibile sotto carico prolungato.
Misurazioni pubblicate su migrazioni Python → Rust in produzione illustrano l’ordine di grandezza dei guadagni tipicamente osservati: Discord ha ridotto il suo consumo CPU dell’80% migrando un servizio da Python a Rust. Cloudflare ha ottenuto il 25% di throughput aggiuntivo con una riduzione della metà del carico CPU. Dropbox ha diviso per quattro il carico dei suoi server sui percorsi critici. Questi numeri sono specifici ai loro sistemi — ma illustrano un ordine di grandezza coerente con le proprietà strutturali del linguaggio.
Integrazione nella vostra infrastruttura esistente
API REST standard
Lexiane espone un’API REST documentata per l’ingestione documentale e la query. È interoperabile con qualsiasi client HTTP — applicazioni web, strumenti interni, sistemi di integrazione, script di automazione. Nessun SDK proprietario è necessario.
Modalità libreria
Lexiane può essere integrato direttamente come libreria in un programma Rust esistente. In questa modalità, non c’è server HTTP: la pipeline è istanziata e chiamata programmaticamente, nello stesso processo. Questa modalità è adatta alle integrazioni profonde in sistemi esistenti dove l’API REST introdurrebbe un’indirezione inutile.
Sessioni conversazionali
Il server Lexiane mantiene sessioni conversazionali persistenti con cronologia. Ogni sessione conserva il contesto degli scambi precedenti — le risposte successive possono tenere conto delle domande anteriori senza che il client debba ritrasmettere l’intera cronologia. In modalità RAG Agentivo, queste sessioni integrano anche la memoria delle iterazioni di ragionamento successive.
Quattro configurazioni di riferimento pronte al deployment
Per accelerare l’integrazione, Lexiane viene fornito con quattro configurazioni di riferimento operative. Ognuna è un progetto compilabile completo — non un esempio di documentazione.
| Configurazione | Caso d’uso |
|---|---|
| Air-gapped | Rete isolata, nessuna connettività esterna, inferenza 100% locale |
| Cloud | Prestazioni massime, integrazione OpenAI/Anthropic/Cohere, archiviazione pgvector o Qdrant |
| Ibrido | Embedding locali, generazione cloud, archiviazione locale — sovranità dei dati sorgente |
| Generalista | Punto di partenza flessibile, adattabile a qualsiasi contesto |
Ogni configurazione include il file TOML di riferimento, le variabili d’ambiente documentate, e le dipendenze esplicitamente elencate.
Domande frequenti dei team infrastruttura e DevOps
È possibile deployare Lexiane in un container Docker? Sì. Il binario statico Lexiane produce un’immagine Docker di alcune decine di megabyte — a confronto con i 500 MB a 1 GB tipici di uno stack Python equivalente. L’immagine contiene solo il binario e i file di configurazione. È compatibile con tutti gli orchestratori di container standard.
Lexiane supporta Kubernetes? Sì. L’endpoint di healthcheck è interoperabile con le readiness e liveness probe di Kubernetes. Il deployment come Deployment o StatefulSet (secondo la modalità di archiviazione) è standard. La configurazione tramite variabili d’ambiente è nativamente compatibile con ConfigMap e Secret di Kubernetes.
Qual è la configurazione hardware minimale per un deployment in produzione? In modalità cloud (embedding e inferenza decentrati), un server con 4 core e 8 GB di RAM supporta volumi documentali significativi. In modalità air-gapped con inferenza locale, i requisiti dipendono dal modello LLM scelto — i modelli quantizzati 7B funzionano su CPU con 16 GB di RAM, con una GPU per prestazioni di generazione soddisfacenti.
Come gestire gli aggiornamenti senza interruzione di servizio? Le migrazioni di schema del database sono versionate e applicate all’avvio — senza intervento manuale. Per gli aggiornamenti del binario, il deployment blue-green o canary è applicabile in modo standard: il nuovo binario si inizializza, applica le eventuali migrazioni, e entra in servizio. La compatibilità tra versioni consecutive è mantenuta.
Lexiane può essere deployato su ARM? Sì. Il binario Lexiane si compila nativamente per x86_64 e ARM64. I deployment su infrastruttura ARM — server Graviton (AWS), Ampere, hardware embedded — sono supportati senza modifiche.
La configurazione TOML può essere gestita da uno strumento IaC? Sì. La configurazione di Lexiane è un file TOML statico, versionabile in Git, e manipolabile da qualsiasi strumento di infrastructure as code — Terraform, Ansible, Helm, o script di deployment interni. Non c’è configurazione distribuita in un database esterno.
Parliamo della vostra infrastruttura.
Ogni deployment ha i propri vincoli: politica di sicurezza di rete, orchestratore di container, politica di gestione dei segreti, requisiti di alta disponibilità, integrazione con sistemi esistenti. Non proponiamo configurazioni generiche per vincoli che non lo sono.
Proponiamo uno scambio tecnico sul vostro ambiente, i vostri vincoli operativi, e la configurazione Lexiane che vi corrisponde.
Cosa potete aspettarvi:
- Una risposta entro 48 ore lavorative
- Un interlocutore tecnico che conosce i vincoli di deployment in ambiente regolamentato e le architetture di produzione
- Una valutazione onesta dell’adeguatezza — incluso se sono necessari sviluppi di adattatori specifici
→ Contattaci
Nessun impegno commerciale. Una conversazione tecnica.
Richiedere l'accesso al Core Auditable
Iscrivetevi per essere informati dell'apertura del programma di audit del nostro Core. Conformemente alla nostra informativa sulla privacy, il vostro indirizzo e-mail professionale sarà utilizzato esclusivamente per questa comunicazione tecnica, senza alcun utilizzo commerciale successivo. Accesso distribuito tramite registro privato sicuro.
Contattaci