Nella seconda metà dell'anno scorso abbiamo svolto consulenza tecnica per un team che sviluppa un SaaS di logistica transfrontaliera. All'inizio la loro funzionalità AI chiamava solo GPT-4o e funzionava piuttosto stabilmente. Poi il team di business ha richiesto l'aggiunta di modelli nazionali: la revisione dei contratti con DeepSeek, le risposte del servizio clienti con Qwen, i testi di marketing con ERNIE. Dopo tre settimane, nel codice backend erano stati inseriti 4 set di SDK, la logica di autenticazione era sparsa in 7 file, le fatture non quadravano e l'output in streaming sul frontend a volte funzionava e a volte produceva caratteri illeggibili. Il problema non era nei modelli stessi, ma nell'assenza di uno strato di gateway per modelli.
Le trappole dell'integrazione multi-modello si calpestano quasi sempre nello stesso punto
Cominciamo dai conflitti tra SDK. L'SDK Python di OpenAI e quelli di diverse aziende nazionali si chiamano tutti client, le versioni delle dipendenze entrano in conflitto e i client HTTP di Qwen e ERNIE gestiscono i parametri di timeout in modo diverso. Alla fine gli ingegneri hanno creato un ambiente virtuale separato per ogni modello, isolando le chiamate tramite subprocess. Funziona, ma il costo operativo è assurdamente alto.
Passiamo alla gestione delle Key. Le console dei quattro fornitori hanno ciascuna un proprio sistema di Key: alcune per progetto, altre per applicazione, altre ancora con sotto-account. Le Key di test e produzione erano mescolate; una volta uno stagista ha caricato la Key di produzione su un repository pubblico di GitHub. Anche se è stata revocata entro dieci minuti, quel pomeriggio l'intero team ha passato il tempo a controllare i log delle chiamate.
La questione della metrica di fatturazione è ancora più fastidiosa. DeepSeek fattura a token, alcuni modelli Qwen fatturano separatamente input e output, e certe versioni di ERNIE hanno ancora la logica legacy di fatturazione a caratteri. A fine mese la finanza vuole una fattura consolidata, e gli ingegneri possono solo esportare manualmente quattro CSV e poi fare il mapping. Anche i formati di output in streaming non sono uniformi: alcuni restituiscono il campo data in SSE, altri incapsulano un livello JSON, e il codice di parsing del frontend è pieno di if else.
Cosa fa davvero un gateway per modelli nel mezzo
L'essenza di un gateway per modelli è uno strato di reverse proxy più adattamento di protocollo: all'esterno espone un'interfaccia unificata compatibile con OpenAI, all'interno traduce le richieste nel formato che ciascun fornitore comprende. In seguito abbiamo ricostruito questa catena in un altro progetto utilizzando la capacità di aggregazione API AI di SiCore TokenWorks, e l'impressione è stata piuttosto diretta.
L'autenticazione unificata è il primo passo. Il lato business riceve una sola Key, mentre il gateway mantiene internamente la mappatura delle credenziali verso i vari fornitori; rotazione delle Key, limiti di quota e whitelist IP vengono gestiti a livello di gateway. La traduzione del protocollo è il secondo passo: convertire l'array messages nel formato OpenAI in input per Qwen e prompt per ERNIE, e convertire le risposte nel formato unificato choices. Anche il formato dei chunk in streaming viene appianato in questo strato, così il frontend scrive una sola logica di parsing.
L'instradamento delle richieste determina verso quale modello andare. Si può fare routing statico per tipo di attività oppure selezione dinamica in base al costo. Quando abbiamo testato il routing multi-modello di token8341, abbiamo instradato in modo fisso le richieste di revisione contratti verso DeepSeek-V3 e le richieste di servizio clienti su testi brevi verso la versione leggera di Qwen; il costo complessivo delle chiamate è sceso di circa il sessanta per cento rispetto a far passare tutto da GPT-4o. L'aggregazione dei costi è l'ultimo passo: il gateway applica tag per etichetta di business e a fine mese produce direttamente la fattura ripartita, senza che la finanza debba più comporre manualmente le tabelle.
Alcuni consigli pratici per l'implementazione
Primo, non chiamate direttamente gli SDK dei fornitori nel codice di business, anche se integrate un solo modello. Mantenete uno strato sottile di incapsulamento: quando in seguito aggiungerete modelli, la differenza nella quantità di modifiche sarà di un ordine di grandezza. Secondo, le Key devono passare attraverso un gateway o un servizio di gestione delle chiavi; l'approccio di hardcodificarle nei file di configurazione prima o poi causerà problemi. Terzo, iniziate con strategie di routing statiche; dopo due settimane, con dati reali sulle chiamate, potrete valutare il routing dinamico basato sui costi, altrimenti rischiate di instradare richieste critiche verso modelli inadeguati solo per risparmiare pochi centesimi.
Nella scelta della soluzione valutate due aspetti: se è compatibile con l'SDK OpenAI, perché la compatibilità significa costi di migrazione quasi nulli e basta cambiare una riga di base_url per passare da un modello all'altro; e se supporta la fatturazione a consumo e l'aggregazione dei costi, requisito fondamentale per le aziende che condividono un'unica capacità AI tra più linee di business. L'approccio di SiCore TokenWorks in questo ambito prevede la copertura completa delle API dei grandi modelli nazionali e la fatturazione a consumo; nel nostro progetto, il criterio di fatturazione si è rivelato piuttosto chiaro.
In una frase: un gateway per modelli non è indispensabile, ma quando arrivate al terzo modello passa da opzionale a necessario. Come lettura di approfondimento, potete consultare la documentazione delle specifiche dell'interfaccia compatibile OpenAI per capire come è progettato lo strato di protocollo e evitare inutili deviazioni quando scrivete il vostro incapsulamento.