HumanEval è un benchmark per valutare le funzionalità di generazione di codice dei modelli linguistici di grandi dimensioni (LLM). È stato sviluppato da OpenAI per valutare le prime versioni dei modelli di AI che alimentavano Codex, l'agente di ingegneria del software dell'azienda.
Il benchmark HumanEval è progettato specificamente per il codice generato da Python. Va oltre la sintassi, convalidando che il codice creato sia accurato e funzioni come previsto.
Il framework del benchmark è accessibile sul repository GitHub di OpenAI HumanEval. HumanEval dispone anche di una classifica che valuta le prestazioni di diversi modelli di generazione di codice, tra cui la suite Claude , Kimi K2, Google Gemma e Gemini, GPT-5 e i più vecchi GPT-4o e GPT-4, oltre alla famiglia IBM Granite, tra gli altri.
Ricevi insight selezionati sulle notizie più importanti e interessanti sull'AI. Iscriviti alla nostra newsletter settimanale Think. Leggi l'Informativa sulla privacy IBM.
Il set di dati HumanEval è composto da 164 problemi di programmazione scritti a mano con i relativi test unitari.1 Questi problemi misurano la capacità di un modello di comprendere il linguaggio, manipolare stringhe, cercare e ordinare. Valutano anche le capacità di risoluzione dei problemi in termini di matematica semplice e algoritmi complessi. Queste attività di programmazione sono simili alle domande algoritmiche, agli esercizi di codifica o alle sfide di progettazione del sistema che gli sviluppatori di software affrontano durante i colloqui tecnici.
Ogni compito di generazione di codice contiene i seguenti componenti:
La firma definisce il nome e i parametri della funzione. Come esempio, ecco la firma di una funzione che calcola il prodotto di due numeri interi:
Una docstring è un prompt in linguaggio naturale o una descrizione del comportamento, degli obiettivi, degli input e degli output previsti della funzione. Questi commenti illustrano cosa fa una funzione, guidando il modello durante la generazione di codice Python.
Ad esempio, la docstring della funzione multiply sarà:
Questo è un segmento allocato al codice prodotto da un modello. Contiene la soluzione implementata al problema date la firma della funzione e la docstring.
Questi casi di test verificano la correttezza funzionale del codice generato in diversi scenari. Ogni test fornisce input specifici alla funzione e poi verifica gli output rispetto ai risultati desiderati.
Ecco alcuni test unitari di esempio per la funzione di moltiplicazione:
Molti benchmark di LLM per codice applicano metodologie utilizzate per la generazione di testo, come le metriche basate sulla corrispondenza che confrontano campioni di codice generati con una soluzione di riferimento. Tuttavia, le metriche basate sul match di solito non tengono conto dei vari modi in cui un problema può essere risolto, ognuno dei quali può essere funzionalmente equivalente alla soluzione di riferimento.
Ecco perché il benchmark HumanEval si è rivolto alla correttezza funzionale, che considera corretto un campione di codice generato se supera una suite di test unitari. Questo approccio rispecchia il modo in cui gli sviluppatori valutano il successo del loro codice eseguendolo attraverso una serie di test unitari e assicurandosi che superi ciascuno di essi.
HumanEval misura la correttezza funzionale utilizzando la metrica pass@k. Per ogni problema, un modello genera k campioni di codice. Se uno qualsiasi di questi campioni supera i test unitari, allora il problema viene considerato correttamente risolto. La metrica pass@k stima la probabilità che almeno uno dei k campioni sia funzionalmente corretto.
HumanEval è solo uno dei tanti benchmark per valutare gli LLM per il codice. I team di sviluppo software devono comunque valutare il codice generato dagli LLM utilizzando i propri test interni e combinare più metriche per una visione più completa delle prestazioni del modello. Un approccio human-in-the-loop rimane inoltre cruciale per garantire l'accuratezza del codice generato dall'AI e per mettere a punto e migliorare i modelli di machine learning nel tempo.
Ecco alcuni limiti del benchmark HumanEval:
I problemi di programmazione inclusi nel set di dati potrebbero essere stati riscontrati durante l'addestramento dei modelli a causa della loro ampia disponibilità. Il numero di problemi è anche abbastanza basso da permettere ai modelli di generazione del codice di memorizzarli tutti.
I compiti di generazione del codice all'interno di HumanEval rientrano tipicamente nella fascia facile o media. Tuttavia, i compiti di programmazione nel mondo reale tendono a essere più complessi e comprendono integrazioni API con molteplici sistemi, enormi basi di codice e grandi set di dati.
Il benchmark non riflette nemmeno lo stato spesso intricato degli ambienti e dei workflow di sviluppo software reali: casi d'uso in evoluzione, casi di test incompleti, requisiti incoerenti, codice legacy o specifiche vaghe, solo per citarne alcuni.
La programmazione non si limita alla sola correttezza funzionale. Ad esempio, HumanEval non tiene conto dell'efficienza. Ciò significa che il codice generato dagli LLM, pur essendo accurato e funzionante come previsto, potrebbe non rappresentare la soluzione più efficiente e ottimizzata in termini di prestazioni.
Inoltre, il benchmark non tiene conto delle best practice di programmazione, come le convenzioni di codifica, gli standard di stile, la gestione degli errori, la convalida degli input e la codifica sicura.
HumanEval è progettato specificamente per il linguaggio di programmazione open source Python. Il codice sorgente generato in altri linguaggi deve essere valutato utilizzando altri benchmark.
Il benchmark ha diverse versioni che affrontano alcune delle sue limitazioni:
HumanEval+
HumanEval-V
HumanEval-X
HumanEvalNext
Ogni problema di programmazione in HumanEval ha in media circa 7-8 test unitari.1 HumanEval+ aumenta significativamente la copertura dei test, portandola a una media di 764 test per problema, per una valutazione più rigorosa.2
HumanEval-V si basa sul suo predecessore per creare un benchmark per i modelli di AI multimodale, in particolare i modelli di linguaggio visivo (VLM). Misura la capacità dei VLM di comprendere e ragionare su grafici, diagrammi e tabelle in contesti di programmazione, generando codice basato su diagrammi di flusso di algoritmi o trasformazioni di matrici, ad esempio.
HumanEval-X estende il benchmark originale per includere i linguaggi di programmazione C++, Go, Java e JavaScript. Le sue 820 attività possono essere utilizzate per valutare le capacità di generazione e traduzione di codice.
HumanEvalNext migliora HumanEval. Aggiunge più contesto attraverso le annotazioni di tipo (sintassi di programmazione per indicare i tipi di dati dei parametri di funzione e i valori di ritorno), incorpora più edge, introduce più test unitari e aumenta la difficoltà dei problemi.3
Accelera la distribuzione del software con Bob, il tuo partner AI per uno sviluppo sicuro e consapevole degli intenti.
Ottimizza le attività di sviluppo del software con strumenti affidabili basati su AI che riducono al minimo il tempo dedicato alla scrittura, al debug, al refactoring o al completamento del codice, lasciando più spazio all'innovazione.
Reinventa i workflow e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.
1. Evaluating Large Language Models Trained on Code, arXiv, 14 luglio 2021
2. Is Your Code Generated by ChatGPT Really Correct? Rigorous Evaluation of Large Language Models for Code Generation, arXiv, 30 ottobre 2023
3. Benchmarking AI Models in Software Engineering: A Review, Search Tool, and Unified Approach for Elevating Benchmark Quality, arXiv, 12 dicembre 2025