πŸ“š Insurance RAG ν•™μŠ΅ μ„Έμ…˜ 2 μ™„λ£Œ λ³΄κ³ μ„œ

문건희·2025λ…„ 7μ›” 31일

🎯 μ„Έμ…˜ κ°œμš”

μ„Έμ…˜λͺ…: Insurance RAG ν•™μŠ΅ μ§€μΉ¨ (μ„Έμ…˜2 μˆ˜μ •μ™„λ£ŒνŒ)
μ§„ν–‰ 방식: AI κ°€μ΄λ“œ & λ©˜ν† λ§ + κΉŠμ΄μžˆλŠ” κ°œλ… μ„€λͺ…
κΈ°μ€€ μ½”λ“œ: /Users/moon/Desktop/insupanda-rag/ ꡬ쑰 μ°Έμ‘°
ν•™μŠ΅ 원칙: κΈ°μ‘΄ μ½”λ“œ μ°Έμ‘° β†’ κ°œλ… μ„€λͺ… β†’ μ‹€μŠ΅ μ•ˆλ‚΄ β†’ μ™„λ£Œ 확인

βœ… μ™„λ£Œλœ ν•™μŠ΅ λ‚΄μš©
1단계: ν”„λ‘œμ νŠΈ ꡬ쑰 이해
κ°œλ… ν•™μŠ΅:

RAG(Retrieval-Augmented Generation): 검색 ν›„ λ‹΅λ³€ 생성 기술

λ„μ„œκ΄€ μ‚¬μ„œμ²˜λŸΌ κ΄€λ ¨ λ¬Έμ„œλ₯Ό λ¨Όμ € μ°Ύκ³  λ‹΅λ³€ 생성
μ™Έμš΄ λ‚΄μš©λ³΄λ‹€ μ‹€μ œ λ¬Έμ„œ 참쑰둜 더 μ •ν™•ν•œ λ‹΅λ³€ 제곡

κΈ°μ‘΄ μ½”λ“œ 뢄석:
πŸ“ insupanda-rag/src/
β”œβ”€β”€ config/ # μ„€μ • 관리 (logger.py, settings.py)
β”œβ”€β”€ db/ # λ°μ΄ν„°λ² μ΄μŠ€ (schema.py, sql_utils.py)
β”œβ”€β”€ models/ # RAG 핡심 λͺ¨λ“ˆ (μž„λ² λ”©, 검색, 닡변생성)
β”œβ”€β”€ modules/ # 메인 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (handler.py, user_state.py)
β”œβ”€β”€ options/ # νƒ€μž… μ •μ˜ (enums.py, insu_name.py)
β”œβ”€β”€ prompts/ # AI ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ (.jinja2 νŒŒμΌλ“€)
β”œβ”€β”€ services/ # λΉ„μ¦ˆλ‹ˆμŠ€ μ„œλΉ„μŠ€ 둜직
└── util/ # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ“€
2단계: ν”„λ‘œμ νŠΈ κΈ°λ³Έ ꡬ쑰 생성
μ€‘μš”ν•œ 배움 - λͺ…λ Ήμ–΄ νš¨μœ¨μ„±:

❌ 잘λͺ»λœ 방식: mkdir -pλ₯Ό κ°œλ³„μ μœΌλ‘œ μ—¬λŸ¬ 번 μ‚¬μš©
βœ… μ˜¬λ°”λ₯Έ 방식: mkdir -p src/{config,db,models,modules,options,prompts,services,util} tests

κ°œλ… ν•™μŠ΅:

mkdir -p: parent directories μ˜΅μ…˜μœΌλ‘œ 쀑간 ν΄λ”κΉŒμ§€ ν•œ λ²ˆμ— 생성
μ€‘κ΄„ν˜Έ {} 문법: μ‰˜μ—μ„œ μ—¬λŸ¬ 이름을 ν•œ λ²ˆμ— λ‚˜μ—΄ν•˜λŠ” 방법

μ‹€ν–‰ λͺ…λ Ήμ–΄:
bashcd /Users/moon/Desktop
mkdir insurance-rag-learning
cd insurance-rag-learning
mkdir -p src/{config,db,models,modules,options,prompts,services,util} tests
3단계: Python νŒ¨ν‚€μ§€ μ΄ˆκΈ°ν™”
κ°œλ… ν•™μŠ΅:

Python νŒ¨ν‚€μ§€: init.py 파일둜 폴더λ₯Ό Python이 인식할 수 μžˆλŠ” νŒ¨ν‚€μ§€λ‘œ λ³€ν™˜
import μ‹œμŠ€ν…œ: from src.config import settings 같은 μ½”λ“œ import κ°€λŠ₯

κΈ°μ‘΄ μ½”λ“œ μ°Έμ‘°:

insupanda-rag에 총 7개의 init.py 파일 확인
λͺ¨λ“  μ£Όμš” 폴더에 νŒ¨ν‚€μ§€ μ΄ˆκΈ°ν™” 파일 쑴재

μ‹€ν–‰ λͺ…λ Ήμ–΄:
bashtouch src/init.py src/config/init.py src/db/init.py src/models/init.py src/modules/init.py src/options/init.py src/prompts/init.py src/services/init.py src/util/init.py tests/init.py
문제 ν•΄κ²°:

λΆˆν•„μš”ν•œ src/api/ 폴더 발견 및 μ‚­μ œ
rm -rf src/api λͺ…λ Ήμ–΄λ‘œ 정리

4단계: ν™˜κ²½λ³€μˆ˜ μ„€μ • 파일 (μ§„ν–‰ 쀑)
κ°œλ… ν•™μŠ΅:

ν™˜κ²½λ³€μˆ˜: ν”„λ‘œκ·Έλž¨ 섀정값을 μ½”λ“œ 외뢀에 μ•ˆμ „ν•˜κ²Œ μ €μž₯
λ³΄μ•ˆμ„±: API ν‚€, λΉ„λ°€λ²ˆν˜Έ λ“± 민감 정보λ₯Ό μ½”λ“œμ— 직접 λ…ΈμΆœν•˜μ§€ μ•ŠμŒ
μœ μ—°μ„±: 개발/ν…ŒμŠ€νŠΈ/운영 ν™˜κ²½λ³„λ‘œ λ‹€λ₯Έ μ„€μ • μ‚¬μš© κ°€λŠ₯

κΈ°μ‘΄ μ½”λ“œ μ°Έμ‘°:

src/.test.env 파일 발견
λ‚΄μš©: DB_PASSWORD, OPENAI_API_KEY, UPSTAGE_API_KEY μ„€μ •

πŸ”§ ν•™μŠ΅ν•œ μ£Όμš” 기술 κ°œλ…
Python κ΄€λ ¨

Pydantic: 데이터 검증을 μ‰½κ²Œ ν•΄μ£ΌλŠ” 라이브러리 (μ„€μ •κ°’ νƒ€μž… μžλ™ 체크)
ν™˜κ²½λ³€μˆ˜: μš΄μ˜μ²΄μ œμ— μ €μž₯된 μ„€μ •κ°’ (민감 정보 별도 보관)
λ‘œκΉ…: ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μΌμ–΄λ‚˜λŠ” 일듀을 기둝 (μ—λŸ¬ 찾기와 디버깅에 ν•„μˆ˜)

RAG κ΄€λ ¨

μž„λ² λ”©: ν…μŠ€νŠΈλ₯Ό 숫자 λ²‘ν„°λ‘œ λ³€ν™˜ (컴퓨터가 의미 이해 κ°€λŠ₯)
벑터 검색: μ˜λ―Έκ°€ λΉ„μŠ·ν•œ λ¬Έμ„œλ₯Ό μ°ΎλŠ” 기술 (ν‚€μ›Œλ“œ 검색보닀 λ˜‘λ˜‘ν•¨)
ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ: AIμ—κ²Œ μ§ˆλ¬Έν•˜λŠ” μ •ν•΄μ§„ ν˜•μ‹

터미널 λͺ…λ Ήμ–΄

mkdir -p: 폴더 생성 (쀑간 폴더도 ν•¨κ»˜ 생성)
touch: 빈 파일 생성
rm -rf: 폴더와 λ‚΄μš© μ™„μ „ μ‚­μ œ
find: 파일 검색

πŸ“Š μƒμ„±λœ ν”„λ‘œμ νŠΈ ꡬ쑰
μ΅œμ’… 폴더 ꡬ쑰
πŸ“ insurance-rag-learning/
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ init.py
β”‚ β”œβ”€β”€ config/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ db/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ models/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ modules/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ options/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ prompts/
β”‚ β”‚ └── init.py
β”‚ β”œβ”€β”€ services/
β”‚ β”‚ └── init.py
β”‚ └── util/
β”‚ └── init.py
└── tests/
└── init.py
μƒμ„±λœ 파일 λͺ©λ‘

총 10개의 init.py 파일
κΈ°μ‘΄ insupanda-rag와 μ •ν™•νžˆ λ™μΌν•œ ꡬ쑰

πŸŽ“ μ€‘μš”ν•œ ν•™μŠ΅ 원칙
AI μ—­ν• 

βœ… κ°œλ… μ„€λͺ… + κΈ°μ‘΄ μ½”λ“œ μ°Έμ‘° + μ‹€μŠ΅ μ•ˆλ‚΄
βœ… λͺ¨λ“  기술 μš©μ–΄ 초보자용 μ„€λͺ… 제곡
❌ 직접 파일 μƒμ„±μ΄λ‚˜ μ½”λ“œ μž‘μ„± κΈˆμ§€

ν•™μŠ΅μž μ—­ν• 

βœ… 터미널 λͺ…λ Ήμ–΄ 직접 μ‹€ν–‰
βœ… Cursorμ—μ„œ 파일/μ½”λ“œ 직접 μž‘μ„±
βœ… 이해 μ•ˆλ˜λŠ” κ°œλ… μ¦‰μ‹œ 질문

νš¨μœ¨μ„± 원칙

λͺ…λ Ήμ–΄ μ„€λͺ… μ‹œ κ°€μž₯ 효율적인 방법을 λ¨Όμ € μ œμ‹œ
ν”„λ‘œ κ°œλ°œμžκ°€ μ‚¬μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ°”λ‘œ μ•ˆλ‚΄
λΉ„νš¨μœ¨μ  방법 β†’ μˆ˜μ •ν•˜λŠ” νŒ¨ν„΄ μ§€μ–‘

0개의 λŒ“κΈ€