IA

Le funzionalità di Intelligenza Artificiale di Antimatter utilizzano i modelli che scegli: un provider cloud o un server sulla tua rete. Nessun dato viene inviato finché non configuri un modello. Questa pagina illustra le connessioni ai modelli, ciascuna funzionalità, i dati che invia e come disattivarla.

Le funzionalità di IA

FunzionalitàConfigurata inTipo di modelloAttiva di default
Riscrittura nella barra di composizione: migliora, accorcia, correggi o traduci un messaggio prima di inviarloAI › Funzionalità integrate, con una connessione al modelloUn modello di chat (LLM)no
Riepiloghi: riassunti dei canali scelti dagli utentiAI › Funzionalità integrate, con una connessione al modelloUn modello di chat (LLM)no
Traduzione automatica dei canaliConfigurazione sito › LocalizzazioneUna connessione al modello, LibreTranslate o un'API compatibile con OpenAIno
Lettura ad alta voceIntegrazioni › Conversione da testo a voce, facoltativamente con una connessione al modelloConversione da testo a voce, compatibile con OpenAIno
Agenti AI: chat con un bot, riepiloghi dei thread, riepiloghi delle chiamateL'app AgentsQualsiasi servizio di modello linguistico di grandi dimensioni (LLM)L'app è attiva, ma non fa nulla finché non aggiungi un servizio
Trascrizioni delle chiamate e sottotitoli in tempo realeL'app CallsConversione da voce a testo, compatibile con OpenAIno

"Compatibile con OpenAI" indica un server che offre la stessa API HTTP di OpenAI. La maggior parte dei server di modelli che puoi eseguire in autonomia lo fa (ad esempio Ollama, vLLM, il server di llama.cpp, o i server per la conversione da voce a testo e da testo a voce), così come molti provider cloud e gateway come LiteLLM o OpenRouter. Non è necessaria alcuna licenza per l'uso di queste funzionalità.

Le funzionalità integrate (riscrittura, riepiloghi, traduzione e lettura ad alta voce) non richiedono l'app Agenti: utilizzano le connessioni ai modelli che aggiungi nella Console di Sistema.

Connessioni ai modelli

Una connessione al modello è un provider di Intelligenza Artificiale che Antimatter può chiamare: il suo indirizzo, la sua chiave e i suoi modelli. La aggiungi una volta, poi la selezioni per ciascuna funzionalità che deve utilizzarla. Esistono due tipi:

  • Connessioni a livello di server, gestite dagli amministratori di sistema in Console di Sistema › AI › Connessioni ai modelli. Solo queste possono servire le funzionalità integrate. Le app possono utilizzarle anch'esse, per gli utenti autorizzati.
  • Connessioni della community, che gli amministratori di una community aggiungono per la propria community nelle impostazioni della community (vedi di seguito). Le app le utilizzano per gli utenti della community. Non servono mai le funzionalità integrate.

La sezione AI della Console di Sistema è visibile alle persone che possono gestire le connessioni a livello di server: di default, gli amministratori di sistema. La sua pagina Connessioni ai modelli elenca le connessioni a livello di server e quelle di tutte le community.

Aggiungi una connessione

In Console di Sistema › AI › Connessioni ai modelli, clicca su Aggiungi una connessione, poi compila il modulo:

CampoCosa inserire
Impostazioni predefiniteCompila il provider e l'indirizzo di un servizio noto: OpenAI, Mistral, Gemini, OpenRouter, oppure Ollama e LiteLLM sul server stesso. Facoltativo.
NomeIl nome che gli amministratori vedono quando lo selezionano, ad esempio "OpenAI aziendale".
ProviderCompatibile con OpenAI (la maggior parte dei provider, gateway e server di modelli che esegui in autonomia) oppure Anthropic. I servizi cloud con accesso tramite credenziali proprie, come AWS Bedrock, Google Vertex AI o Azure con Entra ID, passano tramite il loro endpoint compatibile con OpenAI o un gateway come LiteLLM.
URL di baseL'indirizzo dell'API, fino a includere /v1, ad esempio http://ollama:11434/v1. Se lasciato vuoto, viene utilizzato quello del provider (https://api.openai.com/v1 o https://api.anthropic.com/v1).
Chiave APILa chiave del provider. Lasciala vuota se l'endpoint non ne richiede una. Viene memorizzata in forma cifrata e non viene mai mostrata di nuovo: il modulo mostra solo le ultime quattro caratteristiche e offre la possibilità di mantenerla, sostituirla o rimuoverla.
Intestazioni aggiuntiveIntestazioni da inviare con ogni richiesta, per gateway che ne necessitano. I loro valori vengono memorizzati in forma cifrata come la chiave e non vengono mai mostrati di nuovo: per modificarli, è necessario inserirli nuovamente.
ModelliIl modello utilizzato per ciascuna funzionalità quando una funzione o un'app non ne specifica uno: Chat, Embeddings, Trascrizione e Decisioni. Carica modelli elenca i modelli offerti dall'endpoint. Lascia una funzionalità vuota se l'endpoint non la offre. Le connessioni Anthropic supportano solo la chat.
API DecisioniCome viene chiamato il modello per le decisioni: Decisioni OpenAI oppure SystemOne. Rilevante solo per le app che richiedono decisioni.
LimitiVedi Limiti e budget.
CommunitySolo connessioni a livello di server. Tutte le community: utilizzabile in ogni community, nonché nei messaggi diretti e di gruppo. In caso contrario, solo nelle community che scegli.
Chi può utilizzarloTutti dove è utilizzabile, oppure solo i team (gruppi di persone all'interno di una community) e i ruoli che scegli (Amministratori di sistema, Amministratori di community). Anche gli ospiti consente agli ospiti di utilizzarlo; senza questa opzione, gli ospiti non possono, nemmeno con Tutti.

Test connessione verifica l'indirizzo e la chiave: il server chiede all'endpoint i suoi modelli, oppure invia una chat di un solo token. Un indirizzo modificato viene testato con la chiave salvata solo dopo il salvataggio, oppure se si reinserisce la chiave. Clicca Aggiungi connessione per salvare.

Il server effettua le richieste direttamente, quindi deve poter raggiungere l'API: un server di modelli nello stesso progetto compose, nella tua rete o su Internet. Le richieste in uscita rispettano le variabili HTTP_PROXY e HTTPS_PROXY.

L'eliminazione di una connessione ne dimentica la chiave. Le funzionalità che la utilizzavano smettono di usare l'IA finché non se ne seleziona un'altra.

Limiti e budget

Ogni connessione ha quattro limiti. Un valore vuoto o 0 indica l'assenza di limiti.

  • Richieste al minuto e Per persona, richieste al minuto. Vengono conteggiate separatamente da ciascun server: un cluster di tre server consente fino a tre volte la velocità impostata.
  • Token al mese e Per persona, token al mese: budget di token, per mese solare (UTC), conteggiati nel database per l'intero cluster. Più richieste eseguite nello stesso istante possono superare leggermente un budget.

I limiti per persona si applicano anche alla riscrittura e ai riepiloghi: vengono conteggiati a carico della persona che riscrive o che possiede il riepilogo.

Utilizzo

L'elenco mostra l'utilizzo di ciascuna connessione in questo mese. Utilizzo apre i dettagli: token in ingresso e in uscita, richieste, budget mensile, utilizzo per giorno (UTC) e per tipo di utilizzo (Riscrivi, Riepiloghi, Traduzione automatica, Conversione da testo a voce, Person, through apps o un'app).

Ogni chiamata fatta da una persona o da un'app tramite una connessione genera anche un record di audit: chi, la connessione, l'uso, il modello, i conteggi dei token e se è andata a buon fine, ma mai il contenuto. Le funzionalità integrate vengono conteggiate solo nell'utilizzo: la traduzione da sola genera una chiamata per ogni messaggio e lingua.

Connessioni della community

Gli amministratori di una community aggiungono le connessioni della propria community nelle impostazioni della community, nella scheda Connessioni ai modelli. Il modulo è lo stesso, senza Community: la connessione di una community funziona solo nei suoi canali, per i suoi membri, e il suo pubblico può nominare solo i suoi team. I ruoli con il permesso Gestisci connessioni ai modelli possono gestirli anche loro. Di default, gli amministratori di community lo hanno.

La connessione di una community non può raggiungere indirizzi privati o loopback (ad esempio un server Ollama nella tua rete), a meno che Console di Sistema › Ambiente › Sviluppatore › Consenti connessioni interne non verificate a (ServiceSettings.AllowedUntrustedInternalConnections) non li elenchi. Le connessioni a livello di server possono farlo.

Vedi Impostazioni della community per la parte degli amministratori di community.

La chiave di crittografia

Le chiavi e gli header aggiuntivi delle connessioni ai modelli sono cifrati nel database (AES-256-GCM) con una sola chiave di cifratura. Un semplice backup del database non li rivela. Il server cerca la chiave in questo ordine:

  1. La variabile AM_AI_ENCRYPTION_KEY: 32 byte casuali, in base64. Creala con openssl rand -base64 32.
  2. In alternativa, il file ai-encryption.key nella radice della directory dati del server (FileSettings.Directory, ./data/ di default). Il server lo crea, leggibile solo da sé, la prima volta che una connessione ne ha bisogno. Le app, gli esportazioni e gli archivi di file non possono leggerlo.
Senza la chiave, le chiavi API salvate non possono essere lette e ogni connessione deve essere fornita nuovamente della propria chiave. Effettua il backup della chiave insieme al database (vedi Backup e aggiornamenti) e tienila separata dai backup del database.

Quando impostare la variabile:

  • Con il file compose del sito. compose.yaml passa AM_AI_ENCRYPTION_KEY da .env e mantiene il file della chiave nel volume data quando la variabile è vuota. È preferibile impostare la variabile: il backup di .env conterrà così la chiave, separata dal database. Aggiungila a .env ed esegui docker compose up -d:
    echo "AM_AI_ENCRYPTION_KEY=$(openssl rand -base64 32)" >> .env
    Se il server ha già creato il proprio file di chiave, inserisci in .env la chiave che contiene, in modo che le chiavi salvate restino leggibili: docker compose exec antimatter cat /antimatter/data/ai-encryption.key la stampa.
  • Un cluster i cui file sono in S3. I suoi server non condividono una directory, quindi il server non crea il file: imposta la stessa variabile su ogni server. Finché non è impostata, le connessioni non possono salvare le chiavi.
  • Con l'archivio di rilascio o i pacchetti, il file è in data/ (/var/lib/antimatter/data per i pacchetti). Puoi lasciarlo lì o impostare la variabile nel tuo file di ambiente.

Per cambiare la chiave, imposta la nuova in AM_AI_ENCRYPTION_KEY e la vecchia in AM_AI_ENCRYPTION_PREVIOUS_KEYS (più chiavi separate da virgole): le chiavi salvate con la vecchia possono ancora essere lette. La chiave di una connessione viene cifrata con la nuova chiave quando la si digita di nuovo. Mantieni la vecchia chiave nell'elenco finché la chiave di ogni connessione non è stata digitata di nuovo.

Le funzionalità integrate

In Console di Sistema › AI › Funzionalità integrate, seleziona per ogni funzionalità una connessione a livello di server e il relativo modello, oppure Disattivo. Una funzionalità senza connessione non utilizza l'AI. Carica modelli elenca tutti i modelli della connessione; di default, ogni funzionalità utilizza il modello di chat della connessione.

FunzionalitàImpostazioneCosa serve in più
Riscrittura nella casella di composizione: il menu AI della casella dei messaggi (migliora, accorcia, correggi, traduci)AISettings.RewriteNiente: il menu viene visualizzato una volta selezionata una connessione.
Riepiloghi: riepiloghi dei canali scelti dagli utenti, su richiesta o secondo una pianificazioneAISettings.RecapsAbilita sintesi AI in Console di Sistema › Configurazione sito › Riepiloghi (attivo di default), che imposta anche il numero massimo di riepiloghi che gli utenti possono creare.
Traduzione automaticaAISettings.AutoTranslationIl provider di traduzione Connessione modello (consigliato), in Traduzione automatica.
Conversione da testo a voceAISettings.TextToSpeechLeggi i messaggi ad alta voce attivo, in Conversione da testo a voce. Il punto di accesso /audio/speech della connessione sostituisce l'indirizzo e la chiave impostati lì.

Ogni impostazione ha una chiave ConnectionId e una chiave Model, ad esempio AISettings.Rewrite.ConnectionId (AM_AISETTINGS_REWRITE_CONNECTIONID). Un Model vuoto utilizza il modello predefinito della connessione.

Le funzionalità integrate utilizzano i limiti della connessione, ma non il suo pubblico: chiunque può utilizzare la funzionalità può utilizzare la sua connessione. Una connessione che richiede attenzione, o che è stata eliminata, fa fallire la funzionalità finché non ne selezioni un'altra: la pagina lo indica.

Agenti IA

L'app Agents (id mattermost-ai) è attiva di default. La sua configurazione richiede due passaggi: aggiungere un servizio (una connessione a un provider di modelli) e quindi creare agenti (bot che utilizzano un servizio).

The Agents panel on the right of a channel: a user asked about an incident and the agent answered with a summary of the related threads.
Un agente che risponde nel pannello Agents.
Gli agenti dell'app Agents continuano a utilizzare i propri Servizi AI dell'app, non le connessioni modello. Le funzionalità integrate non passano più attraverso l'app. Su un server aggiornato alla versione 0.9.0, i servizi dell'app sono stati copiati una sola volta nelle connessioni modello a livello di server (vedi Aggiornamento alla versione 0.9.0).

1. Aggiungi un servizio

Vai a Console di Sistema › Plugins › Agenti e, sotto Servizi AI, fai clic su Aggiungi un servizio AI. Scegli il Tipo di servizio:

  • OpenAI Compatible: per un server di modelli che gestisci tu stesso, o per qualsiasi provider con un'API in stile OpenAI. Compila API URL (ad esempio http://ollama:11434/v1 o http://vllm.internal:8000/v1) e Chiave API solo se il server ne richiede una. Se il server supporta solo l'API Chat Completions, disattiva Use Responses API.
  • OpenAI, Anthropic, Google Gemini, Google Vertex AI, AWS Bedrock, Azure, Cohere, Mistral: provider ospitati. Ognuno richiede la propria Chiave API (Bedrock: una regione AWS e le credenziali o un ruolo IAM; Vertex AI: un progetto, una regione e un account di servizio; Azure: anche l'API URL).

Poi imposta il Modello predefinito (una lista se il provider può riportare i suoi modelli, altrimenti digita il nome) e, se il provider non li riporta, il Limite di token in input e il Limite di token in output. Un Servizio di backup può subentrare in caso di errore. Salva.

Il server effettua queste richieste in autonomia, quindi deve poter raggiungere l'API: un server di modelli nello stesso progetto compose, sulla tua rete o su Internet. Le richieste in uscita rispettano le variabili HTTP_PROXY e HTTPS_PROXY.

2. Crea agenti

Gli agenti vengono creati nella pagina Agenti dell'app web: aprila con Gestisci nel selettore di agenti del pannello Agenti (nell'interfaccia classica, anche dal menu del prodotto). Il suo indirizzo è https://chat.example.com/plug/mattermost-ai/agents. Ogni agente ha un Nome visibile, un Nome utente agente (come viene menzionato dalle persone), un Servizio e, facoltativamente, un modello, Istruzioni personalizzate e interruttori per Abilita visione (immagini) e Abilita strumenti. La sua scheda Accesso limita in quali canali può essere utilizzato e quali utenti possono utilizzarlo. Sotto Funzioni AI nella Console di Sistema, Bot predefinito sceglie l'agente utilizzato quando nessuno viene selezionato, ad esempio per i riepiloghi delle chiamate.

Per impostazione predefinita, ogni utente può creare i propri agenti, utilizzando i servizi configurati. Per riservare questa funzione agli amministratori, rimuovi il permesso Agenti AI personali dal ruolo dei membri in Console di Sistema › Gestione utenti › Permessi.

Funzionalità facoltative dell'app Agenti

  • Ricerca con embedding (sperimentale, disattivata): ricerca semantica sui messaggi. Richiede PostgreSQL con l'estensione pgvector e un modello di embedding (OpenAI o compatibile con OpenAI). Invia ogni messaggio al modello di embedding, inclusi i canali privati e i messaggi diretti.
  • Ricerca web (disattivata): consente agli agenti di cercare sul web tramite Google, Brave o un server SearXNG gestito da te.
  • Strumenti nativi: con i provider che li offrono, gli agenti possono utilizzare la ricerca web del provider stesso (abilitata di default per i nuovi agenti, dove supportato), il recupero da web e l'esecuzione del codice. Questi vengono eseguiti presso il provider. Disattivali per ogni agente.
  • Model Context Protocol (MCP): collega gli agenti a server MCP di cui ti fidi, per strumenti aggiuntivi.
  • Debug: Output di tracciamento (disattivato, log del server o endpoint OpenTelemetry) e Abilita registrazione utilizzo token, che scrive i conteggi dei token in logs/agents/token_usage.log.

Conversione da voce a testo: trascrizioni e sottotitoli delle chiamate

Le chiamate possono essere trascritte, con sottotitoli in tempo reale, da un server speech-to-text che offre un endpoint /v1/audio/transcriptions compatibile con OpenAI. La configurazione è in Chiamate e voce. Con Riepiloga trascrizioni attivo, l'agente predefinito pubblica anche un riepilogo di ogni trascrizione.

Conversione da testo a voce: lettura ad alta voce

Con la conversione da testo a voce attiva, il menu di ogni messaggio include Leggi ad alta voce: il server invia il testo del messaggio a un'API di conversione da testo a voce e riproduce l'audio. Le impostazioni si trovano in Console di Sistema › Integrazioni › Conversione da testo a voce:

ImpostazioneChiave e variabileCosa inserire
Leggi i messaggi ad alta voceTextToSpeechSettings.Enable, AM_TEXTTOSPEECHSETTINGS_ENABLEtrue (disattivato di default)
URL di base APITextToSpeechSettings.URL, AM_TEXTTOSPEECHSETTINGS_URLL'URL base fino a e incluso /v1, ad esempio http://tts.internal:8000/v1. Il server chiama il suo endpoint /audio/speech.
ModelloTextToSpeechSettings.Model, AM_TEXTTOSPEECHSETTINGS_MODELIl modello come denominato dall'API, ad esempio tts-1. Obbligatorio.
VoceTextToSpeechSettings.Voice, AM_TEXTTOSPEECHSETTINGS_VOICEUna delle voci del modello, oppure vuoto per usare quella predefinita.
Chiave APITextToSpeechSettings.APIKey, AM_TEXTTOSPEECHSETTINGS_APIKEYInviato come token bearer. Lasciare vuoto se l'API non ne richiede uno.

Per utilizzare una connessione al modello invece dell'indirizzo e della chiave sopra, selezionala per Conversione da testo a voce in AI › Funzionalità integrate. La pagina indica quindi che i messaggi vengono letti ad alta voce con quella connessione: URL di base API e Chiave API non vengono utilizzati, Voce continua a essere utilizzata, così come Modello quando la connessione non specifica un modello. Leggi i messaggi ad alta voce deve comunque essere attivo.

Prima dell'invio, il server rimuove i blocchi di codice, i collegamenti, i codici emoji e la formattazione, mantenendo al massimo 4000 caratteri. Richiede audio in formato MP3 e conserva gli ultimi 64 risultati in memoria, in modo che un messaggio letto due volte venga inviato solo una volta.

Traduzione automatica

La traduzione automatica mostra i messaggi di un canale nella lingua di ciascun lettore. Configurala in Console di Sistema › Configurazione sito › Localizzazione, sotto Traduzione automatica:

ImpostazioneChiavePredefinito
AbilitaAutoTranslationSettings.Enabledisattivato
Provider di traduzioneAutoTranslationSettings.Providerconnection (visualizzato come "Connessione al modello (consigliato)", quello selezionato quando nessuno è impostato), libretranslate, openai ("API compatibile con OpenAI, configurata qui") o agents ("Servizio dell'app di chat AI (precedente)")
Lingue consentiteAutoTranslationSettings.TargetLanguagesen: le lingue in cui i messaggi possono essere tradotti
Timeout di traduzione (ms)AutoTranslationSettings.TimeoutMs5000
Limita la traduzione automatica per i messaggi diretti e i messaggi di gruppoAutoTranslationSettings.RestrictDMAndGMdisattivato

Ogni provider ha i propri campi:

  • Connessione al modello: una connessione a livello di server e il suo modello, la stessa impostazione di Traduzione automatica in AI › Funzionalità integrate (AISettings.AutoTranslation). Un modello di traduzione dedicato è veloce e accurato; funziona anche un LLM generale.
  • LibreTranslate: Endpoint API di LibreTranslate e Chiave API di LibreTranslate (AutoTranslationSettings.LibreTranslate.URL, .APIKey). Un server LibreTranslate può essere eseguito sulla tua rete.
  • API compatibile con OpenAI: URL di base API (fino a e incluso /v1; il server utilizza il suo endpoint chat completions), Modello e Chiave API (AutoTranslationSettings.OpenAI.URL, .Model, .APIKey). Un piccolo modello di traduzione eseguito localmente funziona bene.
  • Servizio dell'app di chat AI (precedente): il provider dei server configurati prima della versione 0.9.0, che utilizzava un servizio dell'app Agenti. Non richiede più l'app: traduce con la connessione selezionata per la traduzione automatica in AI › Funzionalità integrate, oppure con la connessione copiata dal servizio dell'app durante l'aggiornamento. Passa a Connessione al modello sposta l'impostazione sul provider consigliato.

Una volta attivato, gli amministratori dei canali attivano la traduzione per un canale nelle sue impostazioni (Traduzione automatica), e ogni membro può disattivarla dal menu del canale (Traduci messaggi). Nei messaggi diretti e di gruppo, qualsiasi membro può attivarla; con la restrizione attiva, la traduzione non è disponibile lì. I messaggi tradotti mostrano "Tradotto da …" con un link all'originale.

Il codice, i collegamenti, le menzioni e le emoji vengono sostituiti da segnaposto prima dell’invio del testo, per poi essere ripristinati successivamente.

Dove vanno i dati

FunzionalitàCosa viene inviatoA chi
RiscriviIl messaggio in fase di scrittura e l'istruzione selezionataLa connessione selezionata per esso
RiepiloghiI messaggi dei canali nel riepilogo e le istruzioni della personaLa connessione selezionata per esso
App che utilizzano connessioni al modelloCosa invia ciascuna app, per la persona che la utilizzaLe connessioni che quella persona può utilizzare
AgentiLa richiesta, i messaggi del thread o del canale di cui si tratta, le istruzioni dell’agente, i risultati degli strumenti, le immagini quando la visione è attiva, e il nome, il nome utente, la posizione e la lingua dell’utente che fa la richiestaL’API del servizio
Ricerca con embeddingOgni messaggio (tranne quelli dei bot e dei sistemi)L’API di embedding
Strumenti nativi e ricerca webQuery di ricerca, pagine da recuperare, codiceIl provider, o il motore di ricerca scelto
Trascrizione delle chiamateLa voce di tutti coloro che parlano mentre è attivaL’API speech-to-text
Lettura ad alta voceIl testo del messaggio letto ad alta voceL'API di conversione da testo a voce, o la connessione selezionata per essa
TraduzioneIl testo dei messaggi nei canali tradottiLa connessione al modello, LibreTranslate o l'API compatibile con OpenAI

Per mantenere tutto all’interno della tua rete, indirizza ogni funzionalità verso server che gestisci tu stesso. Se utilizzi un provider cloud, verifica i termini di conservazione dei dati e informa gli utenti su quali funzionalità inviano i loro messaggi all’esterno.

Disattivare l’IA

Non esiste un unico interruttore: ogni funzionalità ha il proprio.

  • Riscrittura e riepiloghi: impostali su Disattivo in Console di Sistema › AI › Funzionalità integrate. Le persone continuano a leggere i riepiloghi che hanno già.
  • Connessioni ai modelli: elimina una connessione per interromperne ogni utilizzo. Senza alcuna connessione, né le funzionalità integrate né le app possono usare l'AI tramite il server.
  • Agenti: disattiva l'app Agenti in Console di Sistema › Plugins › Gestione plugin. Questo rimuove anche i riepiloghi delle chiamate.
  • Trascrizione e sottotitoli: AM_CALLS_ENABLE_TRANSCRIPTIONS=false e AM_CALLS_ENABLE_LIVE_CAPTIONS=false (valori predefiniti).
  • Leggi ad alta voce: disattiva Leggi i messaggi ad alta voce (AM_TEXTTOSPEECHSETTINGS_ENABLE=false, il valore predefinito), indipendentemente dal fatto che utilizzi una connessione.
  • Traduzione: disattiva la traduzione automatica (AM_AUTOTRANSLATIONSETTINGS_ENABLE=false, valore predefinito).

Disattivare l'app Agenti non disattiva le altre funzionalità: queste utilizzano connessioni ai modelli o le proprie API.