基于图结构的大语言模型推理框架
Graph of Thoughts (GoT) 是一种创新的大语言模型(LLM)提示框架,通过将LLM推理过程建模为任意有向图结构,实现了对思维链(Chain-of-Thought)和思维树(Tree-of-Thought)等现有方案的全面扩展。GoT引入了思维聚合等新型变换操作,使LLM能够模拟人类非线性问题解决过程,在排序、集合运算、关键词统计和文档合并等任务中实现了显著性能提升,同时降低推理成本。
大语言模型(LLM)在自然语言处理领域取得了突破性进展,但如何有效引导LLM进行复杂推理仍是一个挑战。现有提示方案如:
然而,这些方案存在局限性:CoT缺乏全局探索,CoT-SC无法实现局部回溯,ToT不支持思维聚合。GoT通过图结构建模推理过程,解决了这些限制,实现了更灵活、高效的LLM推理框架。
GoT的核心思想是将LLM推理过程建模为有向图,其中:
形式化定义:GoT = (G, T, E, R),其中:
class GraphOfThoughts:
def __init__(self):
self.graph = Graph() # 有向图 G=(V,E)
self.transformations = [] # 思维变换操作 T
self.evaluator = None # 评估函数 E
self.ranker = None # 排序函数 R
def apply_transformation(self, transformation, inputs):
"""应用思维变换操作"""
new_vertices = transformation(inputs)
self.graph.add_vertices(new_vertices)
return new_vertices
def evaluate(self, vertex):
"""评估思维质量"""
return self.evaluator(vertex, self.graph)
def rank(self, k):
"""选择前k个最优思维"""
return self.ranker(self.graph, k)
GoT支持三类核心思维变换操作:
def aggregate(thoughts):
"""合并多个排序子数组为完整排序数组"""
prompt = f"合并以下已排序列表:{thoughts}"
merged = llm.generate(prompt)
return merged
def refine(thought):
"""改进排序结果中的错误"""
prompt = f"修正以下排序中的错误:{thought}"
improved = llm.generate(prompt)
return improved
def generate(thought, k=3):
"""生成k个不同排序方案"""
prompts = [f"对列表进行排序:{thought}"] * k
return [llm.generate(p) for p in prompts]
GoT采用模块化架构设计,包含以下核心组件:
+----------------+ +----------------+ +----------------+
| Prompter |----->| Parser |----->| Scoring Module |
+----------------+ +----------------+ +----------------+
^ | |
| v v
+----------------+ +----------------+ +----------------+
| Controller |<-----| Graph Reasoning|<-----| LLM/External |
| | | State (GRS) | | Entities |
+----------------+ +----------------+ +----------------+
^
|
+----------------+
| Graph of Ops |
| (GoO) |
+----------------+
GoT的核心创新在于使用图结构建模LLM推理过程,相比线性链(CoT)或树结构(ToT),图结构能够:
GoT采用高度模块化设计,每个组件提供清晰API:
# 提示器API
Prompter.generate(thought, k) # 生成k个新思维
Prompter.aggregate(thoughts) # 聚合多个思维
# 控制器API
Controller.generate() # 生成操作
Controller.aggregate() # 聚合操作
Controller.keep_best(n) # 保留前n个最优思维
GoT的核心设计原则是将复杂任务分解为LLM可可靠解决的子任务:
GoT通过图结构实现了延迟(推理步数)和体积(信息覆盖范围)的最优权衡:
方案 | 延迟 | 体积 |
---|---|---|
CoT | N | N |
CoT-SC | N/k | N/k |
ToT | logkN | O(logkN) |
GoT | logkN | N |
GoT在保持低延迟(logkN)的同时,实现了最大信息覆盖(N),这是通过聚合操作实现的独特优势。
GoT采用归并排序策略分解任务:
1. Generate(k=1) # 分割数组为子数组
2. foreach subarray:
3. Generate(k=5) # 排序子数组
4. Score(k=1) # 评分排序结果
5. KeepBestN(1) # 保留最佳排序
6. Aggregate(10) # 聚合排序结果
7. Score(k=1) # 评分聚合结果
8. KeepBestN(1) # 保留最佳结果
对于集合交集运算,GoT采用分治策略:
GoT将文本分解为段落,独立统计关键词后聚合结果:
prompt = """
统计以下段落中每个国家的出现次数:
{paragraph}
输出格式:
{{
"country1": count1,
"country2": count2,
...
}}
"""
GoT通过多轮聚合和精炼操作合并多个NDA文档:
在GPT-3.5上的实验结果表明:
Graph of Thoughts (GoT) 框架通过将LLM推理过程建模为有向图结构,实现了对现有提示方案的全面扩展。其核心创新包括:
实验证明,GoT在排序、集合运算、关键词统计和文档合并等任务中显著优于现有方案,同时降低推理成本。未来工作将探索:
GoT为复杂LLM推理任务提供了强大而灵活的框架,为提示工程领域开辟了新的研究方向。