Visual ChatGPT와 LangChain
4일 전에 microsoft에서 Visual ChatGPT를 발표했습니다.
빠르게 해당 기술을 사용해서 사내 챗봇에까지 도입해본 경험을 공유합니다. 말로만 대답하던 챗봇이 구글 서치, 이미지 인식, 이미지 생성까지 되는 챗봇이 되었습니다!
Visual ChatGPT는 ChatGPT가 반환할 수 있는 output의 타입을 text에서 image로 확장시킬 수 있는 방법입니다. 더 이상 text만을 반환하는 것이 아닙니다. 필요하다면 직접 그림을 그려줄 수 있게 됩니다.
이미지 생성뿐만 아니라 이미지 수정 및 삭제도 가능합니다!
이런 것들은 당연하게도 ChatGPT가 하는 것이 아닙니다. 다만 ChatGPT에게 우리가 갖고 있는 도구들을 설명해주면 어떤 도구가 적절할지는 선택할 수 있습니다.
적절한 도구 선택 방법
ChatGPT에게 도구를 주고 도구를 선택하게 하는 방법을 "LangChain"이라고 부릅니다.
인간에게 "이순신의 출생년도를 구하고 거기에 제곱을 해줘" 라고 했을 때 아무 도구 없이 정답을 내뱉을 수 있는 사람이 얼마나 될까요?
당연히 다음 프로세스대로 정답을 알아낼 것입니다.
- 이순신의 출생년도를 구글에 물어본다.
- 나온 숫자를 계산기에 넣어서 제곱한다.
여기서 사람의 능력은 각각의 프로세스를 할 수 있는 것이 아니라 적절한 도구에게 위임하는 것이 핵심 포인트입니다.
Visual ChatGPT도 마찬가지입니다. 고양이 이미지를 생성해달라고 했을 때는 이미지 생성 모델에게, 고양이 이미지를 수정해달라고 했을 때는 이미지 수정 모델에게 부탁하는 것입니다.
그렇기에 본인 스스로 가능한 도구들도 명확히 알고 있습니다.
해당 도구들은 Vision 분야에서 한가닥씩 하는 모델들입니다. 해당 모델들을 Visual Foundation Model이라고 부릅니다.
사용 가능한 도구 알려주기
이런 도구는 어떻게 알려주는걸까요? 사람에게 알려줄 때는 어떻게 알려줄까요?
"구글에 검색하면 너가 모르는 정보들이 나와."
"복잡한 연산은 계산기에 물어보면 나와."
라고 알려줍니다. 마찬가지입니다. 프롬프트로 갖고 있는 도구와 해당 도구를 언제 사용해야 하는지를 알려줍니다. 그러면 Visual ChatGPT는 적재적소에 알맞은 도구를 사용하게 되죠.
이미지 생성뿐만 아니라 아래처럼 검색도 가능합니다. 서래향은 ChatGPT가 만들어낸 가상의 음식점이 아닌 정말 실존하는 음식점입니다.
재귀적인 도구 사용
또한, 한번에 하나만 도구를 사용하는 것이 아니라 재귀적으로 도구를 사용 가능합니다.
Olivia Wilde의 남자친구가 누구인지,
그의 나이는 얼마인지,
거기에 0.23승을 곱하면 얼마인지
재귀적으로 계산하여 위처럼 계산을 해줍니다. 실제로도 정확히 맞는 답이죠.
오르카봇 적용기
제가 다니고 있는 코르카에는 오르카봇이 있습니다. 기존에는 GPT-3 API에 붙어서 대답해주던 챗봇이었죠.
사람들이 점심시간에 밥 먹을 곳이 필요할 때 항상 허구의 음식점만을 대답하던 오르카봇, 이미지를 전혀 이해하지 못하는 오르카봇.
이 오르카봇에게 새로운 기술을 통해 업그레이드해줘야겠다 결심했습니다.
개발은 다음 순서로 진행하였습니다.
- Visual ChatGPT를 Fast API를 통해 사내 서버에 띄워두었습니다. (RTX 3090 2대 사용)
- 오르카봇 백엔드에서 Visual ChatGPT에게 물어보는 서비스 로직을 구현했습니다.
- 해당 서비스와 연결되어 있는 컨트롤러에 슬랙 멘션 이벤트 핸들러를 붙였습니다.
이제는 진짜 존재하는 음식점을 추천해주며, 이미지를 이해하여 대답해주고, 새로운 이미지를 만들거나 수정까지 해주는 오르카봇이 되었습니다!
프로틴 보충제를 물어보기도 하고, 다람쥐 이미지를 그리기도 하고, 삼성동 근처에서 먹을만한 스시집을 물어보기도 하죠.
결론
- 지금까지 text에만 제한적이던 ChatGPT가 LangChain과 Visual Foundation Model의 결합을 통해 image를 인식하고, 만들어낼 수 있게 되었습니다.
- langchain을 통해 ChatGPT가 허구의 답변이 아닌 진실된 답변을 합니다. 모르면 구글링을 해서 알려줍니다!
앞으로는 이런 것들을 해보고 싶습니다.
- 최근에 나온 ToolFormer도 이런 도구 선택 방법에 대한 연구라고 합니다. 해당 논문도 읽어보고 오르카봇에 적용해보고 싶습니다.
- gpt_index 라고 하는 기술이 있습니다. Database에 있는 내용들을 미리 인덱싱해서 저장해두고 그 곳에서 정보를 찾아서 대답해주는 거죠. Google Search를 내부 Database 안에서 할 수 있는 개념입니다. 이것 또한 적용해보고 싶습니다.
- 지금까지의 대화 내역을 저장할 때 단순히 텍스트로만 저장합니다. 하지만 사람이 대화 내용을 기억할 때 추상적인 내용들로만 변환하여 저장하듯이 오르카봇도 그랬으면 좋겠습니다. 대화 내역을 더 정확하게, 더 작은 메모리로 기억할 수 있을 것입니다.