Deep Seek R1을 활용한 RAG 애플리케이션 구축 가이드
2025-01-29 05:15:49Deep Seek R1과 RAG 애플리케이션 개요
최근 인공지능(AI)과 머신러닝(ML) 분야에서는 Retrieval-Augmented Generation(RAG)이 큰 주목을 받고 있습니다. RAG는 데이터 검색 시스템과 생성 모델을 결합하여 보다 정확하고 풍부한 답변을 제공하는 기술입니다. 이 블로그에서는 Deep Seek R1이라는 강력한 도구를 활용하여 처음부터 RAG 애플리케이션을 구축하는 과정을 안내해 드리겠습니다.
RAG의 구조 이해하기
RAG 애플리케이션은 기본적으로 세 가지 구성 요소로 이루어져 있습니다:
- 리트리버(Retriever): 지식 베이스에서 관련 문서를 찾아냅니다.
- 제너레이터(Generator): 찾아낸 문서를 바탕으로 답변을 생성합니다.
- 지식 베이스(Knowledge Base): 쉽게 검색할 수 있도록 정보를 저장합니다.
이 세 가지 요소가 조화롭게 동작할 때, RAG 시스템은 뛰어난 성능을 발휘할 수 있습니다.
환경 설정
필수 라이브러리 설치
먼저, 필요한 Python 라이브러리를 설치해야 합니다. 이때, Deep Seek R1과 다른 종속성도 함께 설치합니다.
pip install deep-seek-r1 langchain transformers sentence-transformers faiss-cpu
프로젝트 초기화
프로젝트 디렉토리를 생성하고 가상환경을 설정하여 독립성을 유지할 수 있습니다.
mkdir rag-deepseek-app
cd rag-deepseek-app
python -m venv venv
source venv/bin/activate # Windows의 경우 venv\Scripts\activate
지식 베이스 구축
데이터 준비
지식 베이스는 RAG 시스템의 핵심입니다. 초기 단계에서는 텍스트 문서로 시작하여 PDF, 데이터베이스 등 다양한 형식으로 확장할 수 있습니다. 다음과 같이 데이터를 구성합니다:
rag-deepseek-app/
└── data/
├── doc1.txt
├── doc2.txt
└── doc3.txt
문서 임베딩
Deep Seek R1을 이용하여 문서를 임베딩합니다. 임베딩된 데이터는 빠른 검색을 가능하게 합니다.
from deep_seek_r1 import DeepSeekRetriever
from sentence_transformers import SentenceTransformer
import os
# 임베딩 모델 로드
embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
# 데이터 준비
data_dir = './data'
documents = []
for file_name in os.listdir(data_dir):
with open(os.path.join(data_dir, file_name), 'r') as file:
documents.append(file.read())
# 문서 임베딩
embeddings = embedding_model.encode(documents, convert_to_tensor=True)
# 리트리버 초기화
retriever = DeepSeekRetriever()
retriever.add_documents(documents, embeddings)
retriever.save('knowledge_base.ds') # 리트리버 상태 저장
검색 및 생성 파이프라인 구축
이제 검색 및 응답 생성을 위한 파이프라인을 구축합니다.
리트리버 로드
저장된 리트리버 상태를 로드합니다.
retriever = DeepSeekRetriever.load('knowledge_base.ds')
제너레이터 통합
OpenAI의 GPT 기반 모델이나 Hugging Face의 Transformer 모델을 사용하여 응답을 생성합니다.
from transformers import AutoModelForCausalLM, AutoTokenizer
# 제너레이터 모델 로드
generator_model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
def generate_response(query, retrieved_docs):
# 쿼리와 문서를 결합
input_text = query + "\n\n" + "\n".join(retrieved_docs)
# 토큰화하여 응답 생성
inputs = tokenizer.encode(input_text, return_tensors='pt', max_length=512, truncation=True)
outputs = generator_model.generate(inputs, max_length=150, num_return_sequences=1)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
쿼리 처리 시스템
위의 모든 것을 결합하여 사용자 쿼리를 처리합니다.
def rag_query(query):
# 관련 문서 검색
retrieved_docs = retriever.search(query, top_k=3)
# 응답 생성
response = generate_response(query, retrieved_docs)
return response
쿼리 예시
query = "What is the impact of climate change on agriculture?"
response = rag_query(query)
print(response)
애플리케이션 배포
Flask 또는 FastAPI를 사용하여 RAG 시스템을 배포할 수 있습니다.
Flask 설정
먼저 Flask를 설치합니다.
pip install flask
app.py 파일을 생성합니다:
from flask import Flask, request, jsonify
from deep_seek_r1 import DeepSeekRetriever
from transformers import AutoModelForCausalLM, AutoTokenizer
# 컴포넌트 초기화
retriever = DeepSeekRetriever.load('knowledge_base.ds')
generator_model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
def generate_response(query, retrieved_docs):
input_text = query + "\n\n" + "\n".join(retrieved_docs)
inputs = tokenizer.encode(input_text, return_tensors='pt', max_length=512, truncation=True)
outputs = generator_model.generate(inputs, max_length=150, num_return_sequences=1)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
app = Flask(__name__)
@app.route('/query', methods=['POST'])
def query():
data = request.json
query = data.get('query', '')
if not query:
return jsonify({'error': 'Query is required'}), 400
retrieved_docs = retriever.search(query, top_k=3)
response = generate_response(query, retrieved_docs)
return jsonify({'response': response})
if __name__ == '__main__':
app.run(debug=True)
서버 실행:
python app.py
API 테스트
Postman이나 curl을 이용하여 쿼리를 전송합니다.
curl -X POST http://127.0.0.1:5000/query -H "Content-Type: application/json" -d '{"query": "What is the future of AI in healthcare?"}'
참고 자료
이 블로그의 내용은 Deep Seek R1 Documentation과 OpenAI의 자료를 참조하였습니다. 이 외에도 Hugging Face Transformers와 관련된 자료가 유용합니다.