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

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 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 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

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

相关文章
|
8月前
|
人工智能 资源调度 数据可视化
StoryWeaver:故事可视化生成模型,快速生成故事绘本,支持处理单角色和多角色的故事可视化任务
StoryWeaver 是厦门大学与网易伏羲联合推出的 AI 模型,通过知识图谱和角色定制技术,实现高质量的故事可视化。
468 18
StoryWeaver:故事可视化生成模型,快速生成故事绘本,支持处理单角色和多角色的故事可视化任务
|
8月前
|
存储 人工智能 算法
RAG七十二式:2024年度RAG清单
作者遴选了2024年度典型的RAG系统和论文(含AI注解、来源、摘要信息),并于文末附上RAG综述和测试基准材料,希望阅读完本文可以帮助大家速通RAG。
|
8月前
|
存储 人工智能 API
七种RAG架构cheat sheet!
RAG 即检索增强生成,是一种结合检索技术和生成模型的人工智能方法。Weaviate厂商给出了七种RAG架构cheat sheet。
537 18
|
8月前
|
人工智能 测试技术
Valley:字节跳动开源小体积的多模态模型,在小于 10B 参数的模型中排名第二
Valley 是字节跳动推出的多模态大模型,能够处理文本、图像和视频数据,在电子商务和短视频领域表现优异,并在 OpenCompass 测试中排名第二。
432 10
Valley:字节跳动开源小体积的多模态模型,在小于 10B 参数的模型中排名第二
|
8月前
|
人工智能 测试技术
VideoPhy:UCLA 和谷歌联合推出评估视频生成模型物理模拟能力的评估工具,衡量模型生成的视频是否遵循现实世界的物理规则
VideoPhy 是 UCLA 和谷歌联合推出的首个评估视频生成模型物理常识能力的基准测试,旨在衡量模型生成的视频是否遵循现实世界的物理规则。
208 9
VideoPhy:UCLA 和谷歌联合推出评估视频生成模型物理模拟能力的评估工具,衡量模型生成的视频是否遵循现实世界的物理规则
|
8月前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
373 47
Harmony OS开发-ArkTS语言速成二
|
8月前
|
人工智能 知识图谱 Docker
KAG:增强 LLM 的专业能力!蚂蚁集团推出专业领域知识增强框架,支持逻辑推理和多跳问答
KAG 是蚂蚁集团推出的专业领域知识服务框架,通过知识增强提升大型语言模型在特定领域的问答性能,支持逻辑推理和多跳事实问答,显著提升推理和问答的准确性和效率。
2283 46
KAG:增强 LLM 的专业能力!蚂蚁集团推出专业领域知识增强框架,支持逻辑推理和多跳问答
|
8月前
|
人工智能 搜索推荐 前端开发
MiniPerplx:基于 Grok 2.0 的开源 AI 搜索引擎,支持网页、学术、视频搜索
MiniPerplx 是一款基于 Grok 2.0 模型的开源 AI 搜索引擎,支持网页、学术论文、YouTube 视频等多种内容搜索,提供代码解释、天气预报等功能。
272 17
MiniPerplx:基于 Grok 2.0 的开源 AI 搜索引擎,支持网页、学术、视频搜索
|
存储 SQL 自然语言处理
LLM RAG系列
LLM RAG系列
355 1
|
数据采集 自然语言处理 调度
一文详谈RAG优化方案与实践
RAG通过检索现有的大量知识,结合强大的生成模型,为复杂的问答、文本摘要和生成任务带来了全新的解决方案。本文详细的介绍了RAG遇到的挑战、通用范式、工程实践、优化实现策略等。

热门文章

最新文章