위 프로젝트는 다음과 같은 배경에서 진행된 지식 그래프 기반 에피소드 기억을 사용한 RAG 시스템 입니다.
- RAG 기술은 일회성 응답을 위한 LLM 모델에 정보를 주입하는 방식으로 사용된다.
- 비서 챗봇과 같은 시스템에선 정보 주입 뿐만 아니라 지속적인 대화를 기억하고 활용하는 시스템이 필요하다.
- 본 프로젝트에서는 개인화 가능한 AI 챗봇을 위한 RAG 시스템을 소개하고 한국어 대화 데이터셋을 이용해 정확한 정보를 제공하는지 테스트 하는 것을 목표로 한다.
2024.08.20 ~ 2025.01.23
- 프로젝트 소개
- 사용 기술 스택
- 프로젝트 Flow
- 디렉토리 구조 및 패키지 역할
- 기술적 이슈 및 해결 과정
- 관련 서비스 개발 및 성과
- 프로젝트 팀원 및 역할
- FastAPI
- MySQL
- Neo4j
- ChatGPT 4o API
- GitHub
-
사용자의 질의가 시스템에 입력되면 이전 대화 내용과 비교해서 문맥의 변화를 감지한다.
-
만약 문맥이 변했다면 지금 까지의 대화 내용을 기반으로 정보를 추론한다. 추론한 형태는 (주어, 동사, 목적어)의 트리플 형태로 나타낸다.
-
주어와 목적어는 노드로 동사는 엣지의 형태로 그래프DB에 저장한다. 동시에 지금 까지의 대화 내용을 에피소드에 저장한다. 이 때 Edge의 property로 episodeId를 설정해 에피소드와 지식 그래프를 연결시킨다.
-
이후 각 노드의 자연어 임베딩값을 이용하여 비슷한 의미를 가진 노드들끼리 커뮤니티를 생성한다.
-
사용자 질의와 가장 비슷한 상위 n%의 커뮤니티를 선정하고 그 커뮤니티의 노드와 엣지를 연결한 문장과 episodeId를 이용하여 가져온 에피소드들의 문장을 이용하여 답변을 생성한다.
- 만약 1에서 문맥이 변하지 않았다면, 5번만 실행한다.
ROOT
┣ AuthManager
┃ ┣ controller
┃ ┣ model
┃ ┣ service
┃ ┣ util
┃
┣ chatingManager
┃
┣ client
┃
┣ globals
┃ ┣ util
┃ ┗ .env
┃
┣ k_memorySystem
┃ ┣ episodeManager
┃ ┣ KnowledgeManager
┃ ┗ LLMController
┃
┗ ChatbotController.py
-
AuthManager : 추후 서비스화를 위한 인증 및 인가처리를 위한 패키지
- controller : User로 부터 Request를 받는 패키지
- model : Request Type 패키지지
- service : Reqeust를 적절하게 처리하는 패키지
- util : 인증 인가 처리에 관한 유틸 패키지
-
chatingManager : 채팅과 관련된 역할을 하는 패키지
-
client : 테스트 데이터 및 사전 데이터를 학습하기 위한 패키지
-
globals : DB 연결과 같은 전역적으로 해야하는 작업 패키지
- util : 전역적으로 처리해야하는 유틸 패키지
- .env : 환경변수로 설정한 파일 (보안이 필요한 데이터)
-
k_memorySystem : 프로젝트 핵심 기억 시스템 패키지
- episodeManager : 에피소드와 관련된 처리를 하는 패키지
- KnowledgeManager : 지식 그래프와 관련된 처리를 하는 패키지
- LLMController : 생성형 AI와 API를 이용하여 소통을 하는 패키지
-
ChatbotController.py : 메인 서버 Controller, 프로젝트 Flow의 역할을 수행한다.
-
커뮤니티 탐지를 위해 어떠한 알고리즘을 사용해야 할까?
- 초기에 Neo4j GDS 라이브러리의 Louvain 알고리즘을 사용했음.
- 하지만 커뮤니티를 나눈 결과가 원하는 대로 나오지 않았음.
- 팀원들끼리 회의한 후 유사한 그룹을 더 잘 표현할 수 있는 Kmeans 알고리즘을 사용하기로 결정함.
-
여러 패키지에서 DB 연결을 동시에 진행하고 있음.
- ChatingManager, AuthManager, episodeManager 패키지에서 DB연결을 진행함.
- 코드의 중복성을 제거하기 위해 전역적으로 설정할 수 있는 globals 패키지에 DB를 연결할 수 있는 util 파일을 만듬.
- 외부 패키지에서 DBUtil에 있는 connection 변수를 import만 해도 DB를 바로 사용할 수 있다.
본 프로젝트에서는 다음과 같은 3가지 모델을 두어 비교를 하였다.
- ChatGPT 와 비교해서는 정확도를 높이고 사용한 토큰 개수는 대폭 줄였다.
- ChatGPT RAG와 비교해서는 정확도를 거의 유지하고 토큰 개수는 2배 정도 줄였다.
본 프로젝트의 결과 정확도를 비슷하게 유지하면서 토큰의 개수를 많이 줄여 경제적인 효율성까지 얻는 결과를 도출하였다.
본 프로젝트의 지식 그래프, 에피소드를 이용한 RAG 기술을 적용하여 직접 교내 학습 도우미 웹 챗봇 서비스로 구현-
새내기 학습 가이드의 내용을 초기에 학습하여 교내 구성원들이 학교 생활에 대해 질문했을 때 도움을 줌.
-
대화를 할 때마다 대화 내용이 저장됨.
-
상단과 하단에 있는 학습 버튼을 통해 개인화가 가능하도록 구현함.
본 프로젝트의 내용을 기반으로 제작한 논문 입니다.
논문 보러 가기
- 🐶이세영 @LSe-Yeong
- FastAPI를 이용하여 메인 서버 Controller 구현
- JWT를 이용한 사용자 인증 구현
- Neo4j GraphDB를 이용하여 챗봇의 기억 데이터 관리
- MySQL을 이용하여 에피소드 메모리 구현
- 개발 테스트를 위한 AWS EC2 가상머신 배포
- 챗봇 웹 서비스 이루매GPT 프론트엔드 개발
- 🐰최명재 @DdingJae418
- 기억 초기화, 기억 갱신, 답변 생성 파이프라인 설계
- 지식 그래프 기반 기억 관리 시스템 설계
- 서버 통신 클라이언트 구현
- 사용자 경험 향상을 위한 프롬프트 엔지니어링
- 테스트 시나리오 및 캐릭터 설정 기획
- 🐱신지호 @simpack0513




