面向检索增强生成(RAG)的 AutoML 工具,可自动为您的数据寻找最优的 RAG 流水线。
市面上有很多 RAG 流水线和模块,但你不知道哪种流水线最适合“你自己的数据”和“你自己的使用场景”。手动构建和评估所有 RAG 模块非常耗时且困难。但如果不这样做,你将永远无法知道哪种 RAG 流水线最适合你的特定场景。
AutoRAG 是一个为“你的数据”寻找最优 RAG 流水线的工具。你可以使用自己的评估数据自动评估各种 RAG 模块,并找到最适合你自己使用场景的最佳 RAG 流水线。
AutoRAG 支持一种简单的方法来评估多种 RAG 模块组合。立即尝试,为你的使用场景找到最佳的 RAG 流水线。
探索我们的 📖 文档!!
https://github.com/Marker-Inc-Korea/AutoRAG/assets/96727832/c0d23896-40c0-479f-a17b-aa2ec3183a26
默认静音,请开启声音收听旁白
你可以在 YouTube 上观看
我们推荐使用 Python 3.10 或更高版本来运行 AutoRAG。
pip install AutoRAG
如果你想使用本地模型,需要安装 GPU 版本。
pip install "AutoRAG[gpu]"
或者,为了解析功能,你可以安装解析版本。
pip install "AutoRAG[gpu,parse]"
RAG 优化需要两种类型的数据:问答数据集和语料库数据集。
问答 数据集对于准确可靠的评估和优化至关重要。
语料库 数据集对 RAG 的性能至关重要。这是因为 RAG 使用语料库来检索文档并基于其生成答案。
modules:
- module_type: langchain_parse
parse_method: pdfminer
你也可以同时使用多个解析模块。但在这种情况下,你需要为每个解析结果返回一个新的处理流程。
只需几行代码即可解析你的原始文档。
from autorag.parser import Parser
parser = Parser(data_path_glob="你的/数据/路径/*")
parser.start_parsing("你的/解析配置/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="你的/已解析数据/路径")
chunker.start_chunking("你的/分块配置/yaml/文件路径")
只需几行代码即可创建问答数据集。
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("你的/已解析数据/parquet/文件路径")
raw_instance = Raw(raw_df)
corpus_df = pd.read_parquet("你的/语料库/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, # 查询生成
llm=llm,
)
.batch_apply(
make_basic_gen_gt, # 答案生成 (基础)
llm=llm,
)
.batch_apply(
make_concise_gen_gt, # 答案生成 (简洁)
llm=llm,
)
.filter(
dontknow_filter_rule_based, # 过滤“不知道”的回答
lang="en",
)
)
initial_qa.to_parquet('./qa.parquet', './corpus.parquet')
下图展示了仅包含节点的 AutoRAG RAG 结构。
下图展示了所有节点和模块。
AutoRAG 中每个节点使用的评估指标如下所示。
以下是 AutoRAG 支持的评估指标的详细信息。
首先,你需要为 RAG 优化设置配置 YAML 文件。
我们强烈建议初学者使用预制的配置 YAML 文件。
以下是一个配置 YAML 文件的示例,它使用了三个检索节点、prompt_maker 和 generator 节点。
node_lines:
- node_line_name: retrieve_node_line
nodes:
- node_type: lexical_retrieval
strategy:
metrics: [ retrieval_f1, retrieval_recall, retrieval_ndcg, retrieval_mrr ]
top_k: 3
modules:
- module_type: bm25
- node_type: semantic_retrieval
strategy:
metrics: [ retrieval_f1, retrieval_recall, retrieval_ndcg, retrieval_mrr ]
top_k: 3
modules:
- module_type: vectordb
vectordb: default
- node_type: hybrid_retrieval
strategy:
metrics: [ retrieval_f1, retrieval_recall, retrieval_ndcg, retrieval_mrr ]
top_k: 3
modules:
- module_type: hybrid_rrf
weight_range: (4,80)
- node_line_name: post_retrieve_node_line
nodes:
- node_type: prompt_maker # 设置提示词制作节点
strategy:
metrics: # 设置生成指标
- metric_name: meteor
- metric_name: rouge
- metric_name: sem_score
embedding_model: openai
modules:
- module_type: fstring
prompt: "阅读以下段落并回答给定的问题。 \n 问题: {query} \n 段落: {retrieved_contents} \n 答案 : "
- node_type: generator # 设置生成器节点
strategy:
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
只需几行代码即可评估你的 RAG 流水线。
from autorag.evaluator import Evaluator
evaluator = Evaluator(qa_data_path='你的/问答数据/parquet/文件路径', corpus_data_path='你的/语料库/parquet/文件路径')
evaluator.start_trial('你的/配置/yaml/文件路径')
或者,你可以使用命令行界面
autorag evaluate --config 你的/配置/yaml/文件路径 --qa_data_path 你的/问答数据/parquet/文件路径 --corpus_data_path 你的/语料库/parquet/文件路径
完成后,你可以在当前目录下看到创建的几个文件和文件夹。
在名为数字的试验文件夹中(例如 0),你可以查看 summary.csv 文件,该文件总结了评估结果以及针对你的数据的最佳 RAG 流水线。
更多详情,你可以查看文件夹结构 这里。
你可以运行一个仪表板来轻松查看结果。
autorag dashboard --trial_dir /你的/试验文件夹/路径
你可以直接从试验文件夹中使用最优的 RAG 流水线。试验文件夹是运行仪表板时使用的目录(例如 0, 1, 2, ...)。
from autorag.deploy import Runner
runner = Runner.from_trial_folder('/你的/试验文件夹/路径')
runner.run('你的问题')
你可以将此流水线作为 API 服务器运行。
查看 API 端点 这里。
import nest_asyncio
from autorag.deploy import ApiRunner
nest_asyncio.apply()
runner = ApiRunner.from_trial_folder('/你的/试验文件夹/路径')
runner.run_api_server()
autorag run_api --trial_dir 你的/试验文件夹/路径 --host 0.0.0.0 --port 8000
CLI 命令使用提取的配置 YAML 文件。如果你想了解更多,请查看 这里。
你可以将此流水线作为 Web 界面运行。
查看 Web 界面 这里。
autorag run_web --trial_path 你的/试验文件夹/路径