← 프로젝트 목록으로
LLM / RAG

NotebookLLM 만들기

직접 정리한 전공 노트를 지식 베이스로 삼아, 그 내용에 근거해서만 답변하는 개인용 학습 챗봇을 만든 프로젝트입니다. LangChain과 Gemini API, Chroma 벡터 DB로 검색 증강 생성(RAG) 파이프라인을 구성했습니다.

기간2026.06 – 2026.08 (청년 Hy-po 9기)
역할단독 진행
스택LangChain, Google Gemini API, Chroma, Google Colab
구분개인 프로젝트
RAGLangChain + Gemini 2.0 Flash
k=4청크 검색 개수
3단계구조화된 답변 형식

개요

청년 Hy-po 9기 프로그램 기간 동안, 그동안 정리해온 전공(물성 및 소자 등) 노트를 Google Drive의 마크다운 파일로 관리하고 있었는데, 필요할 때 원하는 개념을 빠르게 찾기가 어려웠습니다. 이를 해결하기 위해 내 노트만을 근거로 답변하는 개인용 RAG 챗봇 "하이포_챗"을 Google Colab 환경에서 구현했습니다.

목표: 일반 LLM처럼 근거 없이 답하는 것이 아니라, 내가 작성한 노트를 검색해 그 내용에 기반해서만 답변하고, 반도체 수율 엔지니어를 목표로 하는 학습 맥락에 맞춰 답변 형식을 구조화하는 것

문제 정의

  • 과목별로 흩어진 마크다운 노트를 매번 폴더에서 직접 찾아 읽어야 했던 비효율
  • 일반 LLM에 그냥 질문하면 내 수업/전공 맥락과 무관한 일반론적 답변(할루시네이션 위험)이 나오는 문제
  • 단순 답변이 아니라 "핵심 개념 → 수율/공정과의 연관성 → 더 찾아볼 키워드" 순서로 학습에 도움이 되는 구조화된 답변이 필요했음

접근 방법

Google Drive의 my knowledge bot/notes 폴더에 과목별로 정리한 마크다운(.md) 노트를 DirectoryLoader로 불러온 뒤, MarkdownTextSplitter(chunk_size=500, chunk_overlap=50)로 청크 분할하고, Gemini 임베딩 모델(gemini-embedding-001)로 임베딩해 Chroma 벡터DB에 저장했습니다. 질의응답 시에는 retriever(k=4)로 관련 청크 4개를 검색해 프롬프트에 컨텍스트로 주입하고, gemini-2.0-flash 모델이 아래 형식으로 답하도록 프롬프트 템플릿을 설계했습니다.

  • 1. 핵심 개념
  • 2. 수율/공정과의 연관성
  • 3. 더 찾아볼 키워드

체인 구성은 {"context": retriever, "question": RunnablePassthrough()} | PROMPT | llm | StrOutputParser() 형태의 LangChain LCEL 파이프라인이며, Colab에서 ipywidgets로 간단한 채팅 UI(입력창·전송·대화 초기화 버튼, 말풍선 렌더링)를 구현해 바로 사용할 수 있도록 했습니다.

마크다운 노트
청크 분할
Gemini 임베딩
Chroma 벡터DB
검색 (k=4)
프롬프트 주입
Gemini 2.0 Flash 응답
참고: 실제 노트북 코드에는 개인 API 키가 포함되어 있어 원본 파일은 공개하지 않고, 파이프라인 구조만 정리해 소개합니다.

결과

현재는 "물성 및 소자" 과목 노트 2개 파일(총 8개 청크)로 우선 검증했고, 질문을 입력하면 해당 노트 내용을 근거로 핵심 개념·수율 공정과의 연관성·추가 학습 키워드까지 구조화된 답변을 받을 수 있음을 확인했습니다. ipywidgets 기반 채팅 UI에서 실시간으로 질의응답이 가능합니다.

[ 챗봇 UI 스크린샷 / 질의응답 예시 자리 ]

배운 점 & 향후 계획

  • 청크 크기·overlap, retriever의 k값 등 RAG 하이퍼파라미터가 답변 품질에 미치는 영향을 직접 튜닝하며 체감했습니다
  • 프롬프트에 "답변 형식"을 명시적으로 지정하는 것만으로도 학습 목적에 맞는 구조화된 응답을 얻을 수 있음을 확인했습니다
  • API 키를 코드에 하드코딩하지 않고 환경 변수/시크릿 매니저로 분리해야 한다는 점을 이번에 다시 체감했습니다 (다음 버전에서 반영 예정)
  • 향후 전공 노트 전체로 지식베이스를 확장하고, 출처 청크를 답변에 함께 표시하는 기능을 추가할 계획입니다