Skip to content

KwangWoonUnivCapstone/lawchatbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LawChatBot - RAG based Generative AI Chatbot

Know Your Rights! Better Citizen, Better Nation!

About The Project

LawChatBot은 판례 및 법률 조항과 함께 법률 상담 서비스와 법률 문서 분석 및 요약 기능을 제공합니다. LLM 모델의 이미 학습된 방대한 정보와 더불어 Langchain을 사용한 법률 지식을 더해 다양하고 특수한 상황에 유연하게 대응하여 답변을 생성할 수 있습니다.


⌘ Project Background

  • 배경 : 국내 법률 시장 규모의 증가 및 향후 고령화, 산업화로 인해 상속, 노후 보장, 의료 등에 법률 자문 서비스 수요 증가가 예상되고 있습니다. 그러나 법률 용어나 법률 문장은 해석하기 어려워 일반인들이 이해하기에는 쉽지 않습니다.

  • 목표 : 이러한 상황을 해결하기 위해 법률 상황에 대해 이해하기 쉬운 가이드라인을 제시하고, 일반인들이 처한 법적 상황을 분석하여 이해하기 쉽게 상담을 제공함으로써 법의 장벽을 낮출 수 있는 가벼운 법률 상담 서비스를 제공하고자 합니다.


Use Case

Getting Started

  1. 웹 서버에 접속합니다.
  2. 법률 상담 서비스와 법률 문서 요약 서비스 중 자신이 원하는 서비스를 선택합니다.

  • 법률 상담 서비스
image
  • 법률 상담 서비스의 경우에는 Main 페이지를 선택합니다.
  • 자신이 가지고 있는 OpenAI API Key를 입력합니다.
  • Process 버튼을 눌러 AI ChatBot이 사용자가 올린 법률 문서를 이해하도록 합니다.
  • 메시지 프롬프트에 자신이 처한 법적 분쟁 상황 및 연관 질문을 입력합니다.
  • AI ChatBot이 사용자의 법적 상황 맥락을 파악하여 가이드라인을 채팅 형태로 제공합니다.

  • 법률 문서 요약 서비스
image
  • 법률 문서 요약 서비스의 경우에는 Analysis 페이지를 선택합니다.
  • 자신이 가지고 있는 OpenAI API Key를 입력합니다.
  • PDF, txt, DOCX 형태의 법률 문서 파일을 넣습니다.
  • Process 버튼을 눌러 AI ChatBot이 사용자가 올린 법률 문서를 이해하도록 합니다.
  • 메시지 프롬프트에 문서 내용에 관한 법적인 질문을 입력합니다.
  • AI ChatBot이 사용자의 법적 상황 맥락을 파악하여 가이드라인을 채팅 형태로 제공합니다.

※ 참고

파일의 개수는 최대 3개까지 넣을 수 있습니다.

OpenAI API Key를 가지고 있지 않다면 링크를 통해 Key를 발급받을 수 있습니다.

서비스를 이용하는 데에 궁금한 점이 생기면 FAQ를 참고하도록 합니다.

채팅 내용을 지우고 싶다면 사이드 바에 있는 Clear Chat History를 사용하도록 합니다.

image

🧑🏻‍💻 Team Introduction & Members

💬 Team Introduction

2024 1학기 광운대학교 소프트웨어학부 캡스톤 디자인 1조

조화와 지속 가능한 성장을 추구하는 팀 천산조입니다!

팀 개개인 모두 주어진 위치에 상관없이 모든 일에 오너십을 가지고 적극적으로 참여하는 것을 최우선으로 생각하였습니다. 좋은 동료가 되기 위해 치열하게 고민하고, 학습하고, 성장하고 있습니다.


👨🏼‍💻 Members

조천산 정현 은관휘 김선진

⚙️ Tech Stack

  

  Slack 

 HuggingFace ChatGPT

📚 RAG 개발 단계

image



1. Document Loading

이 단계에는 정보를 검색할 원본 문서를 수집하고 구성하는 작업이 포함됩니다. 법률 데이터를 로드하여 시스템이 나눌 수 있도록 준비합니다.

한국 법령 정보 센터에서 얻은 형법, 민법, 헌법 관련 데이터를 수집한 후 LLM이 참고하여 답변할 수 있도록 구성
RAG에 사용할 데이터를 불러오는 단계로 외부 데이터 소스에서 정보를 수집하고, 필요한 형식으로 변환하여 시스템에 로드


2. Splitting

문서가 로드되면 "분할" 또는 "구절"이라고 하는 더 작고 관리 가능한 섹션으로 분할됩니다. 이 프로세스는 검색 프로세스를 단순화하기 때문에 중요합니다. 관련 정보를 찾기 위해 전체 문서를 검색하는 대신 나누어진 작은 섹션을 빠르게 검색합니다. 분할은 검색 프로세스의 효율성을 향상시키는 데 도움이 되며 가장 관련성이 높은 정보에 쉽게 액세스할 수 있도록 보장합니다.

불러온 데이터를 작은 크기의 단위(chunk)로 분할하는 과정입니다. 자연어 처리(NLP) 기술을 활용하여 큰 문서를 처리가 쉽도록 문단, 문장 또는 구 단위로 나누는 작업입니다. 검색 효율성을 높이기 위한 중요한 과정입니다.


3. Storage

분할 후 이러한 섹션은 벡터 저장소(또는 벡터 데이터베이스)에 저장됩니다. 각 분할은 임베딩과 같은 기술을 사용하여 벡터 표현으로 변환됩니다. 이러한 임베딩은 텍스트의 의미론적 의미를 포착하도록 설계되어 검색 단계에서 효율적인 유사성 비교가 가능합니다. 기본적으로 벡터 저장소는 콘텐츠 유사성을 기반으로 한 빠른 검색에 최적화된 모든 분할의 인덱스 라이브러리 역할을 합니다.

한국에 임베딩을 위한 허깅페이스 오픈소스를 사용하여 한국어 답변의 품질을 보장


4. Retrieval

검색 단계에서는 쿼리나 질문이 들어오면 먼저 벡터 형식(분할과 유사)으로 변환됩니다. 그런 다음 시스템은 벡터 저장소를 검색하여 임베딩이 쿼리 임베딩과 가장 유사한 분할을 찾습니다. 저희 조는 법률 데이터를 3가지 분류로 저장했습니다. 이를 위해 Miltiple Retrieval로 구성했습니다. 형법, 민법, 헌법 세가지 분류로 나누어 저장한 후 사용자가 입력한 텍스트를 분석해 세 가지 중 해당 되는 분야의 쪼개진 벡터에서 검색해 답변을 생성합니다.

multiple retrival 거리 기반 벡터 데이터베이스 검색은 고차원 공간에서의 쿼리 임베딩(표현)과 '거리'를 기준으로 유사한 임베딩을 가진 문서를 찾는 방식입니다. 하지만 쿼리의 세부적인 차이나 임베딩이 데이터의 의미를 제대로 포착하지 못할 경우, 검색 결과가 달라질 수 있습니다. 이를 수동으로 조정하는 프롬프트 엔지니어링이나 튜닝 작업은 번거로울 수 있습니다.

이런 문제를 해결하기 위해, MultiQueryRetriever 는 주어진 사용자 입력 쿼리에 대해 다양한 관점에서 여러 쿼리를 자동으로 생성하는 LLM(Language Learning Model)을 활용해 프롬프트 튜닝 과정을 자동화합니다.

이 방식은 각각의 쿼리에 대해 관련 문서 집합을 검색하고, 모든 쿼리를 아우르는 고유한 문서들의 합집합을 추출해, 잠재적으로 관련된 더 큰 문서 집합을 얻을 수 있게 해줍니다. 여러 관점에서 동일한 질문을 생성함으로써, MultiQueryRetriever 는 거리 기반 검색의 제한을 일정 부분 극복하고, 더욱 풍부한 검색 결과를 제공할 수 있습니다.

멀티플 리트리버를 사용한 이유는 법률 데이터를 분류하지 않고 한 번에 검색하게 된다면 답변을 생성하는 데 시간이 많이 소요되는 문제가 있었다.

답변을 생성하기 전 사용자의 질문을 받고 먼저 어느 분야에 관련된 문제인지 분류한 후 임베딩 된 데이터에서 관련 데이터를 찾는 방법으로 LLM이 답변을 생성하는데 걸리는 시간을 줄였다.


5. Output

마지막 단계에는 검색된 정보를 기반으로 답변을 생성하는 작업입니다. 관련 분할은 원래 쿼리와 함께 입력으로 사용되어 언어 모델(LLM)에 대한 프롬프트를 형성합니다. 이 프롬프트는 일반적으로 관련 분할의 정보로 쿼리를 맥락화하여 LLM이 정보에 입각한 정확한 응답을 생성하도록 안내합니다. 언어 모델은 분할된 정보와 쿼리 컨텍스트를 종합하여 일관되고 관련 있는 답변을 생성합니다. 프롬프트와 입력받은 답변 Retrieval을 chain으로 엮어 최종 답변을 streamlit에 보냅니다. 파이썬 프레임워크인 Streamlit은 랭체인과 연동되어 실시간으로 답변을 받고 생성합니다.


결론

  • RAG 방법은 정보 검색의 강점과 고급 언어 모델을 효과적으로 결합하여 AI 시스템 응답의 관련성과 정확성을 향상시킵니다. 상세한 문서 데이터와 정교한 언어 생성 기능을 활용함으로써 이 접근 방식은 다양한 도메인에 걸쳐 복잡한 쿼리를 처리하기 위한 강력한 도구를 제공합니다.

Contact

질문이나 피드백이 있으시면 github issue를 올려주세요.

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages