优化工作原理

了解AutoRAG中优化功能的具体运作原理,对编写自定义配置YAML文件非常有帮助。 通过本文档,您可以深入了解AutoRAG的底层工作原理。

在Node中交换模块

Advanced RAG

以下是AutoRAG整体流程的示意图。 每个矩形代表一个节点,每个节点的结果会传递给下一个节点。

我需要使用所有节点吗?

不是。实现"工作"RAG管道的核心节点是retrievalprompt makergenerator

其他节点是可选的,您可以根据需要添加以获得更好的性能。

但请记住,您可以在每个节点中设置多个模块和多个参数。 然后从中获取最佳结果。

为实现这一目标,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_expansionprompt_maker无法直接评估。 若需直接评估这些节点,您需要为其构建基准真值。 例如"扩展查询的基准真值"或"提示词的基准真值"。

这确实是个艰巨的任务。要知道,制作检索gt和生成gt仍然很困难。

因此我们采用对下一节点的评估方法。 通常情况下,retrieval节点位于query_expansion之后。 在query_expansion策略中,您可以指定用于评估的retrieval模块。 评估过程中,系统会使用您指定的模块检索文档, 并根据检索到的文档对query_expansion节点进行评估。

prompt_makergeneration节点类似。 我们使用generation节点的结果来评估prompt_maker节点。

你可能会疑惑这个方法是否有效。 换个角度思考。 在这个节点中,我们已经从各种组合中找到了最佳结果。 而这个组合包含了the next node的配置。 在下一个节点中,我们将测试该节点的所有可能组合。 因此,其结果至少会与前一个节点的最佳结果相当。 而且在大多数情况下,你很可能会获得比前一个节点更优的结果。

更多优化策略

AutoRAG目前处于alpha测试阶段,未来我们还可以开发许多优化方法。 我们已准备好开发更多优化策略,并欢迎您提出建议或反馈。