Il s'agit de la mise en œuvre officielle du graphique des pensées: résoudre des problèmes élaborés avec des modèles de gros langues.
Ce cadre vous donne la possibilité de résoudre des problèmes complexes en les modélisant en tant que graphique d'opérations (GOO), qui est automatiquement exécuté avec un modèle grand langage (LLM) comme moteur.
Ce cadre est conçu pour être flexible et extensible, vous permettant non seulement de résoudre des problèmes en utilisant la nouvelle approche GOT, mais aussi pour implémenter des goos ressemblant à des approches précédentes comme le COT ou le TOT.
Pour utiliser ce cadre, vous devez avoir une installation de travail de Python 3.8 ou plus récent.
Avant d'exécuter l'une des deux méthodes d'installation suivantes, assurez-vous d'activer votre environnement Python (le cas échéant).
Si vous êtes un utilisateur et que vous souhaitez simplement utiliser graph_of_thoughts , vous pouvez l'installer directement à partir de PYPI:
pip install graph_of_thoughtsSi vous êtes un développeur et que vous souhaitez modifier le code, vous pouvez l'installer en mode modifiable à partir de la source:
git clone https://github.com/spcl/graph-of-thoughts.git
cd graph-of-thoughts
pip install -e .Pour utiliser le cadre, vous devez avoir accès à un LLM. Veuillez suivre les instructions de la lecture du contrôleur pour configurer le LLM de votre choix.
L'extrait de code suivant montre comment utiliser le cadre pour résoudre le problème de tri pour une liste de 32 nombres à l'aide d'une approche de type COT.
Assurez-vous que vous avez suivi le guide de configuration avant d'exécuter le code.
from examples . sorting . sorting_032 import SortingPrompter , SortingParser , utils
from graph_of_thoughts import controller , language_models , operations
# Problem input
to_be_sorted = "[0, 2, 6, 3, 8, 7, 1, 1, 6, 7, 7, 7, 7, 9, 3, 0, 1, 7, 9, 1, 3, 5, 1, 3, 6, 4, 5, 4, 7, 3, 5, 7]"
# Create the Graph of Operations
gop = operations . GraphOfOperations ()
gop . append_operation ( operations . Generate ())
gop . append_operation ( operations . Score ( scoring_function = utils . num_errors ))
gop . append_operation ( operations . GroundTruth ( utils . test_sorting ))
# Configure the Language Model (Assumes config.json is in the current directory with OpenAI API key)
lm = language_models . ChatGPT ( "config.json" , model_name = "chatgpt" )
# Create the Controller
ctrl = controller . Controller (
lm ,
gop ,
SortingPrompter (),
SortingParser (),
# The following dictionary is used to configure the initial thought state
{
"original" : to_be_sorted ,
"current" : "" ,
"method" : "cot"
}
)
# Run the Controller and generate the output graph
ctrl . run ()
ctrl . output_graph ( "output_cot.json" )Pour exécuter l'approche GOT plus sophistiquée, vous pouvez utiliser l'extrait de code suivant.
from examples . sorting . sorting_032 import SortingPrompter , SortingParser , got , utils
from graph_of_thoughts import controller , language_models , operations
# Problem input
to_be_sorted = "[0, 2, 6, 3, 8, 7, 1, 1, 6, 7, 7, 7, 7, 9, 3, 0, 1, 7, 9, 1, 3, 5, 1, 3, 6, 4, 5, 4, 7, 3, 5, 7]"
# Retrieve the Graph of Operations
gop = got ()
# Configure the Language Model (Assumes config.json is in the current directory with OpenAI API key)
lm = language_models . ChatGPT ( "config.json" , model_name = "chatgpt" )
# Create the Controller
ctrl = controller . Controller (
lm ,
gop ,
SortingPrompter (),
SortingParser (),
# The following dictionary is used to configure the initial thought state
{
"original" : to_be_sorted ,
"current" : "" ,
"phase" : 0 ,
"method" : "got"
}
)
# Run the Controller and generate the output graph
ctrl . run ()
ctrl . output_graph ( "output_got.json" ) Vous pouvez comparer les deux résultats en inspectant les graphiques de sortie output_cot.json et output_got.json .
Les scores des états de pensée finale indiquent le nombre d'erreurs dans la liste triée.
Le document donne un aperçu de haut niveau du cadre et de ses composants.
Afin de comprendre le cadre plus en détail, vous pouvez lire la documentation des modules individuels.
En particulier, les modules du contrôleur et des opérations sont importants pour comprendre comment tirer le meilleur parti du cadre.
Nous avons pris des soins supplémentaires pour documenter pleinement le code, afin que vous puissiez facilement comprendre comment cela fonctionne et comment l'étendre.
Le répertoire des exemples contient plusieurs exemples de problèmes qui peuvent être résolus à l'aide du cadre, y compris ceux présentés dans l'article.
C'est un excellent point de départ pour apprendre à utiliser le cadre pour résoudre de vrais problèmes.
Chaque exemple contient un fichier README.md avec des instructions sur la façon de l'exécuter et de jouer avec. Le code est entièrement documenté et doit être facile à suivre. Vous pouvez également exécuter les exemples directement à partir du répertoire principal. Notez que les résultats seront stockés dans le sous-répertoire des exemples respectifs.
Essayez par exemple:
python -m examples.sorting.sorting_032
python -m examples.keyword_counting.keyword_counting Vous pouvez exécuter les expériences du papier en suivant les instructions du répertoire des exemples.
Cependant, si vous souhaitez simplement inspecter et remplacer les résultats, vous pouvez utiliser le répertoire papier.
Si vous trouvez ce référentiel précieux, veuillez lui donner une étoile!
Vous avez des questions ou des commentaires? N'hésitez pas à contacter [email protected] ou à ouvrir un problème.
Vous utilisez cela dans votre travail? Veuillez nous référencer en utilisant la citation fournie:
@article { besta2024got ,
title = { {Graph of Thoughts: Solving Elaborate Problems with Large Language Models} } ,
author = { Besta, Maciej and Blach, Nils and Kubicek, Ales and Gerstenberger, Robert and Gianinazzi, Lukas and Gajda, Joanna and Lehmann, Tomasz and Podstawski, Micha{l} and Niewiadomski, Hubert and Nyczyk, Piotr and Hoefler, Torsten } ,
year = 2024 ,
month = { Mar } ,
journal = { Proceedings of the AAAI Conference on Artificial Intelligence } ,
volume = 38 ,
number = 16 ,
pages = { 17682-17690 } ,
publisher = { AAAI Press } ,
doi = { 10.1609/aaai.v38i16.29720 } ,
url = { https://ojs.aaai.org/index.php/AAAI/article/view/29720 }
}