091

[AI] LLM 기초(2): 프롬프트 엔지니어링, 파인튜닝, RAG 본문

Computer Science/AI

[AI] LLM 기초(2): 프롬프트 엔지니어링, 파인튜닝, RAG

공구일 2026. 5. 16. 00:31
728x90

2. LLM 보안 기술

 

- GPT 같은 LLM이 등장했지만, LLM 단독으로는 실제 서비스에서 최신 정보를 모르거나, 계산 실수, 할루시네이션(환각), 회사 내부 문서를 알지 못하는 등의 다양한 부족한 점이 있었습니다. 이러한 부족한 점을 메우기 위해서 프롬프트 엔지니어링, 파인튜닝, RAG, Function Calling, LangChain/LangGraph와 같은 기술이 나왔습니다. 이 글에서는 이 5개의 기술에 대해 간단하게 설명만 하고 넘어가며 이후 글에서 더 자세하게 다룰 예정입니다.

 

(1) 프롬프트 엔지니어링(Prompt Engineering): LLM에게 말을 잘 거는 기술로, LLM에게 입력하는 텍스트인 프롬프트를 어떻게 쓰느냐에 따라 결과물의 품질이 완전히 달라집니다.

-> Zero-shot Prompting은 예시없이 바로 요청하는 것으로 정확도가 낮을 수 있습니다. Few-short Prompting은 예시를 보여주고 요청합니다. Few-shot는 LLM에게 패턴을 학습시키는 것이 아닌 지금 당장 어떤 형식으로 답해야하는지 문맥으로 알려주는 것입니다.

# Zero-shot: 예시 없이 바로 요청
"이 리뷰가 긍정인지 부정인지 분류해줘:
 '배송이 너무 느렸어요'"

# Few-shot: 예시를 먼저 보여주고 요청
"긍정 예시: '포장이 예뻐요' → 긍정
 부정 예시: '제품이 불량이에요' → 부정
 이건? '배송이 너무 느렸어요' → ???"

-> Chain of Thought(CoT)는 LLM이 중간 사고 과정을 거치도록 유도하는 기법으로, "단계적으로", "차근차근 생각해서", "왜 그렇게 생각했는지도 설명해서"와 같은 말로 정확도를 높일 수 있습니다.

-> System Prompt란 AI 어시스턴트의 역할, 지침, 제약, 형식등의 LLM의 행동 방식 전체를 사전에 규정합니다. 이때 악의적인 입력으로 System Prompt를 무력화하려는 시도인 Prompt Injection과 같은 보안 공격도 발생합니다.

역할: 너는 법률 전문 AI 어시스턴트야
지침: 항상 한국 법률 기준으로 답해
제약: 확실하지 않으면 '변호사 상담 필요'라고 해
형식: 답변은 핵심 요약 -> 근거 순서로 작성해

 

(2) 파인튜닝(Fine-Tuning): 이미 학습된 LLM을 특정 목적에 맞게 추가 학습시키는 것입니다. 간단하게 흐름을 설명하자면, 기반 모델(GPT, LLaMA, Mistral)을 선택하고 학습 데이터를 준비합니다. 학습 방법(SFT, RLHF, LoRA)을 선택하고, 학습하며 평가한뒤 배포하는 방식입니다. 

-> SFT(Supervised Fine-Tuning)은 가장 기본적인 방법으로, 정답이 있는 데이터 쌍으로 학습시킵니다. 원하는 학습 내용과 관련된 Instruction Dataset을 수천~수만 쌍을 준비하여 학습시켜 해당 내용의 특화된 모델을 완성합니다.

[
  {"input": "파이썬으로 정렬 코드 짜줘",
   "output": "def sort_list(arr):\n    return sorted(arr)"},

  {"input": "이 코드 오류 찾아줘\n for i in range(10",
   "output": "괄호가 닫히지 않았습니다. range(10) → range(10)으로 수정하세요."},
  ...
] #코딩 특화 모델을 만드는 Instruction Dataset 예시

-> RLHF(Reinforcement Learning from Human Feedback, 강화학습 기반 인간 피드백)은 ChatGPT를 가장 ChatGPT답게 만든 기술로, LLM이 같은 질문에 A,B,C를 생성한 뒤 사람의 평가 패턴을 보상 모델(Reward Model)이 학습하고 LLM이 보상 점수를 높이는 방향으로 강화학습하는 즉, 사람이 읽기 좋은 방식으로 자연스럽게 답변할 수 있게 학습됩니다. 

1️⃣ SFT로 기본적인 대화능력을 갖추게 합니다. 이 단계를 생략하게 되면 무엇을 개선해줘야하는지 모르는 상태라 학습이 불안정합니다.

2️⃣ 사람이 직접 모든 답변을 평가할 수는 없기 때문에, 사람의 취향을 대신 학습한 AI를 만들고 그게 바로 보상 모델(Reward Model)입니다.

3️⃣ 보상 모델이 준비되면, 이제 LLM이 스스로 점수를 높이는 방향으로 자신을 개선합니다. 이 과정에 사용되는 알고리즘이 바로 PPO(Proximal Policy Optimization)입니다. 

=> 단점은 사람이 직접 평가해야 하기 때문에 비용이 매우 크고, 보상 모델이 완벽하지 않아도 보상 점수만 높이는 꼼수인 보상 해킹이라는 부작용이 생깁니다. 예로, 사람들이 긴 답변에 높은 점수를 주는 경향이 있다면 길고 장황한 답하는 법을 학습하여 보상점수는 높지만 실제 품질은 낮은 문제가 발생합니다. 이것을 방지하기 위해 KL Divergence 제약을 겁니다. 초기 SFT 모델에서 멀리 벗어나지 못하게 제동을 거는 장치입니다.

=> 최신 모델들의 경우 순수 RLHF보단 보상모델 없이 선호 데이터로 직접학습을 하는 DPO나 사람대신 강력한 AI가 평가하는 RLAIF를 혼합하는 방식을 주로 사용합니다.

 

-> LoRA(Low-Rank Adaptation)은 저비용 파인튜닝의 핵심으로, LLM 전체를 학습시키면 GPU 수백 개가 필요합니다. LoRA는 모델의 일부만 효율적으로 학습합니다. 예를 들면 일반 파인튜닝은 모델 전체 파타미터 약 70억 개를 전부 업데이트 하기 때문에 수백 GB의 메모리를 필요로해 하지만, LoRA는 원본 모델을 건들이지 않고 A,B만 학습하여 수 GB의 메모리만을 필요로해 합니다. 원본 가중치로 A,B만을 학습 시키면 되는 구조인겁니다. 더나아가 QLoRA는 모델을 4bit로 압축해서 일반 소비자용 GPU에서도 파인튜닝을 가능하게 합니다. 

 

Q. LoRA의 작동방식 자세한 설명이 궁급합니다.

A. LoRA를 제대로 이해하기 위해서는 왜 일반 파인튜닝이 비싼가부터를 이해해야합니다. LLM은 내부적으로 거대한 행렬의 집합입니다. LLaMA 7B 모델은 내부에 수천 개의 행렬이 있고, 일반 파인튜닝은 이 행렬들을 조금씩 수정합니다. 이 때 LoRA의 핵심 아이디어는 파인튜닝을 할 때 실제로 바뀌는 정보량은 생각보다 훨씬 적고, 70억 개의 숫자를 다 바꿀 필요없이 변화량 자체가 저차원이라는 것을 적용한 것입니다. 

LoRA 파인튜닝 시각화


(3) RAG(Retrieval-Augmented Generation): LLM이 모르는 정보를 외부에서 검색해서 답변하게 하는 기술입니다. 전체 파이프라인을 크게 보면 문서를 벡터DB에 저장하고, 사용자 질문이 들어왔을 때 그 문서를 기반으로 근거 있는 답변을 출력해냅니다. 문서를 벡터DB로 저장할 때는 문서를 수집하고 문서를 적절히 쪼개는 청킹(Chunking) 단계를 거쳐 각 청크를 숫자 벡터로 변환하는 입베딩을 통해 벡터DB를 저앙합니다. 그 뒤 사용자 질문이 들어왔을 때는 질문 역시 벡터로 변환하는 임베딩 단계를 거쳐 유사도 검색하고 검색된 청크와 질문을 합쳐 컨텍스트를 구성하고 LLM이 답변을 생성합니다.

-> 청킹(Chunking)은 위에서 설명한대로 문서를 LLM이 처리할 수 있는 작은 조각(청크)로 분할합니다. Fixed-Size Chunking의 경우, 고정된 글자로 분할하기 때문에 의미가 중간에 잘려버려 검색 품질이 저하될 수 있습니다. 그래서 Semantic Chunking으로 의미 단위로 분할하게 합니다. 의미가 온전히 유지되기 때문에 검색 품질이 향상됩니다. 

-> 임베딩(Embedding) 단계에서는 문서 청크 임베딩 모델과 질문 임베딩 모델을 동일하게 사용해야합니다. 임베딩 모델은 아래처럼 다양합니다.

OpenAI text-embedding-3-small   → 빠르고 저렴, 성능 좋음
OpenAI text-embedding-3-large   → 더 정확, 비용 높음
HuggingFace BAAI/bge-m3         → 오픈소스, 다국어 강함
HuggingFace jhgan/ko-sroberta   → 한국어 특화

-> 벡터DB는  아래처럼 다양하며 상황에 맞게 사용하면 됩니다.

개발/학습 단계   → Chroma (로컬, 설치 쉬움, 무료)
중간 규모 서비스 → FAISS (Meta 개발, 빠름, 무료)
대규모 프로덕션  → Pinecone / Weaviate (클라우드, 관리 편함)

-> 유사도를 검색할 때는 코사인 유사도를 이용합니다. 코사인 유사도란 두 벡터가 얼마나 같은 방향을 가리키는 지 측정하는 것으로 -1.0(정반대)~1.0(매우 유사)의 값으로 나타냅니다. 상위 3~5개의 청크를 선택하여 프롬프트를 구성해 LLM에게 전달하면 그 프롬프트를 바탕으로 생성된 답변을 제공합니다. 

 

Q. 파인튜닝과 RAG는 위의 설명에 따르면 LLM에 추가정보를 더한다는 점에서 유사해보이는데 어떤 차이를 가지나요?

A. 쉽게 이해하기 위해서 예시를 들어보자면 파인튜닝은 시험 전에 교재를 전부 외워서 시험장에 들어가는 것이고 RAG는 책을 들고 시험장에 들어가는 오픈북 상태인 것입니다. 파인튜닝의 경우 책이 없기 때문에 시험 후에 나오는 내용은 알 수가 없지만 머릿속에 내용이 있고, RAG는 외우지 않고 항상 최신 자료를 참고 가능하지만 책에 없는 내용은 답을 하지 못합니다. 즉, 지식이 어디에 저장되는지에서 큰 차이를 보이며 파인튜닝은 모델 가중치(파라미터) 내부에 저장하며, RAG는 외부 벡터DB에 저장합니다. 

-> 그러기 때문에 실제로는 파인튜닝을 통해 말투/스타일 같은 행동 방식 장체를 변경하고 RAG를 통해 내부에 정보를 넣는 등으로 조합하여 사용하는 것을 권장합니다. (파인튜닝은 어떻게 말하는지를 변화시키고, RAG는 무엇을 알고있는지를 확장시키는 기술입니다.)

728x90