AutoRAG 튜토리얼: 나만의 데이터로 최적의 RAG 파이프라인 구축하기

in #kr-dev2 months ago (edited)

AutoRAG는 손쉽게 나만의 데이터에 맞춘 최적의 RAG(Retrieval Augmented Generation) 파이프라인을 쉽게 구축하고 배포할 수 있는 프레임워크입니다.

이 글에서는 LangChain을 사용하여 문서에서 코퍼스 데이터를 만들고 AutoRAG를 사용하여 RAG 파이프라인을 평가 및 배포하는 방법을 다룹니다.

준비

먼저 필요한 파이썬 라이브러리를 설치합니다.

pip install -Uq python-dotenv nest_asyncio
pip install -Uq langchain langchain-core langchain_community langchain_text_splitters unstructured autorag


환경 변수 설정을 위해 .env 파일을 생성하고 다음과 같이 OpenAI API 키를 설정합니다.

OPENAI_API_KEY=YOUR_OPENAI_API_KEY


import os
from dotenv import load_dotenv

load_dotenv(verbose=True)

다음과 같이 nest_asyncio를 사용하여 Jupyter Notebook 환경에서 비동기 작업을 수행할 수 있도록 설정합니다.

import nest_asyncio

nest_asyncio.apply()

1단계: 평가 데이터 준비

AutoRAG를 사용하기 위한 첫 번째 단계는 RAG 파이프라인을 평가할 데이터셋을 준비하는 것입니다.
좋은 성능의 RAG 파이프라인을 얻기 위해서는 높은 품질의 평가 데이터셋을 구축하는 것이 중요합니다.

문서에서 코퍼스 데이터 만들기

LangChain을 사용하여 문서에서 코퍼스 데이터를 만들 수 있습니다.

from langchain_community.document_loaders import DirectoryLoader, UnstructuredMarkdownLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from autorag.data.corpus import langchain_documents_to_parquet


docs_path = "your/path/to/docs"

loader = DirectoryLoader(
    docs_path,
    glob="**/*.md",
    loader_cls=UnstructuredMarkdownLoader,
    use_multithreading=True,
)

documents = loader.load()
documents = RecursiveCharacterTextSplitter(
    chunk_size=512, chunk_overlap=128
).split_documents(documents)

corpus_df = langchain_documents_to_parquet(documents, "your/path/to/corpus.parquet")

위 코드는 docs_path 폴더에 있는 모든 .md 파일을 읽어서 각 파일을 512개의 토큰으로 분할하고 corpus.parquet 파일에 저장합니다.

코퍼스 데이터에서 QA 데이터 만들기

AutoRAG를 사용하여 코퍼스 데이터에서 QA 데이터를 만들 수 있습니다.

import pandas as pd
from llama_index.llms.openai import OpenAI
from autorag.data.qacreation import generate_qa_llama_index, make_single_content_qa


llm = OpenAI(model="gpt-3.5-turbo", temperature=1.0)

corpus_df = pd.read_parquet("your/path/to/corpus.parquet")

qa_df = make_single_content_qa(
    corpus_df,
    50,
    generate_qa_llama_index,
    llm=llm,
    question_num_per_content=1,
    output_filepath="your/path/to/qa.parquet",
)

위 코드는 corpus.parquet 파일에 저장된 코퍼스 데이터를 읽어서 각 텍스트 덩어리에 대해 하나의 질문을 생성하고 qa.parquet 파일에 저장합니다.

2단계: 최적의 RAG 파이프라인 찾기

평가 데이터셋을 준비했다면 이제 AutoRAG를 사용하여 최적의 RAG 파이프라인을 찾아보겠습니다.
AutoRAG는 사용자가 정의한 설정 파일을 기반으로 다양한 RAG 파이프라인을 자동으로 평가하고, 최적의 성능을 내는 파이프라인을 찾아줍니다.

설정 파일은 YAML 형식으로 작성하며, AutoRAG GitHub 저장소의 sample_config 폴더에서 미리 만들어진 설정 파일을 참고할 수 있습니다.

설정 파일이 준비되었다면 다음 명령어를 사용하여 AutoRAG를 실행합니다.

autorag evaluate \
  --config your/path/to/config.yaml \
  --qa_data_path your/path/to/qa.parquet \
  --corpus_data_path your/path/to/corpus.parquet \
  --project_dir your/path/to/project_dir

AutoRAG는 데이터셋을 자동으로 평가하고, 최적의 RAG 파이프라인을 찾습니다.
평가 결과는 현재 디렉토리에 생성된 파일 및 폴더에 저장됩니다.

또는 아래와 같이 Python 코드를 사용할 수 있습니다.

from autorag.evaluator import Evaluator


evaluator = Evaluator(
    qa_data_path="your/path/to/qa.parquet",
    corpus_data_path="your/path/to/corpus.parquet",
    project_dir="your/path/to/project_dir",
)

# RAG 파이프라인 평가를 시작합니다.
evaluator.start_trial("./config.yaml")

평가 결과는 project_dir 폴더에 저장됩니다. 그리고 이 폴더에는 summary.csv 파일이 생성되는데, 이 파일에서 어떤 모듈과 매개변수가 데이터셋에 가장 적합한지 확인할 수 있습니다.

summary.csv 파일을 봐도 되지만, 대시보드 기능을 사용하여 AutoRAG의 결과를 더 쉽게 볼 수 있습니다. 아래 명령을 실행하기만 하면 대시보드를 실행할 수 있습니다.

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

3단계: 테스트 데이터셋으로 파이프라인 평가

AutoRAG를 사용하여 최적의 RAG 파이프라인을 찾았다면, 이제 테스트 데이터셋을 사용하여 해당 파이프라인을 평가해야 합니다.

다음 명령어를 사용하여 최적의 파이프라인을 추출하고 새로운 YAML 파일로 저장합니다.

autorag extract_best_config \
  --trial_path your/path/to/project_dir/0 \
  --output_path your/path/to/pipeline.yaml

또는 아래와 같이 Python 코드를 사용할 수 있습니다.

from autorag.deploy import extract_best_config


pipeline_dict = extract_best_config(
    trial_path='your/path/to/project_dir/0', 
    output_path='your/path/to/pipeline.yaml'
)

your/path/to/pipeline.yaml에서 추출된 파이프라인 설정 파일을 확인할 수 있습니다.
이제 테스트 데이터셋을 사용하여 다시 평가를 실행합니다.

autorag evaluate \
  --config your/path/to/best.yaml \
  --qa_data_path your/path/to/qa_test.parquet \
  --corpus_data_path your/path/to/corpus_test.parquet

4단계: 최적의 RAG 파이프라인 배포

AutoRAG는 찾은 최적의 RAG 파이프라인을 다양한 방식으로 배포할 수 있는 기능을 제공합니다.

CLI로 실행

추출된 YAML 파일을 사용하여 최적화된 RAG 파이프라인을 바로 사용할 수 있습니다.

from autorag.deploy import Runner


runner = Runner.from_yaml("your/path/to/pipeline.yaml")
runner.run("who are you?")

위 코드는 pipeline.yaml 파일에 정의된 RAG 파이프라인 구성을 사용하여 질문 "who are you?"에 대한 답변을 생성합니다.

API 서버로 실행

파이프라인을 API 서버로 실행할 수도 있습니다. API endpoint는 여기에서 확인할 수 있습니다.

from autorag.deploy import Runner


runner = Runner.from_yaml("your/path/to/pipeline.yaml")
runner.run_api_server()

위 코드는 pipeline.yaml 파일에 정의된 RAG 파이프라인 구성을 사용하여 API 서버를 실행합니다. API 서버는 http://0.0.0.0:8000/run 엔드포인트를 통해 질문을 받아 답변을 생성합니다.

autorag run_api \
  --config_path your/path/to/pipeline.yaml \
  --host 0.0.0.0 --port 8000

웹 인터페이스로 실행

파이프라인을 웹 인터페이스로 실행할 수도 있습니다.

autorag run_web --yaml_path your/path/to/pipeline.yaml

위 명령어는 pipeline.yaml 파일에 정의된 RAG 파이프라인 구성을 사용하여 웹 인터페이스를 실행합니다. 웹 인터페이스는 브라우저에서 http://localhost:8501 주소로 접속하여 사용할 수 있습니다.

마치며

이 글에서는 AutoRAG를 사용하여 최적의 RAG 파이프라인을 찾은 다음, 평가하고 배포하는 방법을 단계별로 간략하게 살펴보았습니다. AutoRAG는 다양한 구성을 자동으로 평가하여 최적의 파이프라인을 찾고, CLI, API 서버, 웹 인터페이스 등으로 배포할 수 있도록 지원합니다. 덕분에 AutoRAG를 사용하면 누구나 쉽고 빠르게 자신만의 데이터에 맞춘 RAG 시스템을 구축할 수 있습니다.

더 자세한 내용은 AutoRAG 튜토리얼 문서를 참조하십시오.

Posted using Obsidian Steemit plugin

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.029
BTC 66868.29
ETH 3520.34
USDT 1.00
SBD 2.63