优化工作原理¶
了解AutoRAG中优化功能的具体运作原理,对编写自定义配置YAML文件非常有帮助。 通过本文档,您可以深入了解AutoRAG的底层工作原理。
在Node中交换模块¶
以下是AutoRAG整体流程的示意图。 每个矩形代表一个节点,每个节点的结果会传递给下一个节点。
我需要使用所有节点吗?
不是。实现"工作"RAG管道的核心节点是retrieval、prompt maker和generator。
其他节点是可选的,您可以根据需要添加以获得更好的性能。
但请记住,您可以在每个节点中设置多个模块和多个参数。 然后从中获取最佳结果。
为实现这一目标,AutoRAG首先会在每个节点中生成所有可能的模块与参数组合。 随后,系统会使用每种组合运行流程并获取结果。 最终,系统会根据给定的策略从这些结果中选出最优解。
让我给你展示一个例子。
modules:
- module_type: llama_index_llm
llm: [openai]
model: [gpt-3.5-turbo-16k, gpt-3.5-turbo-1106]
temperature: [0.5, 1.0, 1.5]
在这个YAML文件中,包含一个llama_index_llm模块及其参数。 AutoRAG会自动生成每个参数的组合。
combinations = [
{
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-16k',
'temperature': 0.5
}, {
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-16k',
'temperature': 1.0
}, {
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-16k',
'temperature': 1.5
}, {
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-1106',
'temperature': 0.5
}, {
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-1106',
'temperature': 1.0
}, {
'module_type': 'llama_index_llm',
'llm': 'openai',
'model': 'gpt-3.5-turbo-1106',
'temperature': 1.5
}
]
看到所有组合了吗?
现在,AutoRAG会逐个运行每个模块和参数的组合。
您可以在summary.csv文件中查看结果。
将最佳结果传递给下一个节点¶
上一个节点的最佳结果会传递给下一个节点。 这意味着下一个节点会将上一个节点的最佳结果作为输入使用。
通过这种方式,每个节点无需知晓输入结果是如何生成的。 可以将其视为马尔可夫链的一种体现,仅需前一个状态即可生成下一个状态。 节点本身不需要了解整个流程管道或先前的状态。
为什么我们选择这种方法? 我们知道前一个节点的结果会影响下一个节点的结果,但这并不总能保证获得最佳结果。 例如,如果节点选择是B而下一个是A。但实际上可能存在A-A组合才是最佳方案的情况。
然而,测试所有节点组合可能导致过多的组合尝试和重试。 我们的目标是在给定时间和资源条件下找到最优流程,而非"最佳流程"。
评估无法评估的节点¶
某些节点,如query_expansion或prompt_maker无法直接评估。
若需直接评估这些节点,您需要为其构建基准真值。
例如"扩展查询的基准真值"或"提示词的基准真值"。
这确实是个艰巨的任务。要知道,制作检索gt和生成gt仍然很困难。
因此我们采用对下一节点的评估方法。
通常情况下,retrieval节点位于query_expansion之后。
在query_expansion策略中,您可以指定用于评估的retrieval模块。
评估过程中,系统会使用您指定的模块检索文档,
并根据检索到的文档对query_expansion节点进行评估。
与prompt_maker和generation节点类似。
我们使用generation节点的结果来评估prompt_maker节点。
你可能会疑惑这个方法是否有效。
换个角度思考。
在这个节点中,我们已经从各种组合中找到了最佳结果。
而这个组合包含了the next node的配置。
在下一个节点中,我们将测试该节点的所有可能组合。
因此,其结果至少会与前一个节点的最佳结果相当。
而且在大多数情况下,你很可能会获得比前一个节点更优的结果。
更多优化策略¶
AutoRAG目前处于alpha测试阶段,未来我们还可以开发许多优化方法。 我们已准备好开发更多优化策略,并欢迎您提出建议或反馈。