우리 챗봇의 주요 목표는 다음과 같아.
먼저, PDF 문서를 데이터로 활용할 수 있도록 전처리해야 해.
PDF 문서에서 텍스트만 추출하고, 불필요한 HTML 태그, 특수 문자, 공백 등을 제거해야 해.
표준화된 텍스트로 변환하면 검색 품질이 올라가!
문서가 길면 벡터로 변환할 때 문맥이 깨질 수 있어.
문장 단위 또는 단락 단위로 나눠서 연속적인 의미가 유지되도록 해야 해.
청킹을 잘하면 검색 정확도가 올라가!
문서를 작은 청크로 나눈 후, 이를 벡터로 변환해서 저장해야 해.
OpenAI의 text-embedding-3-small 모델을 사용하여 각 문장(청크)을 벡터로 변환해.
벡터는 문장의 의미를 수치로 표현하는 방식이야.
변환된 벡터를 ChromDB에 저장할 거야.
나중에 사용자가 질문하면 가장 의미적으로 가까운 벡터(문장)를 찾아서 응답을 만들 수 있어.
이제 RAG (Retrieval-Augmented Generation, 검색 증강 생성)을 적용할 차례야.
사용자의 질문을 임베딩(벡터)으로 변환하고, 벡터 DB에서 가장 유사한 문장을 찾는 방식이야.
즉, 가장 관련성이 높은 정보를 검색해서 제공할 수 있어.
검색된 문서 중 관련성 높은 문서만 선별할꺼야
문서와 질문의 관련성을 평가하는 체인 구현하고
Pydantic을 사용하여 출력 형식(JSON)을 명확히 정의해야해
with_structured_output()을 사용하여 LangChain과 함께 구조화된 데이터를 반환할 수 있어
벡터 DB에서 찾은 내용을 LLM(올라마 모델)에 전달하면,
문맥을 반영한 자연스러운 답변을 생성할 수 있어.
Gradio를 사용하면 쉽고 간단하게 챗봇을 웹에서 실행할 수 있어.
버튼 하나로 PDF 업로드 → 질문 입력 → AI가 답변 생성하는 흐름을 만들 거야.
대화를 기록해서 이전 대화 맥락을 반영한 답변을 생성하도록 할 거야.
사용자의 대화 기록을 저장해서, 문맥을 더 잘 이해할 수 있도록 개선할 수 있어.
1️⃣ PDF 문서 전처리 관련 기술
문서를 AI가 이해할 수 있도록 가공하는 과정에서 필요한 기술들.
📌 1.1 데이터 정제 (Data Cleaning)
PDF에서 텍스트를 추출하고 불필요한 요소(HTML 태그, 특수문자, 공백 등)를 제거하는 과정.
사용 기술: PyMuPDF, pdfplumber, BeautifulSoup (HTML 정리)
📌 1.2 문서 청킹 (Chunking)
문서를 너무 길게 유지하면 LLM이 이해하기 어려우므로, 작은 단위(청크)로 분할하는 과정.
일반적으로 문장 단위, 단락 단위, 고정된 토큰 수 등으로 청킹 가능.
사용 기술: LangChain.text_splitter, NLTK, spaCy
2️⃣ 임베딩 및 벡터 데이터베이스 관련 기술
텍스트를 수치화(벡터화)하고 빠르게 검색할 수 있도록 저장하는 과정.
📌 2.1 임베딩 (Embedding)
텍스트를 **벡터(숫자로 이루어진 배열)**로 변환하는 과정.
벡터는 의미적 유사성을 계산하는 데 사용됨.
사용 기술:
OpenAI text-embedding-3-small (임베딩 생성)
Hugging Face Transformers (BERT, Sentence Transformers 등 대체 가능)
📌 2.2 벡터 데이터베이스 (Vector Database)
문장을 벡터로 변환한 후 저장하고, 유사한 벡터를 빠르게 검색하는 데이터베이스.
RAG 기법의 핵심 요소.
사용 기술:
ChromaDB (경량 벡터 데이터베이스)
FAISS (빠른 검색을 위한 오픈소스 라이브러리)
Weaviate, Pinecone (대체 가능)
3️⃣ RAG (Retrieval-Augmented Generation) 관련 기술
LLM이 검색을 활용하여 더 정확한 답변을 생성하는 방식.
📌 3.1 벡터 검색 (Vector Retrieval)
사용자의 질문을 벡터로 변환하고, 벡터 데이터베이스에서 가장 유사한 문장 검색.
사용 기술: ChromaDB, FAISS, LangChain Retriever
📌 3.2 RAG 기반 응답 생성
벡터 검색으로 찾은 문장을 LLM에 입력하여 답변을 생성.
단순 LLM보다 더 정확한 답변을 제공 가능.
사용 기술: LangChain RetrievalQA, Ollama
4️⃣ LLM 및 올라마 (Ollama) 관련 기술
LLM을 로컬에서 실행하여 자연어 이해 및 생성하는 과정.
📌 4.1 올라마 (Ollama)
로컬에서 실행 가능한 경량 LLM 프레임워크.
인터넷 없이도 AI 모델을 실행 가능.
사용 기술:
Ollama (LLaMA, Mistral 등 지원)
LangChain.llms.Ollama (LangChain과 연동)
📌 4.2 OpenAI API
외부 API를 통해 최신 모델을 사용할 수도 있음.
text-embedding-3-small, GPT-4, GPT-3.5-turbo 등 사용 가능.
사용 기술: openai 라이브러리
5️⃣ Gradio를 활용한 웹 UI 개발
Gradio를 이용하면 사용자가 직접 챗봇과 상호작용할 수 있는 인터페이스를 쉽게 만들 수 있어.
📌 5.1 Gradio 인터페이스
버튼 하나로 파일 업로드 → 질문 입력 → 답변 출력을 만들 수 있음.
API 없이도 브라우저에서 실행 가능.
사용 기술: Gradio, Gradio.Interface()
6️⃣ 챗봇 히스토리 (대화 맥락) 관리
챗봇이 문맥을 기억하도록 하는 기능.
📌 6.1 대화 기록 (Memory) 관리
사용자의 대화를 저장하여 맥락을 유지함.
사용 기술: LangChain.memory.ConversationBufferMemory()
🔍 추가로 고려할 수 있는 기술
✅ FastAPI: 챗봇을 API 서버로 배포할 때 사용
✅ Docker: 챗봇을 컨테이너화하여 배포
✅ Streamlit: Gradio 외에 UI 개발 대안