Esta é a implementação oficial do gráfico de pensamentos: resolvendo problemas elaborados com grandes modelos de idiomas.
Essa estrutura oferece a capacidade de resolver problemas complexos, modelando -os como um gráfico de operações (GOO), que é executado automaticamente com um grande modelo de idioma (LLM) como mecanismo.
Essa estrutura foi projetada para ser flexível e extensível, permitindo que você não apenas resolva problemas usando a nova abordagem GOT, mas também para implementar canecas semelhantes a abordagens anteriores como COT ou TOT.
Para usar essa estrutura, você precisa ter uma instalação funcional do Python 3.8 ou mais recente.
Antes de executar um dos dois métodos de instalação a seguir, ative seu ambiente Python (se houver) com antecedência.
Se você é um usuário e só deseja usar graph_of_thoughts , pode instalá -lo diretamente do Pypi:
pip install graph_of_thoughtsSe você é um desenvolvedor e deseja modificar o código, pode instalá -lo no modo editável da fonte:
git clone https://github.com/spcl/graph-of-thoughts.git
cd graph-of-thoughts
pip install -e .Para usar a estrutura, você precisa ter acesso a um LLM. Siga as instruções no controlador Readme para configurar o LLM de sua escolha.
O snippet de código a seguir mostra como usar a estrutura para resolver o problema de classificação para uma lista de 32 números usando uma abordagem semelhante a um berço.
Verifique se você seguiu o guia de configuração antes de executar o 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 executar a abordagem mais sofisticada, você pode usar o seguinte snippet 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" ) Você pode comparar os dois resultados inspecionando os gráficos de saída output_cot.json e output_got.json .
As pontuações dos Estados do pensamento final indicam o número de erros na lista classificada.
O artigo fornece uma visão geral de alto nível da estrutura e de seus componentes.
Para entender a estrutura com mais detalhes, você pode ler a documentação dos módulos individuais.
Especialmente os módulos de controlador e operações são importantes para entender como tirar o máximo proveito da estrutura.
Tomamos um cuidado extra para documentar completamente o código, para que você possa entender facilmente como ele funciona e como estendê -lo.
O diretório de exemplos contém vários exemplos de problemas que podem ser resolvidos usando a estrutura, incluindo os apresentados no artigo.
É um ótimo ponto de partida para aprender a usar a estrutura para resolver problemas reais.
Cada exemplo contém um arquivo README.md com instruções sobre como executá -lo e brincar com ele. O código está totalmente documentado e deve ser fácil de seguir. Você também pode executar os exemplos diretamente do diretório principal. Observe que os resultados serão armazenados nos respectivos exemplos subdiretórios.
Tente, por exemplo:
python -m examples.sorting.sorting_032
python -m examples.keyword_counting.keyword_counting Você pode executar os experimentos do artigo seguindo as instruções no diretório de exemplos.
No entanto, se você deseja apenas inspecionar e replicar os resultados, poderá usar o diretório de papel.
Se você achar esse repositório valioso, dê uma estrela!
Tem alguma dúvida ou feedback? Sinta -se à vontade para entrar em contato com [email protected] ou abrir um problema.
Usando isso em seu trabalho? Por favor, faça referência a nós usando a citação fornecida:
@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 }
}