김재호

랭체인을 활용한 AI 챗봇 구현 본문

2025 co-week

랭체인을 활용한 AI 챗봇 구현

Kimjaeho 2025. 6. 4. 15:29

아래의 내용은 전주대학교 김영수 교수님의 수업을 바탕으로 제작하였습니다.

 

LangChain 이란?

대규모 언어 모델(LLM)을 기반으로 애플리케이션을 구축핟기 위한 오픈 소스 프레임워크

  • 챗봇, 질의응답 시스템, 자동 요약 등 다양한 LLM 애플리케이션을 쉽게 개발할 수 이도록 지원

  • ChatGPT와 같은 LLM으로부터 특정한 목적을 위한 더 나은 맞춤형 성비스 제작에 대한 사용자의 요구사항 증대

 

LangChain = Language Model + Chain

 

RAG란?

검색 증강 생성(Retrieval-Augmented Generation, RAG)

  • 기존의 LLM 답변을 생성하는 과정에 별도의 지식 DB에서 검색을 추가해서 사용자의 질문을 보강하여 더 좋은 답변을 생성
  • 회사 내부 전문 정보를 가져와 별도의 지식 베이스로 사용하여 기존 LLM 단점을 보완하고 성능 향상

 

RAG의 장점

외부 지식 활용 -> 깊이 있는 정보제공

  • 대규모의 구조화된 지식 베이스(예: 위키피디아)를 모델에 연결
  • 주어진 질의에 대한 관련 정보를 지식 베이스에서 검색 및 추출

증거 기반 생성 -> Hallucination 방지

  • 검색된 지식 정보를 증거로 활용하여 보다 사실에 기반한 답변 생성
  • 생성된 답변의 출처를 명시함으로써 신뢰성 향상

맥락 이해력 향상 -> 보다 전문화된 답변 생성

  • 외부 지식을 통해 질의에 대한 배경 지식과 맥락 정보를 파악
  • 단순한 패턴 매칭이 아닌 추론 능력을 바탕으로 한 답변 생성

RAG 기반 챗봇 구현 프로세스

예시: PDF 챗봇 구축

문서를 기반으로 챗봇을 구축할 경우, 아래와 같은 과정을 통해 대화가 가능하도록 한다.

 

문서 로딩과 임베딩

LangChain 모듈 구성

 

개발환경 구성

랭체인 설치 (구글 Colab 기준)

!pip install langchain langchain_community

  • langchain-core, langchain-community, langsmith 등이 함께 설치됨

외부 모델 제공자 패키지 설치

!pip install -U langchain-google-genai

  • Google Gemini 패키지 설치 (Python 3.9 이상)

테스팅

from langchain_google_genai import ChatGoogleGenerativeAI

llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash", api_key="YOUR_API_KEY")

llm_msg = llm.invoke("Gemini 요금제에 대해 설명해줘")

print(llm_msg)

-----------------------------------------------------------------------------------------

content='Gemini는 Google에서 개발한 최첨단 AI 모델로, 다양한 요금제...

 

 

Google API 키 발급

Google Cloud에서 Gemini Key 발급을 위한 프로젝트 생성

https://cloud.google.com/resource-manager/docs/creating-managing-projects?hl=ko에 방문한 후,

Scroll Down하여 "리소스 관리로 이동" 클릭

또는 구글 클라우드 콘솔 바로가기

 https://console.cloud.google.com/cloud-resource-manager?walkthrough_id=resource-manager--create-project&start_index=1&hl=ko&inv=1&invt=AbrZlQ#step_index=1

 

 

Google AI Studio 사이트 방문 및 API 키 발급

Google Cloud에서 만든 프로젝트 선택 후, API 키 만들기

 

 

체인 만들기

 

학교/학과를 소개하는 pdf파일 준비하기

Goolge 드라이브에 PDF 파일 업로드

 

랭체인에서 활용할 수 있도록 PDF 파일 로딩

-----------------------------------------------------------------------

총 문서 수: 347

첫번째 문서: page_content='2025학년도 경상국립대 신입학 수시모집, …

 

문서 청킹(Chunking)

Vector Store에 저장하기 전, 적절한 크기로 나누어서 임베딩

----------------------------------------------------------------------

분할된 문서 수: 1266

***** 첫번째 청크*****

2025학년도

경상국립대 신입학 수시모집

학생부종합전형 안내

 

임베딩 및 벡터 스토어 저장

텍스트 데이터를 숫자로 이루어진 벡터로 변환하여 저장

  • 텍스트 간의 유사성을 계산하거나, 다양한 머신러닝 및 자연어 처리 작업 수행 가능

 

벡터 스토어에 저장

 

 

검색(Retrieve)

  • 일반적으로 유사도 검색을 통해 관련성이 높은 청크 문서를 반환

 

LLM에게 관련청크와 함께 질의하기

  • PromptTemplate

 

챗봇 UI 만들기

Streamlit

pip install streamlit streamlit-chat

  • 빠르고 간편한 웹 UI를 개발할 수 있는 오픈소스 라이브러리

ngrok

pip install pyngrok

  • Colab에서 실행 중인 웹 서버(예: Flask, Django 등)를 외부 인터넷에서도 접근할 수 있게 해주는 터널링 도구

인증토큰 받기

테스팅

  • 간단한 챗봇 프로그램(app.py) 작성

  • 챗봇 실행 프로그램 작성

 

 

  • Colab 세션이 끊기면 Streamlit과 ngrok은 자동으로 종료하는 함수 작성
  • 웹서버 프로세스 수동 종료 함수

-------------------------------------------------------------------

Streamlit 프로세스 종료...

ngrok 터널 종료

 

Streamlit을 활용한 챗봇 UI 구현

streamlit은 수많은 chat elements를 제공하여 chatbot스러운 화면 구현 가능

  • 주요 함수
title() 페이지 제목을 표시
text_input() 일반적인 텍스트 입력 상자로 페이지 어디에나 배치 가능
chat_input() 챗봇처럼 화면 하단 고정된 입력창
write() 텍스트, 데이터프레임, 변수 등을 화면에 출력
markdown() 텍스트에 기울기, 굵은 글씨 등을 더하여 화면에 출력
chat_message() 채팅 형식 메시지 출력
session_state() 사용자 세션에 상태를 저장 (채팅 기록 등)
button() 버튼 생성

 

LLM 연동 챗봇 UI 구현

Gemini와 연결한 챗봇 프로그램

앞의 ngrok 실행프로세스를 종료하고, 실행프로그램은 chat_gemini.py, Port="8501"으로 ngrok 실행