思维图谱 (GoT)
这是《思维图谱:用大型语言模型解决复杂问题》的官方实现。
该框架使您能够通过将问题建模为操作图(GoO)来解决复杂问题,并使用大型语言模型(LLM)作为引擎自动执行。
该框架设计灵活且可扩展,使您不仅可以使用新的GoT方法解决问题,还可以实现类似CoT或ToT的GoO。
安装指南
为了使用该框架,您需要安装Python 3.8或更新版本。
安装GoT
在运行以下任一安装方法之前,请确保事先激活您的Python环境(如果有)。
如果您是用户,只想使用graph_of_thoughts
,可以从PyPI直接安装:
pip install graph_of_thoughts
如果您是开发者并希望修改代码,您可以从源代码以可编辑模式安装:
git clone https://github.com/spcl/graph-of-thoughts.git
cd graph-of-thoughts
pip install -e .
配置LLM
为了使用该框架,您需要有访问LLM的权限。 请按照Controler README中的说明配置您选择的LLM。
快速开始
以下代码片段展示了如何使用该框架通过类似CoT的方法解决一个包含32个数字的排序问题。
在运行代码之前,请确保您已按照安装指南执行。
from examples.sorting.sorting_032 import SortingPrompter, SortingParser, utils
from graph_of_thoughts import controller, language_models, operations
# 问题输入
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]"
# 创建操作图
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))
# 配置LLM(假设config.json在当前目录中,包含OpenAI API密钥)
lm = language_models.ChatGPT("config.json", model_name="chatgpt")
# 创建控制器
ctrl = controller.Controller(
lm,
gop,
SortingPrompter(),
SortingParser(),
# 以下字典用于配置初始思维状态
{
"original": to_be_sorted,
"current": "",
"method": "cot"
}
)
# 运行控制器并生成输出图
ctrl.run()
ctrl.output_graph("output_cot.json")
要运行更复杂的GoT方法,您可以使用以下代码片段。
from examples.sorting.sorting_032 import SortingPrompter, SortingParser, got, utils
from graph_of_thoughts import controller, language_models, operations
# 问题输入
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]"
# 获取操作图
gop = got()
# 配置LLM(假设config.json在当前目录中,包含OpenAI API密钥)
lm = language_models.ChatGPT("config.json", model_name="chatgpt")
# 创建控制器
ctrl = controller.Controller(
lm,
gop,
SortingPrompter(),
SortingParser(),
# 以下字典用于配置初始思维状态
{
"original": to_be_sorted,
"current": "",
"phase": 0,
"method": "got"
}
)
# 运行控制器并生成输出图
ctrl.run()
ctrl.output_graph("output_got.json")
您可以通过检查output_cot.json
和output_got.json
输出图来比较两种结果。
最终思维状态的分数表示已排序列表中的错误数量。
文档
论文提供了关于框架及其组件的高层次概述。
为了更详细地了解框架,您可以阅读各个模块的文档。
特别是控制器和操作模块对于理解如何最大限度地利用框架至关重要。
我们特别注意充分记录代码,以便您可以轻松理解其工作原理和如何扩展。
例子
例子目录包含了几个可以使用框架解决的问题的示例,包括论文中介绍的那些。
这是学习如何使用框架解决实际问题的良好起点。
每个示例包含一个README.md
文件,其中提供了如何运行和使用它的说明。代码完全记录,易于跟随。
您也可以直接从主目录运行这些示例。请注意,结果将存储在相应的示例子目录中。
例如,尝试:
python -m examples.sorting.sorting_032
python -m examples.keyword_counting.keyword_counting
论文结果
您可以按照例子目录中的说明运行论文中的实验。
但是,如果您只是想查看和重新绘制结果,可以使用论文目录。
引用
如果您觉得这个存储库有价值,请给它加星!
有任何问题或反馈?请随时通过nils.blach@inf.ethz.ch与我们联系,或者在此处打开问题。
在您的工作中使用了这个存储库?请使用提供的引用方式:
@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}
}