Um mini-quadro trabalha para avaliar o desempenho do LLM no jogo de adivinhação do número de touros e vacas, apoiando vários fornecedores através da Litellm.
Observação
TLDR: Bulls e vacas é um jogo de quebra de código para dois jogadores. Um jogador escreve um número secreto de 4 dígitos. Os dígitos devem ser todos diferentes (por exemplo, 1234 ). Então outro jogador (um LLM neste caso) tenta adivinhar o número secreto (por exemplo, 1246 ). Para cada palpite, a informação do número de correspondências é retornada. Se os dígitos correspondentes estiverem em suas posições certas, elas são "touros" (dois touros neste exemplo: 1 e 2 ), se em posições diferentes, são "vacas" (uma vaca, 4 ). A solução correta requer raciocínio para pensar no próximo bom palpite-e na memória do contexto para aprender com as respostas anteriores. Está provado que qualquer número secreto de 4 dígitos pode ser resolvido em sete voltas.


| Modelo | Jogos | Taxa de sucesso | AVG Turns (apenas sucesso) | Falhas de formato (turnos) |
|---|---|---|---|---|
| OpenAI/O1-MINI-2024-09-12 | 25 | 60,0% [40,7%; 76,6%] | 9,1 ± 2,7 | 23,1% |
| OpenRouter/Antrópico/Claude-3.5 SONET | 50 | 36,0% [24,1%; 49,9%] | 9,8 ± 4,0 | 0,0% |
| OpenAI/GPT-4O-2024-08-06 | 50 | 30,0% [19,1%; 43,8%] | 9,5 ± 3,6 | 0,0% |
| OpenAI/GPT-4O-MINI-2024-07-18 | 50 | 26,0% [15,9%; 39,6%] | 10,0 ± 3,1 | 0,1% |
| OpenRouter/Deepseek/Deepseek-Chat | 50 | 18,0% [9,8%; 30,8%] | 11,6 ± 3,6 | 3,3% |
| OpenRouter/Meta-llama/llama-3.1-405b-Instruct | 50 | 8,0% [3,2%; 18,8%] | 9,5 ± 3,3 | 3,0% |
| OpenRouter/Google/Gemini-Pro-1.5 | 50 | 8,0% [3,2%; 18,8%] | 8,0 ± 4,1 | 0,1% |
| OpenRouter/Google/Gemini-Flash-1.5 | 50 | 2,0% [0,4%; 10,5%] | 8,0 ± 0,0 | 0,9% |
| Antrópico/Claude-3-5-Haiku-20241022 | 50 | 0,0% [0,0%; 7,1%] | 0,0 ± 0,0 | 0,9% |
Importante
Para a maioria das corridas, 50 jogos foram disputados (excl. O1-mini); portanto, os intervalos de confiança são amplos. Se você deseja gastar US $ 100-200 em créditos da API em testes para obter resultados mais precisos e tornar o CIS mais estreito, sinta-se à vontade para entrar em contato comigo ou abrir um PR com seus resultados.
GUESS: 1234 (definido no arquivo de prompts).strip() foi adicionado para abordar isso).o1-mini , muitas vezes esquece as regras de formatação e tenta acrescentar ênfase ousada à resposta. Esse comportamento foi considerado inaceitável e contado como um erro e uma curva desperdiçada, pois a instrução especifica explicitamente a formatação necessária.o1-mini ).3 dígitos (versão de depuração: menos turnos, raciocínio mais curto):
openai/gpt-4o-mini-2024-07-18 : 283K em cache + 221k Uncached + 68k Output = $ 0,1 ( recomendado para depuração )
openai/gpt-4o-2024-08-06 : 174K em cache + 241k Uncached + 56k Output = $ 1,38
openai/gpt-4-turbo-2024-04-09 : desconhecido = $ 6,65
openai/o1-mini-2024-09-12 : 0K em cache + 335k Uncached + 1345k Output = $ 17,15
anthropic/claude-3-haiku-20240307 : 492K Entrada + 46k Output = $ 0,18
4 dígitos (versão principal):
openai/gpt-4o-mini-2024-07-18 : 451K em cache + 429k Uncached + 100k Output = $ 0,15
openai/gpt-4o-2024-08-06 : 553K em cache + 287k Uncached + 87k = $ 2,29
(25 jogos) openai/o1-mini-2024-09-12 : 0K em cache + 584k Uncached + 1815k Output = $ 23,54
anthropic/claude-3-5-haiku-20241022 : 969K Entrada + 90K Output = $ 1,42
openrouter/anthropic/claude-3.5-sonnet (NOVO): desconhecido = $ 5.2
Essa estrutura surgiu graças a um comentário curioso de um assinante do meu canal Telegram. Eles alegaram ter testado vários LLMs em um jogo de touros e vacas, concluindo que ninguém poderia resolvê -lo e, portanto, os LLMs não podem raciocinar. Intrigado, pedi exemplos desses chamados "falhas", apenas para saber que os bate-papos foram excluídos. Conveniente. Mais tarde, eles mencionaram a tentativa de O1-Preview, que aparentemente o resolveu-em cerca de 20 movimentos, longe dos 7 movimentos considerados ideais.
Enquanto isso, eu estava procurando uma desculpa para experimentar o OpenHands e que maneira melhor do que desafiar a Copilot a aumentar uma referência LLM do zero? Após três noites de esforço tímido (eu estava tocando Stalker 2 simultaneamente), esse benchmark nasceu-um produto de partes iguais de apatia e o desejo de provar um ponto que ninguém pediu. Aproveitar!
pip install -r requirements.txt
pre-commit install(Opcional) Para entender a lógica, leia todos os avisos aqui.
Configure as teclas da API do seu provedor LLM como variáveis de ambiente (ou diretor no seu terminal ou usando o arquivo .env). Eu recomendo o uso de teclas OpenAI ou Antrópico e OpenRouter para qualquer outra coisa.
Ajuste config/default_config.yaml com as configurações desejadas do modelo e do jogo. Use run_id para armazenar diferentes execuções em pastas separadas - caso contrário, as pastas de resultados serão nomeadas com registro de data e hora. Os campos principais são: model , target_length (quantos dígitos no número secreto), num_concurrent_games (para contornar os limites da API risível do TPS. Por exemplo, para o Nível Antrópico 2, não recomendo definir este valor acima de 2 , enquanto o OpenAI pode suportar facilmente 8 - 10 jogos concorrentes).
Execute a referência e visualize os resultados de todas as execuções:
python run_benchmark.py
python scripts/visualize_results.pyOs resultados estarão disponíveis no HTML (com gráficos adicionais) e Markdown.
O benchmark avalia o LLMS em três aspectos principais:
Os resultados são salvos com históricos completos de jogos (incluindo registros de conversação, por exemplo, aqui) e configurações para análises detalhadas.
O projeto usa preto (comprimento da linha: 100) e isort para formatação de código. Os ganchos de pré-compromisso garantem a qualidade do código, verificando:
Execute verificações manuais com:
pre-commit run --all-filesExecutar testes (sim, existem testes na lógica do jogo, resposta de resposta e validação):
python -m pytest . -v