Mistral 7B per structured output JSON e GDPR-compliance europea

Mistral 7B è il modello che apro quando ho un task di estrazione strutturata su contenuti che preferisco non far uscire dall’Unione Europea. Mistral La Plateforme è una società francese: dati gestiti sotto giurisdizione CNIL, infrastruttura con residency EU di default. Per i contenuti in italiano un po’ più sensibili (note di servizio interne, descrizioni di incidenti del mio homelab, output di tool con pezzi di contesto locale) preferisco un provider europeo a uno americano.

La qualità di Mistral 7B su task di structured output JSON è solida e la latenza è ragionevole. Il modello è open weights, Apache 2.0, rilasciato da Mistral AI nel 2023: pesi pubblici, ridistribuibili, ispezionabili. Il free tier “Experiment” basta per uso individuale, ma la policy di training di default va letta con attenzione e ne parlo più sotto.

Configurazione di opencode

La chiave la creo su console.mistral.ai/api-keys (free tier Experiment, niente carta), la salvo in ~/.config/claude-credentials/credentials.env come MISTRAL_API_KEY. Nel file ~/.config/opencode/opencode.json registro il provider:


{
  "provider": {
    "mistral": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "apiKey": "{env:MISTRAL_API_KEY}",
        "baseURL": "https://api.mistral.ai/v1"
      },
      "models": {
        "open-mistral-7b": { "name": "Mistral 7B" }
      }
    }
  }
}

Per aprire opencode dentro la cartella di lavoro:


opencode . --model mistral/open-mistral-7b

La working directory che passo come argomento dipende dal task: per analisi incidenti uso ~/Documenti/incidenti//, per riscritture di config la cartella del servizio.

Un esempio di sessione reale

Settimana scorsa, alle 03:10 del mattino, un mio container web crashava in modo intermittente. Avevo due ore di log dentro incidenti/2026-05/server.log. Volevo trasformare quelle righe in un report JSON strutturato per archiviarlo nel mio sistema di tracking incidenti. Ho aperto opencode nella cartella e ho dato il prompt:

leggi server.log. Produci output JSON con questo schema: {window_start, window_end, error_count, error_categories: [{category, count, sample_message}], hypothesis, suggested_next_steps: []}. Niente prosa, solo JSON valido.

Risposta in due secondi. Il JSON era pulito, validava al primo colpo con jq. La sezione error_categories aveva raggruppato bene le righe in tre cluster, lo hypothesis puntava a un timeout sul backend Redis che si è poi rivelato corretto, e i suggested_next_steps includevano tre azioni concrete (aumentare il timeout client, abilitare retry exponential backoff, verificare la latenza di rete verso il container Redis). Ho archiviato il JSON così com’era.

Cosa fa bene

Structured output JSON pulito quando lo schema è specificato in modo netto. Task di estrazione entità da testo italiano. Riassunti corti e fattuali. Trasformazioni di formato a regole esplicite. Per essere un modello da 7B regge sorprendentemente bene su prompt fino a 10-15k token.

Cosa fa meno bene

Ragionamento step-by-step lungo: si perde. Code-gen complessa: meglio Qwen3 32B o Llama 3.3 70B. Output narrativo: tende a essere piatto. Su task molto aperti propone soluzioni generiche.

Privacy e termini del provider

Qui c’è una distinzione importante che vale la pena leggere bene. Sul free tier “Experiment” di Mistral La Plateforme, di default gli input vengono usati per migliorare i modelli. Esiste un opt-out disponibile nell’Admin Panel del proprio account, da attivare manualmente. I piani Paid e Le Chat Enterprise non hanno training di default sui dati cliente.

La retention dei log è di 30 giorni rolling per abuse monitoring, poi i dati vengono cancellati. La giurisdizione è francese (CNIL), l’infrastruttura ha residency EU di default. Questo è il punto su cui Mistral batte tutti gli altri provider del gruppo: dato che resta in Europa, GDPR di default, ricorso CNIL in caso di problemi.

Il modello Mistral 7B è open weights, Apache 2.0. Posso scaricare i pesi, ispezionarli, riprodurli in locale. Il free tier “Experiment” serve modelli open Apache 2.0, mentre i modelli proprietari Premier (Codestral, Mistral OCR 3, Voxtral) sono solo sui piani Paid.

Operazione che faccio prima di tutto: entro nell’Admin Panel del mio account Mistral e disattivo il training sui dati. È un click ma se non lo fai i prompt finiscono nel pipeline di miglioramento.

Cosa non gli mando

Anche con opt-out training attivo, evito di mandare credenziali, dati personali identificabili di terzi, contenuti coperti da NDA. Il log di un incidente del mio homelab passa solo dopo aver redatto IP privati e hostname interni. Per contenuti molto sensibili fallback a qwen2.5-coder:14b su Ollama in locale: il dato resta sulla mia macchina senza nessun trasferimento di rete.

In pratica

Nel mio toolkit Mistral 7B è il “primo provider europeo” per task di estrazione strutturata su contenuti italiani. Per code-gen vado su Qwen3 32B o Llama 3.3 70B su Groq (più capaci, più veloci, ma residency US). Per ragionamento lungo Qwen3 235B su Cerebras. Per task triviali Llama 3.1 8B Instant. Mistral resta nel mix come scelta di default quando la giurisdizione conta più della pura performance.


Immagine generata con Cloudflare Workers AI / FLUX.