인공지능 모델을 구성하는 경우 프롬프트 엔지니어링과 파인튜닝입니다. 해당 방식은 특정 주제나 도메인에 대한 LLM의 성능을 향상시키는데 효과적입니다. 하지만 실시간으로 바뀌는 정보에는 한계가 있습니다. LLM에 데이터를 주기 위해서는 조금 다른 방법이 필요합니다. 여기서 등장하는 기술이 RAG입니다.
RAG(Retrieval-Augmented Generation)
RAG는 말 그대로 검색(Retrieval)과 생성(Generation)을 결합한 방식입니다. LLM이 대답을 생성하기 전, 외부 데이터에서 관련 정보를 찾아온 후, 이를 바탕으로 더 신뢰도 높은 답변을 생성하는 방식입니다.

RAG는 다음과 같은 방식으로 작동합니다.
- 질문 입력
- 외부 문서나 DB에서 관련 데이터 검색
- 검색된 데이터 기반 답변 생성
기존 방식은 학습된 파라미터를 바탕으로 내부에서 답변을 생성합니다. 하지만 이는 최신화 문제, 입력 길이 제한, 큰 문서 같은 경우 처리 시간 증가 등 여러 가지 문제가 발생합니다. RAG를 적용함으로 아래와 같은 문제를 해결할 수 있습니다.
- 실시간 데이터 반영
- 대규모 문서 기반 질의응답
- 모델 파라미터를 수정하지 않아도 데이터 확장 가능
코사인 유사도

RAG에서 사용자의 질문과 관련된 문서를 찾아야 하므로 문장 간 의미 유사도 측정이 가장 중요합니다. 이때 자주 사용하는 방법이 코사인 유사도(Cosine Similarity)입니다.
코사인 유사도는 벡터 간의 방향으로 유사도를 비교하는 방식입니다. 벡터의 크기가 아닌 각도로 기준으로 측정하며 1에 가까울수록 유사도가 높고 -1에 가까울수록 반대 의미를 가집니다. 자연어 처리를 할 때 문장을 임베딩 벡터로 변환한 뒤, 질문과 각 문장의 유사도를 비교하는 데 사용합니다.
텍스트 파일로 RAG 기본 구조를 만들어보자
간단한 텍스트 파일을 사용하여 RAG의 기본 작동 원리를 구현해 보겠습니다. 아래는 example.txt안에 있는 문장입니다.
RAG는 검색 기반 생성 기술입니다.
파인튜닝은 모델 파라미터를 직접 수정합니다.
프롬프트 엔지니어링은 입력 문장을 조정합니다.
PDF는 텍스트로 변환하여 사용할 수 있습니다.
해당 단어를 한 줄씩 분리하여 관련도를 분석한 뒤, 가장 유사한 문장을 찾아 LLM에 참고자료로 제공해 답변을 생성합니다. 기본적인 폼은 다음과 같습니다.
질문 : 입력한 질문
참고자료 : 관련도 높은 문장
답변 :
import requests
from sentence_transformers import SentenceTransformer, util
# 모델 초기화
model = SentenceTransformer('jhgan/ko-sbert-sts')
# example.txt 파일에서 데이터 불러오기
with open('example.txt', 'r', encoding='utf-8') as file:
data = [line.strip() for line in file if line.strip()]
# 질문 입력
question = "RAG는 무엇인가요?"
question_embedding = model.encode(question, convert_to_tensor=True)
# 문장 임베딩 및 유사도 계산
cos_embeddings = model.encode(data, convert_to_tensor=True)
similar= util.cos_sim(question_embedding, cos_embeddings)[0]
top_idx = int(similar.argmax())
reference = data[top_idx]
# Ollama API로 질문 전송
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "llama3.2",
"prompt": f"질문: {question}\n참고자료: {reference}\n답변:",
"stream": False
}
)
print(f"질문: {question}\n참고자료: {reference}\n답변:")
#질문: RAG는 무엇인가요?
#참고자료: RAG는 검색 기반 생성 기술입니다.
#답변:
print(response.json()["response"])
# RAG(Rapid Automatic Generator)란 검색 기반 생성 기술입니다.
마지막으로
RAG는 내부 자료나 실시간 데이터를 LLM이 사용하게 만드는 핵심 구조입니다. 실제 서비스에서 RAG는 다음과 같은 방식으로 확장할 수 있습니다.
- PDF, DOCX, 웹페이지 등 다양한 데이터 추출
- ChromaDB 같은 벡터 DB 활용
- 문장 단위가 아닌 임베딩 슬라이스를 통한 정밀 검색
좋은 서비스를 만들기 위해서는 결국 좋은 데이터 확보하고 가공하는 능력이 필요합니다. RAG는 해당 데이터를 실제로 활용하게 만드는 연결고리이며 ,앞으로의 AI 서비스 개발에 핵심이 될 것입니다.
'컴퓨터 > LLM' 카테고리의 다른 글
| LLM (1) - 로컬에서 LLM을 사용해보자 (Ollama 설치 및 실행) (1) | 2025.04.24 |
|---|