미션14 1팀 박시찬
[미션] 2024년 연말정산 가이드…, 가이드코드 중심의 LLM 실험에서 직접 따라간 구현 흐름과 코드 증거를 다시 볼 수 있게 정리한 LLM 학습 기록입니다. 본문은 [미션] 2024년 연말정산 가이드…, 가이드코드, [Final Report] 2024… 순서로 핵심 장면을 먼저 훑고, 구글 드라이브 마운트, 가이드코드 같은 코드로 실제 구현을 이어서 확인할 수 있습니다. ipynb/md 원본과 19개 코드 블록, 13개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 google, langchain_community, os, random입니다.
빠르게 볼 수 있는 포인트: [미션] 2024년 연말정산 가이드 RAG 시스템 구축, 가이드코드, [Final Report] 2024년 연말정산 지능형 QA 시스템 구축….
남겨둔 자료: ipynb/md 원본과 19개 코드 블록, 13개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 google, langchain_community, os, random입니다.
주요 스택: google, langchain_community, os, random, numpy
Snapshot
| Item | Value |
|---|---|
| Track | LLM |
| Type | Mission |
| Source Files | ipynb, md |
| Code Blocks | 19 |
| Execution Cells | 13 |
| Libraries | google, langchain_community, os, random, numpy, torch, transformers, langchain |
| Source Note | 미션14_1팀_박시찬 |
What This Note Covers
[미션] 2024년 연말정산 가이드 RAG 시스템 구축
미션 소개 LLM이 외부 문서의 정보를 참고하여 답변할 수 있도록 RAG(Retrieval-Augmented Generation)를 구현하는 프로젝트입니다. LangChain 프레임워크를 사용하여, 2024년 국세청 연말정산 안내 문서를 기반으로 사용자의 질문에 정확하게 답변하는 시스템을 구축합니다. 사용 데이터셋 * 데이터: 국세청…
- 읽을 포인트: 검색과 컨텍스트 주입 단계를 실제 코드로 묶어 보는 구간입니다.
가이드코드
문서 파일 불러오기 Vector DB에 저장
- 읽을 포인트: 가이드코드 아래 코드와 함께 읽으면 구현 포인트가 더 또렷해지는 구간입니다.
[Final Report] 2024년 연말정산 지능형 QA 시스템 구축 결과 보고서
작성자: [팀명/성함] 프로젝트 기간: 202X.XX.XX ~ 202X.XX.XX 환경: Google Colab (T4 GPU), LangChain, HuggingFace 프로젝트 개요 (Executive Summary)
- 읽을 포인트: 실험 조건을 바꾸고 지표를 비교하며 어떤 설정이 맞는지 확인하는 구간입니다.
Why This Matters
RAG 검색 파이프라인
- 왜 필요한가: LLM이 외부 지식을 안정적으로 참조하게 하려면, 생성 전에 관련 문서를 정확히 찾아오는 검색 단계가 먼저 필요합니다.
- 왜 이 방식을 쓰는가: 이 방식은 모델 파라미터만 믿지 않고 최신 문서나 도메인 지식을 붙일 수 있어서 실제 서비스형 QA에 적합합니다.
- 원리: 문서를 청크로 나누고 임베딩한 뒤, 질문과 가까운 벡터를 검색해 프롬프트에 함께 넣는 구조로 동작합니다.
에이전트 상태 흐름
- 왜 필요한가: 단일 호출만으로 해결되지 않는 작업은 추론, 도구 호출, 중간 상태 관리가 이어지는 흐름 제어가 필요합니다.
- 왜 이 방식을 쓰는가: 상태 그래프 기반 접근은 단계별 분기와 재시도를 명시적으로 관리할 수 있어 에이전트 실험을 설명하기 좋습니다.
- 원리: 현재 상태를 노드 간에 전달하면서, 조건에 따라 다음 노드나 도구 호출을 결정하는 방식으로 실행 흐름이 이어집니다.
임베딩과 표현 학습
- 왜 필요한가: 텍스트나 토큰을 그대로는 모델이 다룰 수 없기 때문에, 의미를 담은 수치 벡터 표현으로 바꾸는 단계가 필요합니다.
- 왜 이 방식을 쓰는가: Word2Vec, FastText, GloVe 같은 방식은 같은 단어라도 주변 문맥이나 서브워드 정보를 반영해 비교 가능한 표현 공간을 만듭니다.
- 원리: 자주 함께 등장하는 단어는 가까운 벡터가 되도록 학습해, 의미적으로 비슷한 표현이 공간에서도 가까워지게 합니다.
Implementation Flow
- [미션] 2024년 연말정산 가이드 RAG 시스템 구축: 미션 소개 LLM이 외부 문서의 정보를 참고하여 답변할 수 있도록 RAG(Retrieval-Augmented Generation)를 구현하는 프로젝트입니다. LangChain 프레임워크를 사용하여, 2024…
- 가이드코드: 문서 파일 불러오기 Vector DB에 저장
- [Final Report] 2024년 연말정산 지능형 QA 시스템 구축 결과 보고서: 작성자: [팀명/성함] 프로젝트 기간: 202X.XX.XX ~ 202X.XX.XX 환경: Google Colab (T4 GPU), LangChain, HuggingFace 프로젝…
Code Highlights
구글 드라이브 마운트
구글 드라이브 마운트는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 ==========================================, PHASE 0. 실험 설계 및 환경 제어 (Implementation) 흐름이 주석과 함께 드러납니다.
# ==========================================
# PHASE 0. 실험 설계 및 환경 제어 (Implementation)
# ==========================================
import os
import random
import numpy as np
import torch
import transformers
import langchain
# ------------------------------------------
# 0-1. 통제 변수 설정 (Random Seed Fixation)
# ------------------------------------------
def set_seed(seed=42):
"""
실험의 재현성(Reproducibility)을 위해 모든 난수 생성기의 시드를 고정합니다.
"""
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed) # Multi-GPU 사용 시
# CuDNN 결정론적 옵션 (속도는 약간 느려질 수 있으나 재현성 확보됨)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
# ... trimmed ...
구글 드라이브 마운트
구글 드라이브 마운트는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 ==========================================, PHASE 1. 데이터 파이프라인 및 위생 처리 (Implementation) 흐름이 주석과 함께 드러납니다.
# ==========================================
# PHASE 1. 데이터 파이프라인 및 위생 처리 (Implementation)
# ==========================================
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.docstore.in_memory import InMemoryDocstore
import faiss
import time
import torch
# ⚠️ [USER CHECK] 사용하실 PDF 파일 경로를 여기에 정확히 입력하세요.
# 같은 폴더에 있다면 "2024.pdf"만 적으셔도 됩니다.
FILE_PATH = "2024.pdf"
# ------------------------------------------
# 1-1. 문서 로드 및 무결성 검증 (Extract)
# ------------------------------------------
print(f"🔄 [1-1] Loading Document from '{FILE_PATH}'...")
try:
loader = PyPDFLoader(FILE_PATH)
pages = loader.load() # 전체 로드
# ✅ Sanity Check: 데이터가 비어있지 않은지 확인
assert len(pages) > 0, "❌ 문서가 비어있거나 로드되지 않았습니다."
# ... trimmed ...
구글 드라이브 마운트
구글 드라이브 마운트는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 ==========================================, PHASE 2. 생성 모델 엔지니어링 (Implementation) 흐름이 주석과 함께 드러납니다.
# ==========================================
# PHASE 2. 생성 모델 엔지니어링 (Implementation)
# ==========================================
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
from langchain_huggingface import ChatHuggingFace, HuggingFacePipeline
import gc
# ------------------------------------------
# [중요] 메모리 청소 (VRAM 확보)
# ------------------------------------------
# PHASE 1에서 임베딩 모델이 GPU 메모리를 먹고 있으므로,
# LLM 로드 전에 최대한 비워줘야 합니다.
gc.collect()
torch.cuda.empty_cache()
print(f"🧹 Memory Cleared. Current Allocated: {torch.cuda.memory_allocated(0) / 1e9:.2f} GB")
# ------------------------------------------
# 2-1. LLM 경량화 및 로드 (4-bit Quantization)
# ------------------------------------------
print("\n🔄 [2-1] Loading LLM with 4-bit Quantization...")
# [모델 선택 전략: VRAM 6GB 대응]
# KULLM3(10B+) -> 불가능 (OOM)
# Llama-3-Ko-8B -> 매우 위험 (OOM 가능성 높음)
# Recommendation: Llama-3.2-Korean-Bllossom-AICA-5B (안전하고 성능 좋음)
# ... trimmed ...
가이드코드
가이드코드는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 language_model_name = “Bllossom/llama-3.2-Korean-… 흐름이 주석과 함께 드러납니다.
from langchain_huggingface import ChatHuggingFace, HuggingFacePipeline
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
import torch
language_model_name = "nlpai-lab/KULLM3"
# language_model_name = "Bllossom/llama-3.2-Korean-Bllossom-AICA-5B"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
llm_int8_enable_fp32_cpu_offload=True,
)
model = AutoModelForCausalLM.from_pretrained(
language_model_name,
quantization_config=bnb_config,
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(language_model_name)
Source Bundle
- Source path:
13_LLM_GenAI/Code_Snippets/미션14_1팀_박시찬.md - Source formats:
ipynb,md - Companion files:
미션14_1팀_박시찬.ipynb,미션14_1팀_박시찬.md - Note type:
code-note - Last updated in the source vault:
2026-03-08T03:33:14 - Related notes:
13_LLM_code_Roadmap.md,13_LLM_GenAI_Code_Summary.md - External references:
www.nts.go.kr,localhost
Note Preview
- 미션 소개 LLM이 외부 문서의 정보를 참고하여 답변할 수 있도록 RAG(Retrieval-Augmented Generation)를 구현하는 프로젝트입니다. LangChain 프레임워크를 사용하여, 2024년 국세청 연말정산 안내 문서를 기반으로 사용자의 질문에 정확하게 답변하는 시스템을 구축합니다.
- 사용 데이터셋 * 데이터: 국세청 발간 [2024년 연말정산 신고 안내] * 내용: 연말정산 절차, 공제 항목, 유의사항, 2024년 개정 세법 등 * 목표: 텍스트에 포함된 세법 정보와 절차를 LLM이 이해하고 참조할 수 있도록 처리