Desenvolvedores trabalhando com várias telas

O que é HumanEval?

HumanEval definido

HumanEval é um benchmark para avaliar os recursos de geração de código de grandes modelos de linguagem (LLMs). Foi desenvolvido pela OpenAI para avaliar as primeiras versões dos modelos de IA que alimentam o Codex, o agente de engenharia de software da empresa.

O benchmark HumanEval foi projetado especificamente para código gerado em Python. Ela vai além da sintaxe, validando se o código criado é preciso e funciona conforme o esperado.

O framework do benchmark pode ser acessado no repositório do GitHub do OpenAI HumanEval. O HumanEval também conta com um ranking que classifica o desempenho de diferentes modelos de geração de código, incluindo o pacote Claude, Kimi K2, Google Gemma e Gemini, GPT-5 e os mais antigos GPT-4o e GPT-4, além da família IBM Granite, entre outros.

Estrutura do conjunto de dados

O conjunto de dados do HumanEval consiste em 164 problemas de programação escritos à mão com seus testes de unidade correspondentes.1 Esses problemas avaliam a capacidade de um modelo compreender linguagem, manipular strings, realizar buscas e classificar. Eles também avaliam habilidades de resolução de problemas em termos de matemática simples e algoritmos complexos. Essas tarefas de programação são semelhantes às perguntas algorítmicas, exercícios de programação ou desafios de design de sistemas que os desenvolvedores de software enfrentam durante as entrevistas técnicas.

Cada tarefa de geração de código contém os seguintes componentes:

  • Assinatura da função

  • Docstring

  • Corpo da função

  • Testes de unidade

Assinatura da função

A assinatura define o nome e os parâmetros da função. Como exemplo, aqui está a assinatura de uma função que calcula o produto de dois números inteiros:            

def multiply(a, b):

Docstring

Uma docstring é um prompt em linguagem natural ou uma descrição do comportamento esperado, objetivos, entradas e saídas da função. Esses comentários descrevem o que uma função faz, orientando o modelo ao gerar código Python.

Por exemplo, a docstring da função de multiplicação será:

“””Complete the function that takes two integers as inputs
and returns their product as the output.
Assume the inputs are always valid.
Examples:
multiply(8, 2) must return 16
multiply(0, 777) must return 0
multiply(-32,64) must return -2048
“””

Corpo funcional

Esse é um segmento alocado ao código que um modelo produz. Ela contém a solução implementada para o problema, dada a assinatura da função e a docstring.

Testes de unidade

Esses casos de teste verificam a correção funcional do código gerado em diferentes cenários. Cada teste alimenta entradas específicas para a função e, em seguida, verifica as saídas em relação aos resultados pretendidos.

Veja a seguir alguns exemplos de testes de unidade para a função de multiplicação:

def test_multiply():
    assert multiply(89, 0) == 0
    assert multiply(37, -5) == -185
    assert multiply(66, 17) == 1122

Métrica de avaliação

Muitos benchmarks de LLM de código aplicam metodologias usadas para geração de texto, como métricas baseadas em correspondências, que comparam amostras de código geradas a uma solução de referência. Mas as métricas baseadas em correspondências geralmente não levam em consideração as várias maneiras de resolver um problema, qualquer uma das quais pode ser funcionalmente equivalente à solução de referência.

É por isso que o benchmark HumanEval recorreu à correção funcional, que considera uma amostra de código gerada correta se ela passar em um pacote de testes de unidade. Essa abordagem reflete como os desenvolvedores avaliam o sucesso de seu código, executando-o por meio de uma série de testes de unidade e garantindo que ele seja aprovado em todos eles.

O HumanEval mede a correção funcional usando a métrica pass@k. Para cada problema, um modelo gera k amostras de código. Se alguma dessas amostras passar nos testes de unidade, o problema será considerado corretamente resolvido. A métrica pass@k estima a probabilidade de que pelo menos uma das k amostras esteja funcionalmente correta.

AI Academy

A ascensão da IA generativa para negócios

Saiba mais sobre a ascensão histórica da IA generativa e o que isso significa para os negócios.

Limitações do HumanEval

O HumanEval é apenas um dos muitos benchmarks para avaliar LLMs de código. As equipes de desenvolvimento de software ainda devem avaliar o código gerado pelo LLM usando seus próprios testes internos e combinar várias métricas para uma visão mais abrangente do desempenho do modelo. Uma abordagem human-in-the-loop também continua sendo crucial para garantir a precisão do código gerado por IA e para ajuste fino e melhorar os modelos de aprendizado de máquina ao longo do tempo.

Aqui estão algumas limitações do benchmark HumanEval:

  • Contaminação

  • Falta de complexidade do mundo real

  • Métrica restrita dos recursos de programação

  • Suporte restrito a linguagens de programação

Contaminação

Problemas de programação incluídos no conjunto de dados podem ter sido encontrados durante o treinamento do modelo devido à sua ampla disponibilidade. O número de problemas também é pequeno o suficiente para que os modelos de geração de código talvez consigam memorizar todos eles.

Falta de complexidade do mundo real

As tarefas de geração de código no HumanEval geralmente se enquadram na faixa fácil a média. No entanto, as tarefas de programação do mundo real tendem a ser mais complexas, abrangendo integrações de APIs com vários sistemas, enormes bases de código e grandes conjuntos de dados.

O benchmark também não reflete o estado frequentemente complexo dos ambientes e fluxos de trabalho de desenvolvimento de software no mundo real: casos de uso em constante evolução, casos de teste incompletos, requisitos inconsistentes, código legado ou especificações vagas, para citar alguns exemplos.

Métrica restrita dos recursos de programação

A programação vai além da correção funcional. Por exemplo, o HumanEval não leva em conta a eficiência. Isso significa que o código gerado por LLM que é preciso e funciona como esperado pode não ser a solução mais eficiente e otimizada em termos de desempenho.

O benchmark também não leva em consideração as melhores práticas de programação, como convenções de programação, padrões de estilo, tratamento de erros, validação de entradas e programação segura.

Suporte restrito a linguagens de programação

O HumanEval é adaptado especificamente para a linguagem de programação Python de código aberto. O código-fonte gerado em outras linguagens deve ser avaliado usando outros benchmarks.

Variações do HumanEval

O benchmark possui algumas versões diferentes que lidam com algumas de suas limitações:

  • HumanEval+
     

  • HumanEval-V
     

  • HumanEval-X
     

  • HumanEvalNext

HumanEval+

Cada problema de programação no HumanEval tem uma média de cerca de sete a oito testes de unidade.1 O HumanEval+ aumenta significativamente essa cobertura de testes para uma média de 764 testes por problema, para uma avaliação mais rigorosa.2

HumanEval-V

O HumanEval-V baseia-se em seu antecessor para criar um benchmark para modelos de IA multimodais, especificamente modelos de linguagem de visão (VLMs). Ela avalia a capacidade dos VLMs de entender e raciocinar sobre tabelas, diagramas e gráficos em contextos de programação, gerando código com base em fluxogramas de algoritmos ou transformações de matrizes, por exemplo.

HumanEval-X

O HumanEval-X amplia o benchmark original para incluir as linguagens de programação C++, Go, Java e JavaScript. Suas 820 tarefas podem ser usadas para avaliar habilidades de geração e tradução de código.

HumanEvalNext

O HumanEvalNext é melhor em relação ao HumanEval. Acrescenta mais contexto por meio de anotações de tipo (sintaxe de programação para indicar os tipos de dados dos parâmetros de função e valores de retorno), incorpora mais casos extremos, introduz mais testes de unidade e aumenta a dificuldade dos problemas.3

Autores

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Soluções relacionadas
IBM Bob

Acelere a entrega de software com o Bob, seu parceiro de IA para desenvolvimento seguro e com reconhecimento de intenção.

Explore o IBM Bob
Soluções de programação de IA

Otimize os esforços de desenvolvimento de software com ferramentas confiáveis orientadas por IA que minimizem o tempo investido em programação, depuração, refatoração ou conclusão de código e abra mais espaço para a inovação.

Explore as soluções de programação de IA
Consultoria e serviços de IA

Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.

Explore os serviços de consultoria em IA
Dê o próximo passo

Utilize IA generativa e automação avançada para criar códigos prontos para empresas de forma mais rápida. O Bob modela para aumentar os conjuntos de habilidades do desenvolvedor, simplificando e automatizando seus esforços de desenvolvimento e modernização.

  1. Descubra o IBM Bob
  2. Explore as soluções de programação de IA