notizia

Preciso e 0 errori, inserisci il prezzo e si romperà! L'API dell'annuncio ufficiale di OpenAI supporta l'output strutturato, la precisione JSON è del 100%

2024-08-07

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



  Nuovo rapporto sulla saggezza

Redattore: Dipartimento editoriale
[Introduzione alla Nuova Saggezza] Buone notizie per i programmatori! Il nuovo modello API lanciato da OpenAI supporta tutti l'output strutturato, il tasso di corrispondenza dello schema JSON arriva fino al 100% e il costo viene immediatamente ridotto della metà.
Ti stai ancora scervellando per pensare a una serie di parole immediate e hai mal di testa a causa dei diversi risultati di output dopo una singola operazione?
OpenAI ha finalmente ascoltato la voce delle masse e ha fornito agli sviluppatori la tanto attesa funzionalità numero 1.
OpenAI ha annunciato oggi il lancio di nuove funzionalità e l'API ChatGPT ora supporta l'output strutturato JSON.
JSON (JavaScript Object Notation) è lo standard di settore per i formati di scambio di file e dati perché è facile da leggere per gli esseri umani e facile da analizzare per le macchine.
Tuttavia, LLM spesso funziona contro JSON, producendo spesso allucinazioni, generando risposte che seguono solo parzialmente le istruzioni o generando un mucchio di "libri celesti" che non possono essere completamente analizzati.
Ciò richiede agli sviluppatori di utilizzare più strumenti open source, provare diversi prompt o ripetere richieste per generare l'output desiderato, il che richiede tempo e manodopera.
La funzionalità di output strutturato, rilasciata oggi, risolve i problemi spinosi di cui sopra e garantisce che l'output generato dal modello corrisponda allo schema specificato in JSON.
La funzione di output strutturato è sempre stata la caratteristica numero uno richiesta dagli sviluppatori Ultraman ha anche affermato nel suo tweet che questa versione è stata rilasciata in risposta alle richieste degli utenti.
Le nuove funzionalità rilasciate da OpenAI hanno infatti colpito il cuore di molti sviluppatori, e tutti concordano sul fatto che "Questo è un grosso problema".
Molte persone hanno lasciato messaggi in cui esprimevano i loro elogi, chiamando "Eccellente!"
Alcuni sono felici e altri sono tristi. Questo aggiornamento di OpenAI ha fatto temere alle persone che possa inghiottire le startup.
Tuttavia, per gli utenti più comuni, la domanda di cui sono più preoccupati è quando verrà rilasciato GPT-5. Per quanto riguarda lo schema JSON, "Che cos'è?"
Dopotutto, senza le notizie di GPT-5, il DevDay di OpenAI di questo autunno potrebbe essere molto più tranquillo rispetto allo scorso anno.

Garantisci facilmente la coerenza dello schema

Con l'output strutturato, è sufficiente definire uno schema JSON e l'intelligenza artificiale non sarà più "intenzionale" e non emetterà obbedientemente i dati secondo le istruzioni.
Inoltre, la nuova funzione non solo rende l’IA più obbediente, ma migliora anche notevolmente l’affidabilità del contenuto di output.
Nella valutazione del tracciamento dello schema JSON complesso, il nuovo modello gpt-4o-2024-08-06 con output strutturato ha ricevuto un punteggio perfetto del 100%. In confronto, gpt-4-0613 ha ottenuto meno del 40%.
In effetti, la funzione JSON Schema è stata lanciata da OpenAI durante il DevDay lo scorso anno.
Ora OpenAI ha esteso questa funzionalità nell'API, garantendo che l'output generato dal modello corrisponda esattamente allo schema JSON fornito dallo sviluppatore.
La generazione di dati strutturati da input non strutturati è uno dei casi d’uso principali dell’intelligenza artificiale nelle applicazioni odierne.
Gli sviluppatori utilizzano l'API OpenAI per creare potenti assistenti in grado di ottenere dati e rispondere a domande tramite chiamate di funzioni, estrarre dati strutturati per l'immissione dei dati e creare flussi di lavoro agenti in più fasi, consentendo a LLM di agire.

Principi tecnici

OpenAI adotta un duplice approccio per migliorare la corrispondenza tra l'output del modello e lo schema JSON.
Sebbene le prestazioni del modello siano migliorate in modo significativo, raggiungendo una precisione del 93% nei test benchmark, l’incertezza intrinseca rimane.
Al fine di garantire la stabilità delle applicazioni create dagli sviluppatori, OpenAI fornisce un metodo di maggiore precisione per vincolare l'output del modello, ottenendo così un'affidabilità del 100%.

Decodifica dei vincoli

OpenAI utilizza una tecnica chiamata campionamento vincolato o decodifica vincolata. Per impostazione predefinita, il modello genera output completamente non vincolati, selezionando potenzialmente qualsiasi token dal vocabolario come output successivo.
Questa flessibilità può portare a errori, come l'inserimento casuale di caratteri non validi durante la generazione di JSON valido.
Per evitare tali errori, OpenAI utilizza un metodo di decodifica dei vincoli dinamici per garantire che il token di output generato sia sempre conforme allo schema fornito.
Per raggiungere questo obiettivo, OpenAI converte lo schema JSON fornito in una grammatica libera dal contesto (CFG).
Per ogni schema JSON, OpenAI calcola una sintassi che rappresenta lo schema e accede in modo efficiente ai componenti preelaborati durante il campionamento.
Questo approccio non solo rende l'output generato più accurato, ma riduce anche i ritardi inutili. La prima richiesta di un nuovo schema potrebbe richiedere un tempo di elaborazione aggiuntivo, ma alle richieste successive viene data risposta rapidamente tramite il meccanismo di memorizzazione nella cache.

Opzioni

Oltre al metodo CFG, altri metodi utilizzano solitamente macchine a stati finiti (FSM) o espressioni regolari per la decodifica dei vincoli.
Tuttavia, questi metodi hanno capacità limitate nell'aggiornamento dinamico dei token validi. Soprattutto per strutture dati nidificate o ricorsive complesse, la FSM è spesso difficile da gestire.
Il metodo CFG di OpenAI funziona bene quando si esprimono schemi complessi. Ad esempio, lo schema JSON che supporta gli schemi ricorsivi è implementato nell'API OpenAI ma non può essere espresso tramite metodi FSM.

Risparmia la metà del costo di input

L'output strutturato è disponibile per tutti i modelli che supportano le chiamate di funzione, inclusi gli ultimi modelli GPT-4o e GPT-4o-mini, nonché i modelli ottimizzati.
Questa funzionalità è disponibile sull'API Chat Completions, sull'API Assistants e sull'API Batch ed è compatibile con l'input visivo.
Rispetto alla versione gpt-4o-2024-05-13, la versione gpt-4o-2024-08-06 è anche più conveniente. Gli sviluppatori possono risparmiare il 50% dei costi sul lato input (token da $ 2,50/1 milione). , risparmiando il 33% del costo alla fine dell'output (token da $ 10,00/1 milione).

Come utilizzare l'output strutturato

Esistono due moduli che possono essere utilizzati per introdurre l'output strutturato nell'API:

chiamata di funzione

L'output strutturato tramite strumenti può essere ottenuto impostando strict: true nella definizione della funzione.
Questa funzionalità è disponibile su tutti i modelli con strumenti supportati, inclusi tutti i modelli gpt-4-0613 e gpt-3.5-turbo-0613 e versioni successive.
Quando l'output strutturato è abilitato, l'output del modello corrisponderà alla definizione dello strumento fornita.
Richiesta di esempio:
Esempio di output:
{
  "table_name": "orders",
  "columns": ["id", "status", "expected_delivery_date", "delivered_at"],
  "conditions": [
    {
      "column": "status",
      "operator": "=",
      "value": "fulfilled"
    },
    {
      "column": "ordered_at",
      "operator": ">=",
      "value": "2023-05-01"
    },
    {
      "column": "ordered_at",
      "operator": "<",
      "value": "2023-06-01"
    },
    {
      "column": "delivered_at",
      "operator": ">",
      "value": {
        "column_name": "expected_delivery_date"
      }
    }
  ],
  "order_by": "asc"
}

Nuove opzioni per il parametro Response_format

Gli sviluppatori possono ora scegliere se richiedere l'output formattato tramite la nuova opzione json_schema di Response_format.
Questa funzionalità è utile quando il modello non richiama strumenti, ma risponde all'utente in modo strutturato.
Questa funzionalità è disponibile per gli ultimi modelli GPT-4o: gpt-4o-2024-08-06 e gpt-4o-mini-2024-07-18 rilasciati oggi.
Quando Response_format è impostato su strict:true, l'output del modello corrisponderà allo schema fornito.
Richiesta di esempio:
Esempio di output:
{
  "steps": [
    {
      "explanation": "Subtract 31 from both sides to isolate the term with x.",
      "output": "8x + 31 - 31 = 2 - 31"
    },
    {
      "explanation": "This simplifies to 8x = -29.",
      "output": "8x = -29"
    },
    {
      "explanation": "Divide both sides by 8 to solve for x.",
      "output": "x = -29 / 8"
    }
  ],
  "final_answer": "x = -29 / 8"
}
Gli sviluppatori possono generare risposte passo dopo passo utilizzando l'output strutturato per guidare l'output desiderato.
Secondo OpenAI, gli sviluppatori non hanno bisogno di convalidare o riprovare risposte non corrette e la funzionalità consente prompt più semplici.

Supporto SDK nativo

OpenAI afferma che i loro SDK Python e Node sono stati aggiornati per supportare nativamente l'output strutturato.
Fornire uno schema o un formato di risposta a uno strumento è facile come fornire un oggetto Pydantic o Zod. L'SDK di OpenAI può convertire i tipi di dati in schemi JSON supportati, deserializzare automaticamente le risposte JSON in strutture di dati tipizzate e analizzare i rifiuti.
Inoltre, per Response_format è disponibile anche il supporto nativo dell'output strutturato.

Altri casi d'uso

Gli sviluppatori utilizzano spesso i modelli di OpenAI per generare dati strutturati per una varietà di casi d'uso.
Alcuni altri esempi includono:
-Genera dinamicamente l'interfaccia utente in base all'intento dell'utente
Gli sviluppatori possono utilizzare l'output strutturato per creare applicazioni di generazione di codice o interfaccia utente.
Utilizzando lo stesso Response_format, è possibile generare diverse UI in base all'input dell'utente.
Ad esempio, crea una "Interfaccia di accesso del giardiniere":
Viene generato con il seguente codice:
{
  "type": "div",
  "label": "",
  "children": [
    {
      "type": "header",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "Green Thumb Gardening",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-title" }]
        },
        {
          "type": "div",
          "label": "Bringing Life to Your Garden",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-tagline" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "header" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "About Us",
              "children": [
                {
                  "type": "div",
                  "label": "At Green Thumb Gardening, we specialize in transforming your outdoor spaces into beautiful, thriving gardens. Our team has decades of experience in horticulture and landscape design.",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "about-description" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "about-section" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "about-container" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "Our Services",
              "children": [
                {
                  "type": "div",
                  "label": "Garden Design",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Plant Care & Maintenance",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Seasonal Cleanup",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Custom Landscaping",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "services-list" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "services-container" }]
    }
  ],
  "attributes": [{ "name": "className", "value": "landing-page" }]
}
- Separare le risposte finali dalle argomentazioni di supporto o dai commenti aggiuntivi
Fornire al modello un campo separato per la catena di pensiero può migliorare la qualità finale della risposta.
chiedere:
Risultati strutturati:
{
  "reasoning_steps": [
    "First step is to compare the numbers 9.11 and 9.9.",
    "Both numbers have the same whole number part, which is 9.",
    "To compare the decimal parts, convert them to the same number of decimal places.",
    "9.11 has two decimal places: it is 9.11.",
    "9.9 has one decimal place: it can be rewritten as 9.90.",
    "Now, compare 9.11 and 9.90 by looking at the decimal parts.",
    "Compare 11 with 90.",
    "90 is greater than 11, so 9.90 is greater than 9.11."
  ],
  "answer": "9.9 is bigger than 9.11."
}
- Estrarre dati strutturati da dati non strutturati
Ad esempio, chiedi al modello di estrarre cose come cose da fare, scadenze e compiti dalle note della riunione.
chiedere:
Risultati strutturati:
{
  "action_items": [
    {
      "description": "Collaborate on optimizing the path planning algorithm",
      "due_date": "2024-06-30",
      "owner": "Jason Li"
    },
    {
      "description": "Reach out to industry partners for additional datasets",
      "due_date": "2024-06-25",
      "owner": "Aisha Patel"
    },
    {
      "description": "Explore alternative LIDAR sensor configurations and report findings",
      "due_date": "2024-06-27",
      "owner": "Kevin Nguyen"
    },
    {
      "description": "Schedule extended stress tests for the integrated navigation system",
      "due_date": "2024-06-28",
      "owner": "Emily Chen"
    },
    {
      "description": "Retest the system after bug fixes and update the team",
      "due_date": "2024-07-01",
      "owner": "David Park"
    }
  ]
}
Output strutturato sicuro
La sicurezza è una priorità assoluta per OpenAI: la nuova funzionalità di output strutturato aderirà alle politiche di sicurezza esistenti di OpenAI e consentirà comunque ai modelli di rifiutare richieste non sicure.
Per semplificare lo sviluppo, è disponibile un nuovo valore della stringa di rifiuto nelle risposte API che consente agli sviluppatori di rilevare a livello di codice se un modello genera rifiuti anziché output che corrispondono allo schema.
Quando la risposta non contiene un rifiuto e la risposta del modello non viene interrotta prematuramente (come indicato da finish_reason), la risposta del modello produrrà in modo affidabile un JSON valido che corrisponde allo schema fornito.
Riferimenti: