❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
原文链接:https://mp.weixin.qq.com/s/MJJ662U3I0nIXiK36C_6_Q
🚀 快速阅读
- 功能:自动优化 RAG 管道,支持多种模块组合评估。
- 应用场景:适用于各种需要 RAG 管道优化的场景。
- 优势:简化了 RAG 管道的评估和优化过程,提高了效率。
正文(附运行示例)
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
资源
- 项目官网:https://docs.auto-rag.com
- GitHub 仓库:https://github.com/Marker-Inc-Korea/AutoRAG
- Docker 安装指南:https://github.com/Marker-Inc-Korea/AutoRAG/blob/main/docs/source/install.md#1-build-the-docker-image
- arXiv 技术论文:https://arxiv.org/abs/2410.20878
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦