Un mini-travail pour évaluer les performances LLM sur le jeu de devinettes du nombre Bulls and Vows, en soutenant plusieurs fournisseurs via Litellm.
Note
TLDR: Bulls and Cows est un jeu révolutionnaire pour deux joueurs. Un joueur écrit un numéro secret à 4 chiffres. Les chiffres doivent être différents (par exemple, 1234 ). Ensuite, un autre joueur (un LLM dans ce cas) essaie de deviner le nombre secret (par exemple, 1246 ). Pour chaque supposition, les informations du nombre de matchs sont renvoyées. Si les chiffres correspondants sont dans leurs bonnes positions, ce sont des "taureaux" (deux taureaux dans cet exemple: 1 et 2 ), si dans des positions différentes, ce sont des "vaches" (une vache, 4 ). La bonne solution nécessite du raisonnement pour penser à la prochaine bonne mémoire de supposition et de contexte pour apprendre des réponses passées. Il est prouvé que tout numéro secret à 4 chiffres peut être résolu à sept tours.


| Modèle | Jeux | Taux de réussite | AVG tourne (succès uniquement) | Échecs de format (tour) |
|---|---|---|---|---|
| OpenAI / O1-MINI-2024-09-12 | 25 | 60,0% [40,7%; 76,6%] | 9.1 ± 2,7 | 23,1% |
| OpenRouter / Anthropic / Claude-3.5-Sonnet | 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-Istruct | 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% |
| anthropic / claude-3-5-haiku-20241022 | 50 | 0,0% [0,0%; 7,1%] | 0,0 ± 0,0 | 0,9% |
Important
Pour la plupart des courses, 50 matchs ont été joués (excl. O1-MinI), les intervalles de confiance sont donc larges. Si vous souhaitez dépenser 100-200 $ en crédits API sur les tests pour obtenir des résultats plus précis et rendre CIS plus étroit, n'hésitez pas à me joindre ou à ouvrir un RP avec vos résultats.
GUESS: 1234 (défini dans le fichier des invites).strip() a été ajoutée pour résoudre ce problème).o1-mini , oublie souvent les règles de mise en forme et essaie d'ajouter un accent audacieux à la réponse. Ce comportement a été jugé inacceptable et compté comme une erreur et un virage gaspillé, car l'instruction spécifie explicitement le formatage requis.o1-mini ).3 chiffres (version de débogage: moins de virages, raisonnement plus court):
openai/gpt-4o-mini-2024-07-18 : 283K Cached + 221k non acheté + 68k Sortie = 0,1 $ ( recommandé pour le débogage )
openai/gpt-4o-2024-08-06 : 174k mis en cache + 241k non compensé + 56k Sortie = 1,38 $
openai/gpt-4-turbo-2024-04-09 : inconnu = 6,65 $
openai/o1-mini-2024-09-12 : 0k mis en cache + 335k non compensé + 1345k sortie = 17,15 $
anthropic/claude-3-haiku-20240307 : Entrée 492k + Sortie 46K = 0,18 $
4 chiffres (version principale):
openai/gpt-4o-mini-2024-07-18 : 451k mis en cache + 429k non acheté + 100k sortie = 0,15 $
openai/gpt-4o-2024-08-06 : 553k mis en cache + 287K non achetée + 87K = 2,29 $
(25 matchs) openai/o1-mini-2024-09-12 : 0k Cached + 584K non acheté + Sortie 1815K = 23,54 $
anthropic/claude-3-5-haiku-20241022 : entrée 969k + sortie 90k = 1,42 $
openrouter/anthropic/claude-3.5-sonnet (nouveau): inconnu = 5,2 $
Ce cadre a vu le jour grâce à un commentaire curieux d'un abonné de ma chaîne télégramme. Ils ont affirmé avoir testé divers LLM dans un jeu de taureaux et de vaches, concluant qu'aucun ne pouvait le résoudre et, par conséquent, les LLM ne peuvent pas raisonner. Intrigué, j'ai demandé des exemples de ces soi-disant «échecs», seulement pour être dit que les discussions ont été supprimées. Pratique. Plus tard, ils ont mentionné Tring O1-Preview, qui l'a apparemment résolu - dans environ 20 mouvements, loin des 7 mouvements jugés optimaux.
Pendant ce temps, je cherchais une excuse pour expérimenter avec OpenHands, et quelle meilleure façon que de défier Copilot pour faire tourner une référence LLM à partir de zéro? Après trois soirées d'efforts sans enthousiasme (je jouais simultanément Stalker 2), cette référence est née - un produit de parts égales et le désir de prouver un point que personne ne demandait. Apprécier!
pip install -r requirements.txt
pre-commit install(Facultatif) Pour comprendre la logique, lisez toutes les invites ici.
Configurez les touches API de votre fournisseur LLM comme variables d'environnement (soit Direclty dans votre terminal ou en utilisant le fichier .env). Je recommande d'utiliser des clés Openai ou anthropiques et OpenRouter pour autre chose.
Ajustez config/default_config.yaml avec le modèle et les paramètres de jeu souhaités. Utilisez run_id pour stocker différentes analyses dans des dossiers séparés - sinon les dossiers de résultats seront nommés avec des horodatages. Les principaux champs sont: model , target_length (combien de chiffres dans le numéro secret), num_concurrent_games (pour contourner les limites de l'API TPS risibles. EG, pour le niveau 2 anthropique, je ne recommande pas de définir cette valeur supérieure à 2 , tandis qu'Openai pourrait facilement prendre en charge 8 à 10 jeux simultanés).
Exécutez le benchmark et visualisez les résultats de toutes les courses:
python run_benchmark.py
python scripts/visualize_results.pyLes résultats seront disponibles en HTML (avec des parcelles supplémentaires) et en marquant.
La référence évalue les LLM sur trois aspects clés:
Les résultats sont enregistrés avec des histoires de jeu complètes (y compris les journaux de conversation, par exemple, ici) et des configurations pour une analyse détaillée.
Le projet utilise Black (longueur de ligne: 100) et ISORT pour le formatage du code. Les crochets de pré-engagement garantissent la qualité du code en vérifiant:
Exécutez les vérifications manuelles avec:
pre-commit run --all-filesExécutez des tests (oui, il y a des tests sur la logique du jeu, répondez à l'analyse et à la validation):
python -m pytest . -v