웹 개발 : 법률 챗봇 시행착오 총정리

2024. 7. 18. 12:13Cs & Develop/프로젝트 개발

반응형

법률 챗봇 : Co-Law (코로)

현재 사회적 약자를 위한 공모전을 준비중에 “외국인 근로자를 위한 웹사이트”를 만들고 있다.

 

1차 시도

처음으로 생각한 방법은 아래와 같다.

  • 법률 데이터 API를 사용하여 데이터를 가져와서 저장합니다.
  • Hugging Face Transformers, GPT-3 모델, 구글의 BERT (Bidirectional Encoder Representations from Transformers), IBM의 Watson 등 여러 모델 중 골라 사용하여 AI 모델에 법률 데이터를 학습시킵니다.
  • AI 챗봇을 구현하여 사용자와 상호작용할 수 있는 API 엔드포인트를 만듭니다.

무조건 OpenAI의 gpt 모델을 사용하려고 했지만 법률 데이터라는게 양이 엄청 많기때문에 이를 학습 시키려면 비용이 엄청 들거라고 생각했다. (실제로 현재 구현 웹사이트에서 AI 검색기능을 구현할때 OpenAI의 gpt 모델을 사용중인데 간단한 것인데도 한번 요청할때 갑자기 5달러 씩 돈을 뺴가길래 최대한 돈을 안쓰려고 함. 물론 현재는 비용이 그렇게 안나간다.)

법률 데이터는 아래에서 모두다 api 인증키를 받아서 여러개를 사용해 보았다.
https://www.data.go.kr/tcs/dss/selectDataSetList.do?keyword=법률&brm=&svcType=&instt=&recmSe=N&conditionType=init&extsn=&kwrdArray= https://law.nanet.go.kr/bbs/openapi/define.do?isMenu=Y https://aiopen.etri.re.kr/demo/LegalQA https://www.aihub.or.kr/aihubdata/data/list.do?searchKeyword=법률

데이터 관련해서 에트리, 국회도서관(심지어 여기는 수차례 통화도 함)에 문의도 넣고 다른 로펌도 참고하고 했는데 데이터가 제대로 된게 없거나 우리가 사용하려고 가공하기도 힘든 데이터들이 많았다. 심지어 변호사와 같은 자격증 없이 법률 상담은 불법이라는 말도 있고 해서 포기해야하나했다.

 

2차 시도

결국 이제는 그냥 파이썬으로 모델을 만들어야 겠다고 결심했다.

파이썬으로 모델을 만들면서 json형식의 여러 법률 데이터들을 학습시키고 다시 “질문-답” 형식으로 학습을 시키는 모델을 만들어서 그 챗봇을 스프링으로 가져와서 대화내용을 DB에 저장해서 조회하는 API를 만들어서 프론트에 넘겨야겠다고 생각했고 또 그 과정에서 구글의 BERT이 있었는데 유튜브나 오픈소스들을 찾아보니 BERT 를 많이 사용하길래 공부를 하고 구현을 할랬지만…. 생각보다 큰 규모의 프로젝트이고 다른 사람들은 이거 자체를 하나에 토이 프로젝트로 하는 것이였다. 공모전, 해커톤의 시간이 일주일도 안남은시점에서 이거는 너무 힘들다고 생각했고 (다른 작업들도 할 것이 산더미..ㅎ) 공모전이 끝나고 추후에 해봐야겠다고 결론을 내렸다.

 

3차 성공

최후의 방법이였는데…바로 바로 GPT-3.5를 그냥 사용하는 것이다..

이건 gpt랑 다를 게 없지만 챗봇이니 그 상황만 우리가 세팅을 해주면 제법 법률 상담 챗봇과 같은 역할을 하는 것을 테스트를 했고 결국 “유저가 보낸 메시지와 미리 정해진 프롬프트를 조합”하여 질문을 생성하는 방법이였다.

 

전체적인 작업 흐름은 아래와 같다.

  1. 유저가 챗봇에게 메시지를 보냄.
    - 유저가 메시지를 보냄.
    - 이 메시지를 DB에 저장.
  2. GPT-3.5에게 질문을 보냄.
    - 유저가 보낸 메시지와 미리 정해진 프롬프트를 조합하여 질문을 생성.
    - 예: "유저가 보낸 메시지" + “이 질문에 대해 먼저 공감적으로 상담사처럼 답변을 해주고 한국 헌법과 관련해서 법률 명과 관련된 판례와 키워드를 자세하게 구체적으로 알려줘. 그리고 주요 키워드를 이용하고 내가 외국인 근로자인 것을 감안해서 법률적 조언을 부탁해.”
    - GPT-3.5 API를 호출하여 응답을 받음.
  3. 응답을 DB에 저장하고 조회할 수 있도록 함.
    - GPT-3.5의 응답을 DB에 저장.
    - 저장된 데이터는 조회 API를 통해 조회 가능.

대충 위 흐름을 생각하고 코드 흐름도 짜보았는데

전체 코드 흐름

  1. 유저가 챗봇에게 메시지를 보내면 해당 메시지를 Chatting 엔티티로 데이터베이스에 저장.
  2. 유저 메시지와 미리 정해진 프롬프트를 조합하여 OpenAI GPT-3.5에 보낼 질문을 생성.
  3. OpenAI GPT-3.5 API를 호출하여 유저의 질문과 프롬프트에 대한 답변을 얻음.
  4. GPT-3.5의 응답을 Chatting 엔티티로 데이터베이스에 저장.
  5. 저장된 채팅 내용을 조회할 수 있는 API를 개발하여 필요한 데이터들을 클라이언트에게 제공.

이렇게 하니 성공했다.

아직 다듬기 전이지만 포스트맨과 DB 스크린샷을 보면 질문에 대한 대답을 제법 챗봇과 같이 구현하는 것을 성공했다.

전체적인 코드는 아래 깃허브에서 확인 할 수 있다.
https://github.com/Co-Labor-Project/Co-Labor-BE

 

GitHub - Co-Labor-Project/Co-Labor-BE

Contribute to Co-Labor-Project/Co-Labor-BE development by creating an account on GitHub.

github.com

Postman
DB
홈페이지

프론트도 조금 도왔다.

반응형