본문 바로가기

인공지능

Redis Vector Library를 활용한 RAG 파이프라인 구축: AI 검색 시스템 만들기

728x90
반응형

📌 AI 검색을 더 똑똑하게 만드는 방법?

요즘 AI 챗봇과 검색 시스템이 빠르게 발전하고 있지만, 여전히 정확한 정보를 찾는 것이 쉽지 않습니다. 기존의 AI 모델은 문맥을 이해하는 데 한계가 있고, 훈련된 데이터 외의 정보는 제대로 활용하지 못하는 경우가 많습니다.

여기서 RAG(Retrieval Augmented Generation) 기술이 등장합니다. RAG는 벡터 검색(Vector Search)과 대형 언어 모델(LLM)을 결합하여 AI가 보다 정교한 답변을 제공할 수 있도록 도와줍니다.

이 글에서는 Redis Vector Library(RedisVL)를 활용한 RAG 파이프라인 구축 방법을 설명합니다. RedisVL을 이용하면 벡터 검색을 쉽게 구현할 수 있으며, OpenAI API와 결합하여 실제로 동작하는 AI 검색 시스템을 만들 수 있습니다.

지금부터 RedisVL과 함께 RAG 기반 AI 어시스턴트를 구축하는 과정을 따라가 보겠습니다! 🚀

반응형

1️⃣ RAG와 Redis Vector Library란?

🔹 RAG(Retrieval Augmented Generation)란?

RAG는 검색 기반 정보 검색(Retrieval)과 생성형 AI(Generation)를 결합한 기술입니다. 단순히 LLM(예: GPT-4)만 사용하는 것이 아니라, 벡터 검색을 통해 관련 정보를 찾아 모델의 응답을 보강하는 방식입니다.

💡 RAG의 핵심 원리:

  1. 사용자의 질문을 벡터화(Embedding)함
  2. RedisVL에서 관련 문서를 검색
  3. 검색된 문서를 바탕으로 OpenAI GPT 모델이 답변 생성

🔹 Redis Vector Library(RedisVL)란?

RedisVL은 Redis에서 벡터 데이터 검색을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 기존 Redis는 키-값(Key-Value) 저장소로 많이 사용되었지만, 벡터 검색(Vector Search)을 통해 AI 및 추천 시스템에서도 강력한 성능을 발휘합니다.

💡 RedisVL의 주요 기능:

  • Hugging Face 모델을 활용한 벡터 임베딩 지원
  • HNSW 기반의 빠른 벡터 검색
  • OpenAI API와의 손쉬운 통합

2️⃣ RAG 파이프라인 구축: 사전 준비

🛠 1. 환경 설정 및 필수 라이브러리 설치

아래 명령어를 실행하여 Redis 및 Python 라이브러리를 설치합니다.

🔹 Redis 설치 (Ubuntu 기준)

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update  
sudo apt-get install redis-stack-server  
redis-stack-server --daemonize yes

🔹 Python 라이브러리 설치

pip install -q redis redisvl langchain_community pypdf sentence-transformers openai

🛠 2. Redis 연결 설정

import os
from redis import Redis

# Redis 환경 변수 설정
REDIS_HOST = "localhost"
REDIS_PORT = "6379"
REDIS_PASSWORD = ""

REDIS_URL = f"redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}"

# Redis 연결
client = Redis.from_url(REDIS_URL)

3️⃣ 데이터 전처리 및 벡터 임베딩 생성

📄 1. PDF 문서 로드 및 텍스트 분할

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader

# PDF 파일 로드
data_path = "resources/"
doc = "resources/nike_10k.pdf"

# 텍스트 분할
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2500, chunk_overlap=0)
loader = PyPDFLoader(doc)
chunks = loader.load_and_split(text_splitter)

🔍 2. 벡터 임베딩 생성 및 RedisVL 저장

from redisvl.utils.vectorize import HFTextVectorizer

# Hugging Face 모델로 벡터 임베딩 생성
vectorizer = HFTextVectorizer("sentence-transformers/all-MiniLM-L6-v2")
embeddings = vectorizer.embed_many([chunk.page_content for chunk in chunks])

4️⃣ RedisVL에서 벡터 검색 구현

🗂 1. 인덱스 생성 및 데이터 저장

from redisvl.index import SearchIndex

# 인덱스 스키마 설정
schema = {
    "index": {"name": "redisvl", "prefix": "chunk"},
    "fields": [
        {"name": "chunk_id", "type": "tag", "attrs": {"sortable": True}},
        {"name": "content", "type": "text"},
        {"name": "text_embedding", "type": "vector", "attrs": {
            "dims": 384, "distance_metric": "cosine", "algorithm": "hnsw", "datatype": "float32"}}
    ]
}

# 인덱스 생성
index = SearchIndex.from_dict(schema)
index.set_client(client)
index.create(overwrite=True, drop=True)

🔍 2. 벡터 검색 실행

from redisvl.query import VectorQuery

query = "Nike profit margins and company performance"
query_embedding = vectorizer.embed(query)

vector_query = VectorQuery(
    vector=query_embedding,
    vector_field_name="text_embedding",
    num_results=3,
    return_fields=["chunk_id", "content"],
    return_score=True
)

result = index.query(vector_query)
print(result)

5️⃣ RAG 기반 AI 어시스턴트 만들기

🤖 1. OpenAI GPT 모델 연동

import openai

CHAT_MODEL = "gpt-3.5-turbo-0125"
openai.api_key = "YOUR_OPENAI_API_KEY"

def generate_answer(query, context):
    prompt = f"질문: {query}\n\n도움이 될 만한 문맥:\n{context}\n\n답변:"
    
    response = openai.ChatCompletion.create(
        model=CHAT_MODEL,
        messages=[{"role": "user", "content": prompt}]
    )
    return response["choices"][0]["message"]["content"]

🔥 2. AI 검색 시스템 테스트

query = "What is Nike's revenue trend?"
context = "\n".join([res["content"] for res in result])

answer = generate_answer(query, context)
print("💡 AI 답변:", answer)

728x90

Redis Vector Library를 활용한 RAG 파이프라인 구축을 통해 AI 검색 시스템을 더 강력하게 만들 수 있습니다. 특히, RedisVL은 빠른 벡터 검색과 LLM과의 연동을 쉽게 지원하므로 AI 어시스턴트 개발에 최적화된 솔루션입니다.

핵심 정리:

  • RAG는 검색과 AI 생성 모델을 결합한 기술
  • RedisVL을 이용하면 벡터 검색을 쉽게 구현 가능
  • OpenAI GPT와 결합하여 AI 검색 시스템 구축 가능

https://redis.io/blog/from-zero-to-rag-building-your-first-rag-pipeline-with-redisvl/?fbclid=IwY2xjawISLyxleHRuA2FlbQIxMQABHUQAORZNuM7nmXALDv4VTE4MppTzc-j8FBc-B8jkBueA_XxbtbHZh5DWew_aem_4lsvk5W7cUuULyqB46BizQ

 

Building your first RAG pipeline with RedisVL - Redis

Learn how to build a Retrieval Augmented Generation (RAG) pipeline using the Redis Vector Library (RedisVL). Explore vector embeddings, data preprocessing, and AI-driven retrieval techniques to create intelligent apps.

redis.io

728x90
반응형