LLM之RAG实战(四十八)| AutoRAG:基于用户数据自动优化RAG pipeline的AutoML工具

向量数据库大模型GPU

picture.image

论文题目 :《AutoRAG: Automated Framework for optimization of Retrieval Augmented Generation Pipeline》

论文地址https://arxiv.org/pdf/2410.20878

Github地址https://github.com/Marker-Inc-Korea/AutoRAG

官方文档https://docs.auto-rag.com/

一、AutoRAG介绍

  市面上有很多RAG pipelines和模块,但是针对具体的数据和场景的最佳实践是什么?是非常耗时和困难的。而AutoRAG可以通过自动化评估不同RAG模块组合来弥补上述困难。

特点

  • Data Creation :使用您自己的原始文档创建 RAG 评估数据。
  • Optimization : 自动运行实验,为您自己的数据找到最佳 RAG 管道。
  • Deployment : 使用单个 yaml 文件部署最佳 RAG 管道。 还支持 Flask 服务器。

二、 AutoRAG支持的RAG技术栈

2.1 数据模块

picture.image

picture.image

picture.image

2.2 RAG优化模块

picture.image

picture.image

picture.image

picture.image

picture.image

picture.image

picture.image

2.3 评估指标

picture.image

picture.image

三、AutoRAG使用

3.1 安装AutoRAG

a)建议使用python3.10+版本


        
            

          pip install AutoRAG
        
      

b)要使用本地模型,则需要安装gpu版本


        
            

          pip install "AutoRAG[gpu]"
        
      

c)如果涉及到解析文档,则需要使用parsing版本


        
            

          pip install "AutoRAG[gpu,parse]"
        
      

3.2 创建数据

picture.image

RAG 优化需要两种类型的数据:QA 数据集和 Corpus 数据集。

  • QA 数据集文件 (qa.parquet)

  • 语料库数据集文件 (corpus.parquet)

     QA 数据集对于准确可靠的评估和优化非常重要。
    
    
    
    
     语料库数据集对 RAG 的性能至关重要。这是因为 RAG 使用语料库来检索文档并使用它生成答案。
    

3.3 解析

a)配置yaml文件


          
modules:
          
  - module_type: langchain_parse
          
    parse_method: pdfminer
      
   也可以同时使用多个Parse模块,这种情况下,需要为每个解析的结果返回一个新进程。

b)开始解析

只需几行代码即可解析原始文档


          
from autorag.parser import Parser
          

          
parser = Parser(data_path_glob="your/data/path/*")
          
parser.start_parsing("your/path/to/parse_config.yaml")
      

3.4 分块

a)配置yaml文件


          
modules:
          
  - module_type: llama_index_chunk
          
    chunk_method: Token
          
    chunk_size: 1024
          
    chunk_overlap: 24
          
    add_file_name: en
      
   也可以一次使用多个 Chunk 模块。在这种情况下,您需要使用一个语料库创建 QA,然后将语料库的其余部分映射到 QA 数据。如果 chunk 方法不同,retrieval\_gt也会不同,因此我们需要将其重新映射到 QA 数据集。

b)开始分块

只需几行代码即可对解析后的结果进行分块


          
from autorag.chunker import Chunker
          

          
chunker = Chunker.from_parquet(parsed_data_path="your/parsed/data/path")
          
chunker.start_chunking("your/path/to/chunk_config.yaml")
      

3.5 创建QA


          
import pandas as pd
          
from llama_index.llms.openai import OpenAI
          

          
from autorag.data.qa.filter.dontknow import dontknow_filter_rule_based
          
from autorag.data.qa.generation_gt.llama_index_gen_gt import (
          
    make_basic_gen_gt,
          
    make_concise_gen_gt,
          
)
          
from autorag.data.qa.schema import Raw, Corpus
          
from autorag.data.qa.query.llama_gen_query import factoid_query_gen
          
from autorag.data.qa.sample import random_single_hop
          

          
llm = OpenAI()
          
raw_df = pd.read_parquet("your/path/to/parsed.parquet")
          
raw_instance = Raw(raw_df)
          

          
corpus_df = pd.read_parquet("your/path/to/corpus.parquet")
          
corpus_instance = Corpus(corpus_df, raw_instance)
          

          
initial_qa = (
          
    corpus_instance.sample(random_single_hop, n=3)
          
    .map(
          
        lambda df: df.reset_index(drop=True),
          
    )
          
    .make_retrieval_gt_contents()
          
    .batch_apply(
          
        factoid_query_gen,  # query generation
          
        llm=llm,
          
    )
          
    .batch_apply(
          
        make_basic_gen_gt,  # answer generation (basic)
          
        llm=llm,
          
    )
          
    .batch_apply(
          
        make_concise_gen_gt,  # answer generation (concise)
          
        llm=llm,
          
    )
          
    .filter(
          
        dontknow_filter_rule_based,  # filter don't know
          
        lang="en",
          
    )
          
)
          

          
initial_qa.to_parquet('./qa.parquet', './corpus.parquet')
      

3.6 RAG优化

picture.image

picture.image

3.6.1 设置yaml文件

首先,您需要为 RAG 优化设置配置 YAML 文件。

可以在此处[1]获取各种配置 YAML 文件。强烈建议使用预制的配置 YAML 文件作为初学者。

如果想制作自己的配置 YAML 文件,可以查看配置 YAML 文件[2]部分。

以下是使用 retrieval、prompt_maker 和 generator 节点的配置 YAML 文件示例。


          
node_lines:
          
- node_line_name: retrieve_node_line  # Set Node Line (Arbitrary Name)
          
  nodes:
          
    - node_type: retrieval  # Set Retrieval Node
          
      strategy:
          
        metrics: [retrieval_f1, retrieval_recall, retrieval_ndcg, retrieval_mrr]  # Set Retrieval Metrics
          
      top_k: 3
          
      modules:
          
        - module_type: vectordb
          
          vectordb: default
          
        - module_type: bm25
          
        - module_type: hybrid_rrf
          
          weight_range: (4,80)
          
- node_line_name: post_retrieve_node_line  # Set Node Line (Arbitrary Name)
          
  nodes:
          
    - node_type: prompt_maker  # Set Prompt Maker Node
          
      strategy:
          
        metrics:   # Set Generation Metrics
          
          - metric_name: meteor
          
          - metric_name: rouge
          
          - metric_name: sem_score
          
            embedding_model: openai
          
      modules:
          
        - module_type: fstring
          
          prompt: "Read the passages and answer the given question. \n Question: {query} \n Passage: {retrieved_contents} \n Answer : "
          
    - node_type: generator  # Set Generator Node
          
      strategy:
          
        metrics:  # Set Generation Metrics
          
          - metric_name: meteor
          
          - metric_name: rouge
          
          - metric_name: sem_score
          
            embedding_model: openai
          
      modules:
          
        - module_type: openai_llm
          
          llm: gpt-4o-mini
          
          batch: 16
      

3.6.2 运行AutoRAG评估


          
from autorag.evaluator import Evaluator
          

          
evaluator = Evaluator(qa_data_path='your/path/to/qa.parquet', corpus_data_path='your/path/to/corpus.parquet')
          
evaluator.start_trial('your/path/to/config.yaml')
      

或者,使用命令行界面


        
            

          autorag evaluate --config your/path/to/default\_config.yaml --qa\_data\_path your/path/to/qa.parquet --corpus\_data\_path your/path/to/corpus.parquet
        
      
   完成后,可以看到在当前目录中创建的多个文件和文件夹。在命名为数字(如 0)的 trial 文件夹中,可以检查summary.csv文件,该文件汇总了评估结果和最适合您数据的 RAG 管道。

3.6.3 运行Dashboard


        
            

          autorag dashboard --trial\_dir /your/path/to/trial\_dir
        
      

picture.image

3.7 部署RAG pipeline

3.7.1 代码运行

   可以立即从 trial 文件夹中使用最佳 RAG 管道。trial 文件夹是正在运行的控制面板中使用的目录。(如 0、1、2、...)  

          
from autorag.deploy import Runner
          

          
runner = Runner.from_trial_folder('/your/path/to/trial_dir')
          
runner.run('your question')
      

3.7.2 作为API服务器运行


          
import nest_asyncio
          
from autorag.deploy import ApiRunner
          

          
nest_asyncio.apply()
          

          
runner = ApiRunner.from_trial_folder('/your/path/to/trial_dir')
          
runner.run_api_server()
      

3.7.3 作为WEB界面运行


        
            

          autorag run\_web --trial\_path your/path/to/trial\_path
        
      

picture.image

3.7.4 使用高级WEB界面

  可以将 Kotaemon[3] 提供的高级 Web 界面部署到 fly.io。可以参考[4]并部署到 fly.io

参考文献:

[1] https://github.com/Marker-Inc-Korea/AutoRAG/blob/main/sample\_config

[2] https://github.com/Marker-Inc-Korea/AutoRAG?tab=readme-ov-file#-create-your-own-config-yaml-file

[3] https://github.com/Cinnamon/kotaemon

[4] https://github.com/vkehfdl1/AutoRAG-web-kotaemon

0
0
0
0
关于作者
相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论