Esta es la implementación oficial del gráfico de pensamientos: resolver problemas elaborados con modelos de idiomas grandes.
Este marco le brinda la capacidad de resolver problemas complejos modelándolos como un gráfico de operaciones (GOO), que se ejecuta automáticamente con un modelo de lenguaje grande (LLM) como motor.
Este marco está diseñado para ser flexible y extensible, lo que le permite no solo resolver problemas utilizando el nuevo enfoque Got, sino también para implementar Goos que se asemejan a enfoques anteriores como Cot o Tot.
Para usar este marco, debe tener una instalación en funcionamiento de Python 3.8 o más nuevo.
Antes de ejecutar cualquiera de los siguientes dos métodos de instalación, asegúrese de activar su entorno Python (si los hay) de antemano.
Si es un usuario y solo desea usar graph_of_thoughts , puede instalarlo directamente desde Pypi:
pip install graph_of_thoughtsSi es un desarrollador y desea modificar el código, puede instalarlo en modo editable desde la fuente:
git clone https://github.com/spcl/graph-of-thoughts.git
cd graph-of-thoughts
pip install -e .Para usar el marco, debe tener acceso a un LLM. Siga las instrucciones en el ReadMe del controlador para configurar el LLM de su elección.
El siguiente fragmento de código muestra cómo usar el marco para resolver el problema de clasificación para una lista de 32 números utilizando un enfoque similar a una cuna.
Asegúrese de haber seguido la guía de configuración antes de ejecutar el código.
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" )Para ejecutar el enfoque Get más sofisticado, puede usar el siguiente fragmento de código.
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" ) Puede comparar los dos resultados inspeccionando los gráficos de salida output_cot.json y output_got.json .
Los puntajes finales del pensamiento indican el número de errores en la lista ordenada.
El documento ofrece una descripción general de alto nivel del marco y sus componentes.
Para comprender el marco con más detalle, puede leer la documentación de los módulos individuales.
Especialmente los módulos de controlador y operaciones son importantes para comprender cómo aprovechar al máximo el marco.
Tomamos más cuidado para documentar completamente el código, para que pueda comprender fácilmente cómo funciona y cómo extenderlo.
El directorio de ejemplos contiene varios ejemplos de problemas que se pueden resolver utilizando el marco, incluidos los presentados en el documento.
Es un excelente punto de partida para aprender a usar el marco para resolver problemas reales.
Cada ejemplo contiene un archivo README.md con instrucciones sobre cómo ejecutarlo y jugar con él. El código está completamente documentado y debería ser fácil de seguir. También puede ejecutar los ejemplos directamente desde el directorio principal. Tenga en cuenta que los resultados se almacenarán en el subdirectorio de ejemplos respectivos.
Prueba por ejemplo:
python -m examples.sorting.sorting_032
python -m examples.keyword_counting.keyword_counting Puede ejecutar los experimentos desde el documento siguiendo las instrucciones en el directorio de ejemplos.
Sin embargo, si solo desea inspeccionar y reemplazar los resultados, puede usar el directorio de papel.
Si encuentra este repositorio valioso, ¡dale una estrella!
¿Tienes alguna pregunta o retroalimentación? No dude en comunicarse con [email protected] o abrir un problema.
¿Usando esto en su trabajo? Consulte el consulta utilizando la cita proporcionada:
@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 }
}