n8n을 활용한 업무자동화 - (2) 공구선정 RAG봇

소개

n8n자동화 두번째 학습으로 이번에는 RAG(Retrieval-Augmented Generation, 검색증강생성) 봇을 개발해보기로 했다. 목표는 기업 현장에서 휴대폰으로 활용할 수 있는 수준의 봇을 만드는 것이지만, 관련된 도구 활용에 충분히 익숙해지기 전까지는 기초적인 수준으로 제작해보기로 했다. 향후 스터디를 통해 현장에 적용할 수 있는 수준으로 개선해도 충분할 것이다.

테스트 및 적용을 해 볼 대상은 정밀가공 기업의 현장작업자다. 이들이 공작물을 가공할 때, 자신의 경력이나 지식에 따라 자신이 선호하는 공구를 선정하는 데서 생산성이나 품질이 결정되는 데, 결과물의 편차가 크다는 문제를 해결하기 위해서 공구선정 RAG 봇을 만들어보기로 했다. 

전반적인 진행 개요는 다음과 같다.

1. Data Loader 개발

  • 데이터 로더, 임베딩, 벡터 스토어

2. Retrever 개발

  • 자연어 질문 쿼리, 검색기, 응답생성기(AI Agent)

3. 채팅 앱 개발

  • Slack

준비

제작될 RAG의 검색성능을 비교해보기 위해, 커스텀GPT를 먼저 만들었다. 

알다시피 커스텀GPT는 보안 상의 문제나 용량의 한계로 기업용으로 사용하기에는 한계가 있다. (사실 커스텀GPT가 지식 데이터를 쪼개고 벡터화하는지도 알 수 없다).

그리고서 정형데이터로 된 표 형식의 파일을 만들어서 업로드 했다. (xlsx, csv파일)

Microsoft Excel의 스프레드 시트 스크린 샷

Data Loader 및 Retrever 개발

1) 기본적인 데이터로더와 검색기는 스터디장의 지원을 받아서, 별다른 어려움 없이 구성할 수 있었다(거의 날로 먹었다 ㅎㅎ).

챗팅 트리거를 통해 질문을해 보았는데, 커스텀GPT와 RAG 모두 질문에 맞는 문서내용을 답변해 주었다

도중 AI모델을 연결하는 과정에서 에러가 났는데, 아무리 보아도 이유를 알 수 없었다.

나중에 알고보니 AI모델이 Function Calling을 지원하지 않기 때문임을 알았다. 이 기능을 제공하는 모델을 물어보고 해결할 수 있었다.

2) 두 번째는 좀 더 큰 용량의 pdf파일을 준비했다. 제조현장에 적합한 문서(정밀가공 절삭공구 가이드북, 280쪽 분량, 46MB)를 선정해서 커스텀GPT와 RAG에 각각 업로드해 주었다. 예전 전화번호부처럼 두꺼운 이 문서는 텍스트는 별로 없고 표, 그림이 많은 문서였다.

한국 달력의 스크린 샷

커스텀GPT에 OCR 기능을 켜 두었지만 분량이 많아서 그런지 답변을 못하고 맥을 못췄다. 반면, RAG는 기대 이상의 답변을 찾아주었다. 930쪽 분량 매뉴얼에서 관련된 내용을 찾아 답변하는게 대견했다. 텍스트 형식도 표도 아니고 이미지 형식이라 제대로 못찾을 줄 알았는데, 기대를 충족시켜주는 것 같아 대견했다.

한국어 텍스트가 포함 된 문서의 스크린 샷

SNS 채팅 앱 개발

이번에는 제조현장에서 직원들이 절삭공구를 선정할 때 휴대폰으로도 RAG봇를 이용할 수 있도록, 채팅 앱을 선택해야 했다.

악명을 떨치고 있는 카카오톡은 고려대상에서 제외하고, Slack과 Telegram 중 어떤 노드를 사용해야할지 결정하기 위해 두 도구를 비교해 보았다.

Slack은 자주 사용해보던 친숙한 도구이기도 하고, 팀원과의 협업, 직원들 간의 질문과 지식 공유와 협업을 위해선 Slack이 더 낫다고 생각되어 Slack을 선정했다. 

하지만 RAG와 Slack 노드를 연결하는 과정에 알 수없는 에러가 수없이 나서 SNS 노드 연동이 처음인 나를 너무 괴롭혔다(이걸로 거의 사흘을 보냈다). Telegram으로 할 걸… 진행과정에서 몇 번이고 Telegram으로 하지 않은 걸 후회했지만, 협업과 인지도 면에서 Slack이 앞선다는 이유 때문에 참았다. 그러고보니 스터디 사례 중에 텔레그램을 사용한 사례가 많았던 것 같은데, 이제 그 이유를 알 것 같다

3) 슬랙 앱 노드를 연결하고서 이번에는 같은 pdf 파일이지만 텍스트로 가져올 수 있는 파일을 업로드해 보았다. 행정안전부에서 나왔던 서무업무종합매뉴얼(2015)을 업로드하고 매뉴얼에 나온 내용 대로 답하는지 확인해보았다.

왼쪽은 RAG와 연결된 슬랙으로 묻고 답변한 내용이고, 오른쪽은 pdf파일의 본문(173쪽)이다. 답변의 품질이 기대에 못미쳐서 얘가 정말 업로드한 지식파일 내용을 검색해서 가져온 건지 아니면 모델이 이미 학습한 내용을 답변하는 것인지 좀 애매했지만, RAG가 기능을 하고 있는 것으로 판단했다.

결과와 배운점

  • AI모델이 Function Calling을 지원하는지 확인해야 한다.

  • Slack은 우리에게 비교적 친숙한 도구지만, 앱 생성과 권한설정 절차가 복잡하고 까다롭다.

  • 이미지로 된 문서는 OCR 등을 활용해서 텍스트로 변환하는 준비과정이 만만치 않을 것 같다

  • 데이터를 가져올 수 있는 표로 되었더라도 엑셀보다는 텍스트(txt, csv 형태가 낫다

  • 기업에서 적용하려면 같은 RAG라도 신뢰도가 선정의 핵심일 것이다

향후 계획

기회가 주어지는 대로 다양한 형식의 벡터DB를 각각 적용해 보려고 한다. 어떻게 하면 RAG의 신뢰도를 높일 수 있는지 계속 테스트해 볼 생각이다.

현장직원들의 질문을 수집하면 사용할 공구를 선정 절차에서 어떤 점을 어려워하는지 알 수 있을 것이다. 현장의 소리를 Google Sheet에 모으고, 이를 앱스스크립트로 분석해서 FAQ 문서를 생성하면 고경력자의 지원이 없어도 정밀가공 경력이 짧은 직원들의 역량 향상에 유용할 것이다. 다음에 이 기능을 추가해 볼 계획이다.


뉴스레터 무료 구독

👉 이 게시글도 읽어보세요