LangChain으로 LLM RAG 챗봇 구축 I

2024. 4. 14. 22:36python/intermediate

OpenAI의 ChatGPT와 같은 대규모 언어 모델(LLM)과 상호 작용하고 질문에 답변하고 문서를 요약하고 코드를 작성하는 등의 놀라운 능력을 경험했을 것입니다. LLM은 그 자체로 훌륭하지만 약간의 프로그래밍 지식만 있으면 LangChain과 같은 라이브러리를 활용하여 거의 모든 작업을 수행할 수 있는 자체 LLM 기반 챗봇을 만들 수 있습니다.

기업 환경에서 LLM 기반 챗봇을 만드는 가장 인기 있는 방법 중 하나는 검색 증강 생성(RAG)을 이용하는 것입니다. RAG 시스템을 설계할 때 검색 모델을 사용하여 일반적으로 데이터베이스나 코퍼스에서 관련 정보를 검색하고 이 검색된 정보를 LLM에 제공하여 상황에 맞는 관련 응답을 생성합니다.

이 튜토리얼에서는 대규모 병원 시스템에서 일하는 AI 엔지니어의 입장이 되어 보겠습니다. Neo4j를 사용하여 병원 시스템의 환자, 환자 경험, 병원 위치, 방문, 보험 납부자 및 의사에 대한 데이터를 검색하는 RAG 챗봇을 LangChain에 구축합니다 .

이 튜토리얼에서는 다음 방법을 배웁니다 .

  • LangChain을 사용하여 맞춤형 챗봇 구축
  • 비즈니스 요구사항과 병원 시스템 데이터에 대한 이해를 바탕으로 챗봇을 설계하세요 .
  • 그래프 데이터베이스 작업
  • Neo4j AuraDB 인스턴스 설정
  • Neo4j에서 구조화된 데이터 와 구조화되지 않은 데이터를 모두 검색하는 RAG 챗봇 구축
  • FastAPI 및 Streamlit을 사용하여 챗봇 배포

이 프로젝트의 전체 소스 코드와 데이터를 다운로드하려면 아래 링크를 클릭하세요.

 

코드 받기: LangChain 챗봇의 무료 소스 코드를 다운로드하려면 여기를 클릭하세요. https://realpython.com/bonus/build-llm-rag-chatbot-with-langchain-code/

 

 

데모: LangChain 및 Neo4j를 사용한 LLM RAG 챗봇

 

이 튜토리얼이 끝나면 LangChain 챗봇을 제공하는 REST API를 갖게 됩니다. API와 상호 작용할 수 있는 멋진 채팅 인터페이스를 제공하는 Streamlit 앱 도 있습니다 .

 
 

내부적으로 Streamlit 앱은 메시지를 챗봇 API로 보내고, 챗봇은 응답을 생성하여 Streamlit 앱으로 다시 보내 사용자에게 표시합니다.

나중에 챗봇이 액세스할 수 있는 데이터에 대한 심층적인 개요를 얻을 수 있지만, 테스트해보고 싶다면 사이드바에 제공된 예와 유사한 질문을 할 수 있습니다.

 

 

 

비즈니스 요구 사항과 데이터를 이해하는 것부터 Streamlit 앱을 구축하는 것까지 각 단계를 처리하는 방법을 배우게 됩니다. 이 튜토리얼에는 풀어야 할 내용이 많지만 너무 부담스러워하지 마세요. 소개된 각 개념에 대한 배경 지식을 얻을 수 있으며, 이해를 심화할 수 있는 외부 소스에 대한 링크도 제공됩니다. 이제 시작할 시간입니다!

 

전제조건

 

이 튜토리얼은 사용자 정의 챗봇을 만드는 실습 경험을 얻고자 하는 중급 Python 개발자에게 가장 적합합니다. 중급 Python 지식 외에도 다음 개념과 기술에 대한 높은 수준의 이해를 통해 이점을 얻을 수 있습니다.

  • 대규모 언어 모델(LLM) 및 신속한 엔지니어링
  • 텍스트 임베딩 및 벡터 데이터베이스
  • 그래프 데이터베이스 및 Neo4j
  • OpenAI 개발자 생태계
  • REST API 및 FastAPI
  • 비동기 프로그래밍
  • 도커 와 도커 컴포즈

위에 나열된 항목은 어려운 전제 조건이 아니므로 해당 항목에 대해 지식이 없다고 느껴지더라도 걱정하지 마세요. 그 과정에서 각 개념과 기술을 소개하게 됩니다. 게다가, 이 튜토리얼에서 직접 구현하는 것보다 이러한 전제 조건을 배우는 더 좋은 방법은 없습니다.

다음으로 간략한 프로젝트 개요를 살펴보고 LangChain에 대해 학습을 시작합니다.

 

프로젝트 개요

 

이 튜토리얼 전체에서 최종 챗봇을 구성하는 몇 가지 디렉터리를 생성하게 됩니다. 각 디렉토리에 대한 분석은 다음과 같습니다.

  • langchain_intro : LangChain에 익숙해지고 데모에서 본 챗봇을 구축하는 데 필요한 도구를 갖추는 데 도움이 될 것입니다. 최종 챗봇에는 포함되지 않습니다. 이 내용은 1단계 에서 다루게 됩니다 .
  • data : 원시 병원 시스템 데이터가 CSV 파일로 저장되어 있습니다. 2단계에서 이 데이터를 살펴보겠습니다. 3단계 에서는 이 데이터를 챗봇이 질문에 답하기 위해 쿼리할 Neo4j 데이터베이스로 이동합니다.
  • hospital_neo4j_etl : Neo4j 데이터베이스에서 data/로 부터 원시 데이터를 로드하는 스크립트가 포함되어 있습니다. 챗봇을 구축하기 전에 이를 실행해야 하며 3단계 에서 Neo4j 인스턴스 설정에 대해 알아야 할 모든 것을 배우게 됩니다 .
  • chatbot_api/ : 챗봇을 REST 엔드포인트로 제공하는 FastAPI 앱 이며 이 프로젝트의 핵심 결과물입니다. chatbot_api/src/agents/ 및 chatbot_api/src/chains/ 하위 디렉터리에는 챗봇을 구성하는 LangChain 개체가 포함되어 있습니다. 에이전트와 체인이 무엇인지는 나중에 배우겠지만 지금은 챗봇이 실제로 체인과 기능으로 구성된 LangChain 에이전트라는 것만 알아두세요.
  • tests/ : 챗봇이 일련의 질문에 얼마나 빨리 답변할 수 있는지 테스트하는 두 개의 스크립트가 포함되어 있습니다. 이를 통해 OpenAI와 같은 LLM 제공업체에 비동기식 요청을 함과 비교하면 얼마나 많은 시간을 절약할 수 있는지 실감할 수 있습니다.
  • chatbot_frontend/ : chatbot_api/의 챗봇 엔드포인트와 상호 작용하는 Streamlit 앱입니다. 이는 데모에서 본 UI이며 5단계 에서 빌드하게 됩니다.

챗봇을 구축하고 실행하는 데 필요한 모든 환경 변수는 .env 파일에 저장됩니다. Docker Compose로 조정될 Docker 컨테이너로 코드를 hospital_neo4j_etl/, chatbot_api 및 chatbot_frontend에 배포합니다. 이 튜토리얼의 나머지 부분을 진행하기 전에 챗봇을 실험해 보려면 자료를 다운로드하고 README 파일의 지침에 따라 작업을 실행하면 됩니다.

프로젝트 개요와 전제 조건을 바탕으로 LangChain에 익숙해지는 첫 번째 단계를 시작할 준비가 되었습니다.