🤗 Hugging Face란 무엇인가요?

허깅페이스(Hugging Face)”라고 하면 왠지 포옹하는 얼굴? 귀엽고 훈훈한 느낌이죠.
실제로 이 회사의 로고도 🤗 이 이모티콘이에요!

하지만 이름이 귀엽다고 얕보지 마세요.
Hugging Face는 세계에서 가장 유명한 AI 모델 공유 플랫폼 중 하나예요.

💡 쉽게 말하면?

Hugging Face는
AI 모델들의 인스타그램 + 깃허브 + 마켓플레이스 같은 거예요.

  • 개발자나 연구자들이 자신이 만든 AI 모델을 올리고
  • 다른 사람들이 그 모델을 가져다 쓸 수 있어요.
  • 텍스트 생성, 번역, 감정 분석, 이미지 분류 등 다양한 AI 모델이 있어요.

예를 들어,

  • 챗봇을 만들고 싶다? → 챗봇용 모델 찾아서 써요!
  • 내가 만든 AI를 자랑하고 싶다? → Hugging Face에 올려요!

🧠 파인튜닝(Fine-tuning)이란?

AI가 처음부터 똑똑하진 않아요.
예를 들어 GPT 같은 모델도 처음엔 수많은 글을 읽고 학습해서 기본 실력을 갖췄어요.

하지만 우리가 원하는 분야, 예를 들어

  • 철도 승객 응대용 AI
  • 의료 상담 봇
  • 법률 상담 AI

이런 것들은 일반적인 AI로는 어려워요.
그래서 **"기존 AI 모델에 약간 더 훈련을 시키는 과정"**이 필요해요.
이게 바로 파인튜닝(Fine-tuning) 입니다!

🎯 비유하자면?

  • GPT는 “전 세계 잡지 다 읽은 사람”
  • 근데 나는 “철도 관련 전문 상담원”이 필요해요
  • 그럼 GPT한테 철도 관련 문서만 다시 학습시켜요 → 그게 파인튜닝!

✨ Hugging Face + 파인튜닝 = AI 개발자들의 축복

Hugging Face는 파인튜닝에 필요한 거의 모든 도구를 제공합니다!

  1. 모델 선택
    🤗 https://huggingface.co/models 에 가서 원하는 모델을 골라요
    (예: bert-base-uncased, gpt2, llama, mistral, 등등)
  2. 데이터 준비
    내가 파인튜닝 시킬 데이터를 준비해요 (예: 질문-답변 형식의 CSV)
  3. Trainer 사용
    Hugging Face의 transformers 라이브러리엔 Trainer라는 강력한 학습 도구가 있어요!

🛠 간단 사용법 예시 (Python)

 

이 부분은 chatgpt 가 보여준대로 올렸는데

나중에 저도 변형해가며 공부해볼 수 있길 바래 봅니다

 

from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset

# 1. 사전학습된 모델과 토크나이저 불러오기
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# 2. 데이터셋 불러오기 (huggingface datasets에서 제공!)
dataset = load_dataset("imdb")  # 영화 리뷰 감성 분석 데이터

# 3. 토큰화 함수 정의
def tokenize(example):
    return tokenizer(example['text'], padding="max_length", truncation=True)

tokenized = dataset.map(tokenize, batched=True)

# 4. 학습 설정
args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
)

# 5. Trainer로 학습!
trainer = Trainer(
    model=model,
    args=args,
    train_dataset=tokenized["train"].shuffle(seed=42).select(range(1000)),  # 일부만 학습
    eval_dataset=tokenized["test"].select(range(500)),
)

trainer.train()

 

🧁 정리하자면?

개념설명
🤗 Hugging Face AI 모델을 공유하고 쓸 수 있는 플랫폼
🧠 파인튜닝 기존 AI 모델을 내 목적에 맞게 추가 학습시키는 과정
🛠 transformers 라이브러리 Hugging Face에서 제공하는 모델 사용 도구
💬 datasets 라이브러리 파인튜닝에 쓸 수 있는 공개 데이터 모음

 

Hugging Face 덕분에 누구나 AI 모델을 찾고, 쓰고, 파인튜닝할 수 있는 시대가 왔어요!

git commit 했는데 이상한 화면이 뜰 때가 있어

-m " 메시지 "  요거 안할 때 메시지 입력하라고 리눅스 편집창이 뜬거야 

다시말하면

git commit할 때 자동으로 열리는 편집기(editor) 때문이야.

 

리눅스 환경에서는 보통 기본 편집기가 nano나 vim이야.

 

🧾 상황 설명 (nano 기준)

  1. git commit 입력 (메시지 없이!)
  2. 아래와 같은 화면이 뜸:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Changes to be committed:
# modified:   example.py
#

 

 

  • 이 상태에서 커밋 메시지를 위에 직접 입력할 수 있음.
  • 다 쓴 다음에 Ctrl + X → Y → Enter 누르면 저장하고 커밋 완료!

✅ 정리

상황설명
git commit -m "메시지" 커밋 메시지를 커맨드라인에서 바로 입력
git commit 메시지 편집기(nano/vim) 열림
Ctrl + X + Y + Enter 메시지 저장 후 커밋 완료
Ctrl + X + N 저장 안 하고 나감 → 커밋 안 됨

 

⚔️ git commit 했더니 vim이 열렸다?! (깜놀)

보통 이런 화면이 나오지:

 
# Please enter the commit message for your changes...
#
# ------------------------ > 여기가 커밋 메시지 작성 영역

🧙‍♂️ vim에서 커밋 메시지 쓰는 방법

1. 입력 모드로 들어가기

  • i 키 누르기
    → 좌측 하단에 -- INSERT -- 표시됨
    → 이제 커밋 메시지를 입력할 수 있음
입력모드가되면 좌측하단에 요렇게 입력모드가 표시돼
 
-- INSERT --
 
 
그럼 여렇게 원하는 로그메시지를 입력하세요
 
feat: 로그인 오류 수정

2. 입력 완료 후 저장하고 종료

  • ESC 키 누르기 → 입력 모드 종료
  • 그런 다음 :wq 입력하고 Enter 누르기

👉 :wq = write(저장) + quit(종료)


⚠️ 저장 안 하고 나가려면?

  • ESC 누르고
  • :q! → Enter

👉 강제 종료 (커밋 안 됨)

 

🎯 요약: vim에서 git commit 메시지 쓰는 법

단계동작설명
1 i 입력 모드 진입
2 메시지 입력 커밋 메시지 작성
3 ESC → :wq → Enter 저장 후 종료 (= 커밋 완료)
4 ESC → :q! → Enter 저장 안 하고 강제 종료 (= 커밋 취소)

 

💡 TIP: 기본 편집기 바꾸고 싶다면?

기본이 nano

불편하면 VSCode나 다른 걸로 바꿀 수 있어:

 
vim 으로 열리는데 nano 로 바꿀 때
 
git config --global core.editor "nano"

 

이렇게 하면 다음부터는 귀여운 nano로 열려.


 VSCode 로 바꿀 때 

 
git config --global core.editor "code --wait"
 

 

🚧 Git Pull 안 될 때 강제로 해결하는 방법

💡 에러 상황 예시

git pull 할 때 이런 메시지 많이 보지?

error: Your local changes to the following files would be overwritten by merge:

로컬에서 수정한 파일이 있는데, pull을 하면 덮어쓰게 되니까 Git이 막는 거야.

 

🛠️ 해결 방법들 (상황별 정리)

 

✅ 1. 그냥 서버에 맞춰 덮어쓰기(Pull 강제 덮어쓰기)

 
git fetch --all git reset --hard origin/main
  • git fetch --all                                       : 최신 변경사항 가져오기
  • git reset --hard origin/main                 : 원격 저장소의 내용을 그대로 덮어쓰기

🔥 이것도 로컬 변경사항 사라지니 꼭 백업하거나 신중하게!

 

✅ 2. 로컬 수정사항 버릴 때 (진짜 깔끔하게 초기화하고 싶을 때)

git reset --hard HEAD git pull
  • git reset --hard HEAD: 현재 브랜치를 마지막 커밋 상태로 강제 초기화 (수정사항 날아감!)
  • git pull: 이후에 문제없이 서버에서 코드 받아옴

⚠️ 수정사항이 완전히 삭제되니 신중하게!

 

✅ 3. 수정사항 백업해두고 pull 하고 싶을 때

 
git stash
git pull
git stash pop
  • git stash: 현재 변경사항을 임시 저장
  • git pull: 서버에서 최신 코드 받아옴
  • git stash pop: 아까 저장해둔 변경사항 복원

안전하게 내 코드도 지키고, pull도 하고! ✨

📌 보너스 팁: 브랜치가 main이 아닌 경우

git reset --hard origin/브랜치이름

 

예를 들어 develop 브랜치라면:      git reset --hard origin/develop

 

📌내 경험상 가장 상위 폴더에서 명령해서해결할 수도 있어

이 경우는 git add 하고싶은데 상위폴더에서 바뀐 파일들이 있어서 못하는 경우였어
예를 들어 가장 상위폴더가 main 이라면

main 폴더로가서

git add .             --->  마지막에 점 있으니 빠뜨리지 않도록 하세요 모두하라는 뜻이에요

git commit -m " add file "

git pull

git push

 

🍣 1. Git & GitHub 개념 설명

✅ Git이란?

  • 버전 관리 시스템이야.
  • 예를 들어 코드가 저장된 스냅샷을 계속 찍어두는 카메라라고 보면 돼.
  • 실수해서 코드 날렸어도, "이전 스냅샷으로 복구!" 가능.
  • 협업할 때도 누가 뭘 바꿨는지 추적 가능해.

🔧 만든 사람: 리누스 토르발즈 (리눅스 만든 그분!)

✅ GitHub란?

  • Git을 클라우드에서 사용할 수 있게 도와주는 웹서비스야.
  • 코드 저장소를 인터넷에 올려두고, 협업할 수 있어.
  • Git은 도구, GitHub는 플랫폼.

🧑‍💻 예: Word는 문서 작성 도구, Google Docs는 문서를 공유하는 플랫폼.
비슷하게 Git은 도구, GitHub는 공유 플랫폼.

🍙 2. 사용 흐름 (혼자 쓰기 기준)

  1. Git 설치
    👉 https://git-scm.com
  2. GitHub 가입
    👉 https://github.com
  3. Git 저장소 만들기
    • 로컬 폴더를 Git 저장소로 만들고 (git init)
    • GitHub에 원격 저장소 만들고 연결해 (git remote add origin ...)
    • 원격저장소를 만들었으면 SSH 설정이나 TOCKEN 설정하고 (그래야 연결이돼)
    • git clone 명령으로 내 컴퓨터와 동기화시켜야되 복제한다는 뜻이야
    • 자세한 설정은 글 올려놨어요

🍤 3. 자주 쓰는 Git 명령어

명령어설명
git init 현재 폴더를 Git 저장소로 초기화
git clone URL GitHub 저장소를 내 컴퓨터로 복제
git status 현재 파일 상태 확인 (수정됨, 추가됨 등)
git add 파일명 커밋할 파일 추가 (스테이징)
git commit -m "메시지" 변경사항 저장 (스냅샷 찍기)
git push origin main 로컬 변경사항을 GitHub에 업로드
git pull origin main GitHub에서 최신 변경사항 받아오기
git log 커밋 히스토리 보기
git branch 브랜치 목록 보기
git checkout -b 브랜치명 새 브랜치 만들고 이동
git merge 브랜치명 브랜치 병합

🧁 4. 한 줄 요약

Git = 버전관리 도구, GitHub = 그걸 인터넷에서 같이 쓰는 서비스
코드를 계속 저장하면서 필요할 때마다 되돌아갈 수 있고, 다른 사람과도 협업할 수 있다.

🧠 with 문이란?

▶️ 정의

리소스를 열고 자동으로 닫아주는 문법
블록(Context)을 벗어나면 알아서 정리/해제(clean-up) 해주는 구조

예:

  • 파일 열고 → 읽고 → 자동으로 닫기
  • DB 연결 열고 → 쿼리 날리고 → 자동 종료
  • Streamlit 폼 열고 → 입력 받고 → 자동 제출 처리

📦 기본 사용 예제

✅ 예시 1: 파일 열기

f = open("data.txt", "r")
try:
    content = f.read()
finally:
    f.close()  # 항상 닫힘

 

💡 with 문은 try-finally를 간단하게 쓰는 방식이에요!

💡 왜 쓰는가?

장점설명
🔐 안전함 에러가 나도 자동으로 리소스를 닫아줌
🧼 깔끔함 코드 구조가 간결하고 명확
✅ 예외 처리 오류가 나도 뒤처리를 자동으로 함
💡 선언형 "무엇을 하고 싶은지"에 집중 가능

 

🧾 Streamlit 예제에서의 with

 

with st.form("signup_form"):
    name = st.text_input("이름")
    email = st.text_input("이메일")
    submitted = st.form_submit_button("가입하기")

 

이 구조는 어떤 의미?

  • st.form("signup_form") 블록 안에서 UI 요소들을 정의
  • 이 form은 버튼을 눌러야 제출(submit) 되도록 구성됨
  • with 문이 끝나는 순간, 내부 구성은 하나의 폼으로 묶이고 처리됨

일반 방식 (즉시 실행됨)

name = st.text_input("이름")

 

with st.form 사용

→ 버튼을 눌러야 값이 반영됨! (폼 제출 구조)

 

결론

with 문 어떤 리소스를 열고, 블록 끝나면 자동으로 정리/닫는 문법
주요 사용처 파일 I/O, DB 연결, 락 처리, Streamlit 폼 등
Streamlit with st.form → 한 번에 UI 구성 + 제출 버튼 제어
핵심장점 에러 방지, 리소스 정리 자동화, 코드 간결화

 

예제와 결과화면 입니다

import streamlit as st
 
st.write("버튼과 성공 메시지 예제")
 
if st.button("데이터 저장"):
    st.success("데이터가 성공적으로 저장되었습니다!")

 

 

import streamlit as st
 
st.write("회원가입 폼")

with st.form("signup_form"):
    name = st.text_input("이름")
    email = st.text_input("이메일")
    submitted = st.form_submit_button("가입하기")

    if submitted:
        st.success(f"{name}님, 가입이 완료되었습니다!")

 

 

'streamlit' 카테고리의 다른 글

streamlit을 이용한 멀티페이지 앱만들기  (0) 2025.04.19

📦 JSON 이란?

👉 정의

JavaScript Object Notation
데이터를 구조화해서 저장하거나 전송할 때 쓰는 가볍고, 읽기 쉬운 데이터 포맷

  • 텍스트 기반
  • 키-값 쌍 ("key": value)
  • 구조화된 데이터 표현에 탁월
  • 거의 모든 언어에서 사용 가능 (Python, JS, Java, Go 등등)

🧠 왜 쓰는가?

  • API 통신 (백엔드 ↔ 프론트엔드, 클라이언트 ↔ 서버)
  • AI 모델과의 입출력 처리 (프롬프트 ↔ 응답 구조화)
  • 데이터 저장 (설정, 로그, 사전 등)
  • 파인튜닝 학습 데이터 포맷 (OpenAI JSONL 등)

🔍 JSON 예제

{
  "name": "홍길동",
  "age": 30,
  "skills": ["Python", "LangChain", "Streamlit"],
  "is_developer": true,
  "profile": {
    "github": "https://github.com/hongdev",
    "location": "Seoul"
  }
}

👉 구성 요소

요소설명
{} 객체 (Object)
[] 배열 (Array)
"key": value 키-값 쌍
문자열 "..." 반드시 큰따옴표
숫자 그냥 숫자 (따옴표 X)
boolean true, false
null 존재하지 않음 표시

🐍 Python에서 JSON 다루기

 

import json

# Python → JSON 문자열
data = {"name": "홍길동", "age": 30}
json_str = json.dumps(data)

# JSON 문자열 → Python 객체
parsed = json.loads(json_str)
print(parsed["name"])  # "홍길동"
print(parsed["age"])

for key, value in parsed.items():
    print(f"{key}: {value}")

 

홍길동
30
name: 홍길동
age: 30

 

 

🧾 OpenAI 파인튜닝용 JSONL

JSONL이란?

  • JSON Lines (JSONL) 형식은 한 줄당 하나의 JSON 객체를 표현하는 형태입니다.
  • 각 줄은 독립된 데이터로 존재하며, 대량의 데이터 처리에 유용합니다.
  • 데이터가 많아지더라도 한 줄씩 읽고 처리할 수 있어 효율적입니다.

{"messages": [{"role": "user", "content": "파인튜닝이 뭐야?"}, {"role": "assistant", "content": "기존 모델을 추가 학습시키는 거야!"}]}
{"messages": [{"role": "user", "content": "LangChain이 뭐야?"}, {"role": "assistant", "content": "LLM을 체계적으로 조립하는 프레임워크야."}]}

 

첫번째줄만 설명할께요

 

{
  "messages": [
    { "role": "user", "content": "파인튜닝이 뭐야?" },
    { "role": "assistant", "content": "기존 모델을 추가 학습시키는 거야!" }
  ]
}

 

messages: 대화 기록을 담는 배열.

  • { "role": "user", "content": "파인튜닝이 뭐야?" }
    • role: 발화자의 역할 (user).
    • content: 사용자가 질문한 내용.
  • { "role": "assistant", "content": "기존 모델을 추가 학습시키는 거야!" }
    • role: 응답자의 역할 (assistant).
    • content: 모델이 답변한 내용.

⚠️ JSON 쓸 때 주의사항

  • key는 반드시 쌍따옴표
  • 끝에 쉼표(,) 붙이면 안 됨
  • Python의 dict와 유사하지만 완전히 같지는 않음
  • JSON은 기본적으로 문자열 → 사용 전 파싱 필요!

🔮 JSON의 활용 전망

분야JSON 역할
🔗 API REST API 응답/요청 포맷
🤖 AI 프롬프트, 함수 호출, 파인튜닝 등
🧠 LangChain Agent → Tool 간 메시지 전달
🧾 설정파일 .json 기반 config (VS Code, ESLint 등)
📊 데이터 로그 저장, 대시보드 연결 등

🤖 AI 에이전트(AI Agent)란?

📌 정의

사용자의 목표를 달성하기 위해 스스로 계획하고, 필요한 도구를 사용하고, 상황에 맞춰 행동을 반복하는 LLM 기반 시스템

한마디로 요약하면
➡️ “일 시키면 알아서 해주는 AI 비서”

 

🧠 핵심 개념

구성 요소설명
🎯 목표 사용자가 원하는 바 (예: "주간 리포트 작성해줘")
🧠 LLM 에이전트의 두뇌 역할 (생각 + 판단)
🧰 툴(Tools) 계산기, 웹 검색, API 호출 등 작업 도구
📚 메모리(Memory) 대화 맥락/과거 행동 기억
🧩 플래너(Planner) 복잡한 목표를 단계별로 나눠 실행 계획 수립

예: 이메일 → 요약 → 회신 작성 → 캘린더 등록까지 자동으로 수행!

 

🕹️ 작동 방식

Loop 구조 (ReAct / LangChain Agent 방식)

  1. 생각(Thought): 지금 무슨 작업이 필요한지 판단
  2. 행동(Action): 툴 호출, API 실행
  3. 관찰(Observation): 결과 확인
  4. 반복: 다음 행동 결정
  5. 최종 응답 생성

이게 인간의 사고와 굉장히 유사해요!
→ **"AI가 직접 문제를 풀어가는 과정"**이 생긴 거죠.

 

🌐 주요 프레임워크

프레임워크특징
🛠 LangChain Agents 다양한 도구/메모리 조합 가능
🧠 OpenAI Assistants API 함수 자동 호출 + 메시지 관리
🤯 AutoGPT / BabyAGI 자율 실행형, 스스로 목표 달성
🧩 CrewAI 역할 기반 멀티 에이전트 협업
🧭 MetaGPT, Camel, HuggingGPT 리서치 기반 고급 구조 실험용

 

💡 활용 사례

분야에이전트 예시
🛍 전자상거래 고객 문의 자동 처리 → 재고 확인 → 환불 요청
📈 리서치 뉴스 검색 → 요약 → 인사이트 도출
📅 비서 일정 확인 → 회의 시간 제안 → 참석자 메일 발송
🧑‍💻 개발 버그 리포트 분석 → 코드 수정 제안
🧾 세무 영수증 정리 → 분류 → 세금 계산 → 리포트 생성
🧑‍⚕️ 헬스케어 증상 분석 → 문진 요약 → 처방 추천

🌟 장점

✅ 복잡한 작업도 자동화
✅ "프롬프트만으로 해결 불가능"한 문제 해결
✅ 사용자 의도에 따른 유연한 행동 가능
✅ 다양한 도구를 상황에 맞게 선택/활용 가능
✅ 대화형 UX를 넘어 "업무형 UX"로 확장 가능

'생성형AI프로그래밍' 카테고리의 다른 글

Hugging Face 와 Fine-tuning  (0) 2025.04.20
JSON 에 대해 알아보기  (1) 2025.04.20
파인튜닝 개념  (0) 2025.04.19
VectorDB 와 청크(Chunk) 에 대하여  (0) 2025.04.19
RAG 에 대해서  (0) 2025.04.19

💡 파인튜닝(Fine-tuning)이란?

기존에 학습된 기성 LLM 모델을 기반으로
특정 목적/도메인에 맞게 추가 학습하는 과정

🎯 목적

  • 특정 말투, 문체, 브랜드톤 적용
  • 전용 데이터셋(법률, 의료, 사내 문서 등) 반영
  • 특화된 태스크에 더 뛰어난 성능 발휘

🤖 파인튜닝 vs 프롬프트 엔지니어링 vs RAG

방법                    설명                                            장점                                                      단점

 

프롬프트 지시만 잘 써서 활용 빠르고 간단 복잡한 행동 학습 어려움
RAG 외부 DB 검색 + LLM 최신 정보 반영 가능 구현 복잡, DB 필요
파인튜닝 LLM 자체를 재학습 완전히 커스터마이징 가능 시간/비용 많이 듦

🧠 어떤 상황에서 파인튜닝이 적절할까?

✅ 같은 질문에도 항상 동일한 말투, 어조, 형식을 원할 때
✅ 일반 모델로는 이해 못하는 전문 도메인 단어/지식이 있을 때
✅ LLM을 특정 업무에 특화시키고 싶을 때

 

📌 파인튜닝 vs 커스텀지시문

방법                             설명                                                                      추천 상황

 

커스텀 지시문 "너는 ~한 챗봇이다" 같은 초기 세팅 말투, 간단한 스타일 변경
파인튜닝 수천 개의 Q&A 쌍으로 직접 학습 업무 자동화, 고정된 응답, 도메인 학습

 

💡 파인튜닝 시 꿀팁

  • 100~1000 샘플 정도만 있어도 의미 있는 개선 가능
  • 너무 많은 system 메시지 or 너무 긴 문장은 피하기
  • 데이터는 일관성이 생명! (톤, 포맷, 말투 등)

🎯 실전 응용 예시

분야적용 사례
🛍 이커머스 자사 제품에 특화된 고객상담 챗봇
🧾 회계 회계 문서 요약 & 분석 챗봇
⚖️ 법률 판례/조항 기반 응답 톤 정제
📞 콜센터 상황별 대응 매뉴얼 학습
✍️ 작문 특정 작가 스타일 따라 쓰기

 

'생성형AI프로그래밍' 카테고리의 다른 글

JSON 에 대해 알아보기  (1) 2025.04.20
AI 에이전트란 ?  (1) 2025.04.19
VectorDB 와 청크(Chunk) 에 대하여  (0) 2025.04.19
RAG 에 대해서  (0) 2025.04.19
OpenAI API 연동  (2) 2025.04.19

💡 벡터 DB란?

📌 개념 요약

"문장이나 문서를 수치화한 벡터를 저장하고, 유사한 벡터를 빠르게 찾을 수 있도록 도와주는 데이터베이스"

  • 문장을 **숫자의 배열 (벡터)**로 바꾼 뒤,
  • 유사한 문장을 거리 기반으로 빠르게 검색

💬 예시

"반품 정책 알려줘요" → [0.12, -0.45, 0.89, ...]
"환불 어떻게 해요?" → 유사한 벡터 → 관련 문서 매칭됨!

🧠 원리 (어떻게 작동하는가)

  1. Embedding 모델로 텍스트 → 벡터 변환
    → 예: OpenAI Embeddings, BERT, Cohere 등
  2. 벡터를 저장
    → FAISS, Chroma, Weaviate, Pinecone 등이 사용됨
  3. 쿼리도 벡터화
    → 기존 벡터들과 코사인 유사도 같은 기준으로 유사한 것 검색

🧭 결국, 문장 간의 의미 기반 검색이 가능해짐!

 

🔧 사용법 (LangChain + FAISS 예시)

# 1. 문서 불러오기
from langchain.document_loaders import TextLoader
docs = TextLoader("data.txt").load()

# 2. 청크 나누기
from langchain.text_splitter import CharacterTextSplitter
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 3. 벡터 DB 저장
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
db = FAISS.from_documents(chunks, OpenAIEmbeddings())

# 4. 검색 쿼리 실행
query = "환불 절차 알려줘"
docs = db.similarity_search(query, k=3)
for doc in docs:
    print(doc.page_content)

🔍 청크 (Chunk)란?

큰 문서를 작은 조각(청크)으로 나누는 작업이에요.

왜 필요하냐고요?
🤖 LLM은 긴 텍스트를 한 번에 다 못 읽습니다!
그래서 적당히 자르고 검색에 사용해야 해요.

✂️ 청크의 구성

  • chunk_size: 각 조각의 최대 글자 수 (예: 500자)
  • chunk_overlap: 겹치는 부분 길이 (예: 50자 → 맥락 유지)

splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)

📋 예시

문서 내용나뉜 청크
"안녕하세요. 반품 정책은 다음과 같습니다..." → 청크 1: "안녕하세요. 반품 정책은 다..."
→ 청크 2: "정책은 다음과 같습니다..."

🧠 정리 요약

개념설명
🧊 벡터DB 문장을 숫자 배열로 저장하고, 의미 유사도 기반으로 검색
🧠 Embedding 문장을 벡터로 변환하는 기술
✂️ 청크 긴 문서를 일정 길이로 나눈 텍스트 조각
🔍 유사도 검색 코사인 유사도 등으로 가장 가까운 문장 찾기
🔄 RAG의 핵심 유저 질문 → 벡터화 → 벡터DB에서 유사 문장 검색 → LLM에 전달

🛠 벡터 DB 종류 비교

DB특징
FAISS Meta 개발, 로컬에서 빠름, 경량
Chroma 파이썬 친화적, LangChain 통합 잘 됨
Pinecone SaaS 기반, 확장성 좋음
Weaviate Graph + 벡터, REST API 지원

🤖 실전 팁

  • 청크 크기는 300~1000 글자 사이에서 조정
  • 청크 오버랩은 맥락 유지 위해 10~100 사이 권장
  • 벡터DB는 되도록 미리 저장해두고 재사용

'생성형AI프로그래밍' 카테고리의 다른 글

AI 에이전트란 ?  (1) 2025.04.19
파인튜닝 개념  (0) 2025.04.19
RAG 에 대해서  (0) 2025.04.19
OpenAI API 연동  (2) 2025.04.19
생성형AI 개발자는 무얼하는 사람인가요  (0) 2025.04.16

+ Recent posts