Index
보안 문제 및 API 개념
LLM을 사용할 때의 데이터 보안 문제
- 개인 정보 보호: 민감한 정보 저장과 제3자 공유 문제
- 데이터 저장 및 전송: 암호화된 전송 방식 필요
- 모델 학습 데이터: 예기치 않게 민감 정보 노출 가능성
보안을 강화하는 방법
- 민감 정보 필터링: 자동 필터 시스템 구축
- 암호화: 데이터 저장 및 전송시 암호화 적용
- 데이터 저장 최소화: 필요 이상 데이터 저장 금지
- 접근 통제: 권한과 데이터 접근 제한
API의 기본 개념
- 클라이언트-서버 모델: 요청과 응답 구조
- HTTP/HTTPS 프로토콜: 주로 사용되는 통신 방식
- RESTful API: 엔드포인트와 HTTP 메소드 사용
**
벡터 DB와 LangChain 활용하기
- 벡터 DB: 임베딩 벡터 저장과 유사 데이터 탐색
- LangChain: LLM과 벡터 DB를 연결, 호출 간편화
LLM + 벡터 DB + LangChain 구축 플로우
Text data -> LLM -> Embedding -> Vector -> -- Vector DB --
Text input -> LLM -> Embedding -> Vector -> |유사한 Vector 검색|
Text oupit <- LLM <- 답변 생성 <- Vector 선택 <- ----------------
Vector DB 개념
Vector DB
- 데이터를 벡터로 저장하고, 유사한 벡터 간의 검색을 지원하는 데이터베이스
- 일반적인 데이터베이스는 정확한 일치 검색을 지원, Vector DB는 유사성 검색 가능
Embedding
- 텍스트나 이미지를 벡터화하여 특징을 수치로 표현
- 유사도를 계산해 관련성이 높은 항목 검색
Faiss
- Facebook AI Research에서 개발한 벡터 검색 엔진
- 대규모 벡터의 빠른 검색과 유사도 계산 가능
RAG (Retrieval-Augmented Generation) 개념
- LLM과 검색 시스템을 결합하여 외부 검색을 통해 문제 해결
- 최신 정보를 포함한 답변 제공에 유리
RAG의 동작 원리
- 검색 단계: 질문을 벡터로 변환, 유사한 문서 검색
- 생성 단계: 문서를 기반으로 자연스러운 답변 생성
Vector DB와 RAG의 결합
- Vector DB는 유사 문서 검색
- RAG는 검색 문서 기반으로 답변 생성
텍스트 처리와 임베딩
필요성
- 데이터 품질 향상과 모델 성능 향상에 필수적
- 모델이 이해 및 처리 가능한 형태로 자연어의 복잡성과 다양성을 구조화하고 정제
텍스트 처리의 목표
- 노이즈 제거: 불필요한 정보 제거로 정확한 분석 지원
- 일관성 확보: 문장 구조와 형태의 일관성을 유지
- 효율적인 처리: 중요 정보 유지로 빠른 처리 가능
주요 텍스트 처리 기법
- Tokenization: 텍스트를 단어 또는 서브워드로 나누기
- Normalization: 대소문자와 특수문자 처리
- Stopword 정보가 없는 단어 제거
- 형태소 분석(Morphological Analysis): 한국어 형태소 추출
- Lemmatization: 기본형으로 변환
- 문장 분리 및 길이 조정: 문장 분할과 길이 조정
임베딩 기법
- Bag of Words (BoW): 단어 빈도 기반 단순 벡터화
- TF-IDF: 단어 중요도를 고려한 임베딩
- Word2Vec, GloVe: 의미적 유사성 반영
- Transformer 기반 임베딩 (BERT, GPT): 문맥 고려한 깊이 있는 임베딩 생성
예시
pip install sentence-transformers
: transformers 라이브러리 임베딩 모듈
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer('intfloat/multilingual-e5-large')
sentences = [
"유쾌한 사람에게는 유쾌한 사람이 온다.",
"불쾌한 사람에게는 불쾌한 사람이 온다.",
"노력도 가끔은 배신한다.",
"과메기를 다 널고 나서야 늦은 저녁식사가 시작됩니다.",
"식은밥을 넣어 마시듯 먹었던 물회는 포항사나이들의 음식이었습니다"
]
embeddings = model.encode(sentences)
print(embeddings.shape)
print(embeddings[0])
# (5, 1024) # 다섯 문장이 1024개의 데이터로 변환
# [-0.00191365 0.00246765 -0.00720946 ... 0.00078195 -0.02185358
# 0.00062483]
LangChain
- 언어 모델 중심의 다양한 데이터 소스와 툴을 연결해 체인 기반 애플리케이션을 구축
- 여러 단계로 구성된 체인 구조로 다양한 연산 및 데이터 처리 가능
장점
- 유연한 구성: 언어 모델과 다양한 컴포넌트 연결을 통해 다양성과 확장성 제공
- 모듈화된 컴포넌트: 프롬프트 템플릿, 출력 파서 등 조합 및 재사용 가능
- 체인과 에이전트: 복잡한 작업 자동화를 위한 체인과 상황 기반 에이전트 제공
- 강력한 통합 기능: 다양한 언어 모델 및 벡터 데이터베이스 통합 지원
LangChain의 주요 개념
- LLM: 텍스트 생성 기능 제공, 다양한 모델 통합 지원
- Prompt Templates: 입력값에 따른 프롬프트 동적 생성
- Chains: 여러 단계를 거쳐 워크플로우를 구성
- Agents: 필요한 작업을 판단하고 실행
- Vector Databases: 유사 벡터의 빠른 검색 지원
LangChain 예시
- RAG: 관련 문서 검색 후 응답 생성
- FAQ 시스템: 유사성 검색으로 적절한 답변 제공
- 다단계 챗봇 워크플로우: 여러 단계를 거쳐 복잡한 답변 구성
- 지능형 에이전트: 최신 정보 제공을 위한 에이전트 구현