AutoRAG:自动优化 RAG 管道工具,自动评估各种 RAG 模块组合,快速找到最优的 RAG 管道

简介: AutoRAG 是一款自动优化 RAG(Retrieval-Augmented Generation)管道的工具,帮助用户找到最适合其数据和应用场景的最佳 RAG 管道。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

原文链接:https://mp.weixin.qq.com/s/MJJ662U3I0nIXiK36C_6_Q


🚀 快速阅读

  • 功能:自动优化 RAG 管道,支持多种模块组合评估。
  • 应用场景:适用于各种需要 RAG 管道优化的场景。
  • 优势:简化了 RAG 管道的评估和优化过程,提高了效率。

正文(附运行示例)

AutoRAG 是什么

公众号: 蚝油菜花 - AutoRAG

AutoRAG 是一款自动优化 RAG(Retrieval-Augmented Generation)管道的工具。RAG 管道结合了检索和生成模型,用于提高自然语言处理任务的性能。然而,找到适用于特定数据和用例的最佳 RAG 管道是一个复杂且耗时的过程。

AutoRAG 通过自动化评估各种 RAG 模块组合,帮助用户快速找到最优的 RAG 管道。

AutoRAG 的主要功能

  • 数据创建:支持解析、切分和生成 QA 数据集。
  • RAG 优化:自动评估和优化不同的 RAG 模块组合。
  • 部署:提供多种方式部署优化后的 RAG 管道,包括 API 服务器和 Web 界面。

AutoRAG 的技术原理

  • 数据创建
    • 解析:将原始文档转换为可处理的格式。
    • 切分:将解析后的文档切分成小片段。
    • 生成 QA:生成问题和答案对,用于评估 RAG 管道。
  • RAG 优化
    • 节点和模块:支持多种 RAG 模块,如检索器、提示生成器和生成器。
    • 评估指标:使用多种评估指标,如 F1 分数、召回率、MRR 和 ROUGE 等。
  • 部署
    • API 服务器:将优化后的 RAG 管道部署为 API 服务器。
    • Web 界面:提供用户友好的 Web 界面,方便用户使用。

如何运行 AutoRAG

安装 AutoRAG

我们推荐使用 Python 3.10 或更高版本。

pip install AutoRAG

如果你需要使用 GPU 版本:

pip install "AutoRAG[gpu]"

或者,如果你需要解析功能:

pip install "AutoRAG[gpu,parse]"

创建数据集

解析

设置 YAML 文件:

modules:
  - module_type: langchain_parse
    parse_method: pdfminer

开始解析:

from autorag.parser import Parser

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

切分

设置 YAML 文件:

modules:
  - module_type: llama_index_chunk
    chunk_method: Token
    chunk_size: 1024
    chunk_overlap: 24
    add_file_name: en

开始切分:

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")

生成 QA

生成 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')

优化 RAG 管道

设置 YAML 文件

设置配置 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

运行 AutoRAG

评估 RAG 管道:

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

运行仪表板

查看结果:

autorag dashboard --trial_dir /your/path/to/trial_dir

部署优化后的 RAG 管道

作为代码运行

从试验文件夹中使用优化后的 RAG 管道:

from autorag.deploy import Runner

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

作为 API 服务器运行

将优化后的 RAG 管道部署为 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()

或者使用命令行:

autorag run_api --trial_dir your/path/to/trial_dir --host 0.0.0.0 --port 8000

作为 Web 界面运行

将优化后的 RAG 管道部署为 Web 界面:

autorag run_web --trial_path your/path/to/trial_path

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
|
人工智能 算法 物联网
企业级RAG全链路优化关键技术
本文深入解析了企业级RAG全链路的关键技术、效果优化、性能优化及应用实践。
2697 2
企业级RAG全链路优化关键技术
|
9月前
|
机器学习/深度学习 设计模式 人工智能
深度解析Agent实现,定制自己的Manus
文章结合了理论分析与实践案例,旨在帮助读者系统地认识AI Agent的核心要素、设计模式以及未来发展方向。
2420 103
深度解析Agent实现,定制自己的Manus
|
存储 人工智能 算法
RAG七十二式:2024年度RAG清单
作者遴选了2024年度典型的RAG系统和论文(含AI注解、来源、摘要信息),并于文末附上RAG综述和测试基准材料,希望阅读完本文可以帮助大家速通RAG。
|
数据采集 自然语言处理 调度
一文详谈RAG优化方案与实践
RAG通过检索现有的大量知识,结合强大的生成模型,为复杂的问答、文本摘要和生成任务带来了全新的解决方案。本文详细的介绍了RAG遇到的挑战、通用范式、工程实践、优化实现策略等。
|
8月前
|
人工智能 前端开发 搜索推荐
LangGraph实战教程:构建会思考、能记忆、可人工干预的多智能体AI系统
本文介绍了使用LangGraph和LangSmith构建企业级多智能体AI系统的完整流程。从简单的ReAct智能体开始,逐步扩展至包含身份验证、人工干预、长期内存管理和性能评估的复杂架构。文章详细讲解了状态管理、工具集成、条件流程控制等关键技术,并对比了监督者架构与群体架构的优劣。通过系统化的方法,展示了如何构建可靠、可扩展的AI系统,为现代AI应用开发提供了坚实基础。*作者:Fareed Khan*
1890 0
LangGraph实战教程:构建会思考、能记忆、可人工干预的多智能体AI系统
|
存储 人工智能 API
七种RAG架构cheat sheet!
RAG 即检索增强生成,是一种结合检索技术和生成模型的人工智能方法。Weaviate厂商给出了七种RAG架构cheat sheet。
1082 18
|
7月前
|
人工智能 自然语言处理 测试技术
掌握这5个要点,选对Embedding模型助力RAG系统
三桥君深入解析RAG系统中的Embedding模型选择问题,探讨其在语义理解与检索中的关键作用,并结合任务需求、资源条件等提供实用选型建议。
1354 0
|
存储 SQL 自然语言处理
LLM RAG系列
LLM RAG系列
500 1
|
机器学习/深度学习 人工智能 自然语言处理
三行代码实现实时语音转文本,支持自动断句和语音唤醒,用 RealtimeSTT 轻松创建高效语音 AI 助手
RealtimeSTT 是一款开源的实时语音转文本库,支持低延迟应用,具备语音活动检测、唤醒词激活等功能,适用于语音助手、实时字幕等场景。
2861 18
三行代码实现实时语音转文本,支持自动断句和语音唤醒,用 RealtimeSTT 轻松创建高效语音 AI 助手
|
缓存 人工智能 自然语言处理
GraphRAG、Naive RAG框架总结主流框架推荐(共23个):LightRAG、nano-GraphRAG、Fast-GraphRAG、Dify、RAGflow等
GraphRAG、Naive RAG框架总结主流框架推荐(共23个):LightRAG、nano-GraphRAG、Fast-GraphRAG、Dify、RAGflow等

热门文章

最新文章