[7기 랭체인] Langchain 친해지기 + LLM 활용 Web demo

안녕하세요. 7기 랭체인 방에 langchain이랑 조금씩 친해지고 있는 정정민입니다. 😄

오늘 포스트에서는 Langchain을 공부하면서 느낀

  1. Langchain의 컨셉과 유용성 (연구자의 입장에서)

그리고 코드 작업을 하면서 나온 결과물인

  1. 랭체인으로 LLM 성능 비교 데모

를 말씀드리겠습니다.


1. Langchain의 컨셉과 유용성 (연구자의 입장에서)

공식 홈페이지에 나온 Langchain의 설명은 이렇습니다:
“Langchain이란 언어 모델을 기반으로 하는 어플리케이션 개발을 위한 프레임워크입니다”


사실 잘 와닿지는 않네요.

그래서 공식 docs(설명서, 링크)를 읽어 보고 제가 내린 결론은 이렇습니다:
“LLM을 가지고 재밌는 것을 만들 때, 필요한 주변 자질구래한 작업을
대신 해주는 혹은 이미 필요할 줄 알고 다 만들어 둔 녀석”


연구 과정에서
연구가 잘 되었는지 살펴보기 위해서는, 학습 모델에 데이터를 입력해주고 출력 봐야겠죠??

하지만, 데이터를 입력하는 것과 출력된 결과를 살펴보는 것도 나름의 수고가 들어갑니다.
AI 모델이 받아들일 수 있는 형태로 데이터를 변경해야하고,
AI 모델이 뱉은 결과를 주섬주섬 모아서 사람이 보기 좋게 만들어야하죠.

예를 들어) 이 이미지가 고양이인지, 강아지인지 맞추는 AI 모델은
- 입력으로 사람이 이해할 수 없는 이미지로 변경해서 넣어주고
- 출력으로 뭐.. [0.152, 0.885] 이렇게 혹은 [-1.35, 0.774] 이렇게 뱉습니다. 기가 차죠 😫


이처럼, AI 시스템을 만들기 위해 필요한 주변 작업들이 많이 있는데,
(LLM을 포함하는) Language Model을 활용하는 시스템에서 필요한 주변 작업을
상당히 넓은 영역에서 대신해주는 친구가 Langchain 입니다.

그 범위는 연구자의 범위를 넘어, 개발자의 영역까지 포괄하고
또한, 패지키 사용이 직관적이라 난이도가 상당히 낮아 일반인까지도 조금만 공부하면 쉽게 사용할 수 있는 지경입니다!


Langchain은 ‘Language model에 필요한 것들을 묶어 chain 처럼 쓰겠다’라는 의미로 이름을 지은 것 같지만
앞서 말씀드린 것처럼 ‘일반인’ - ’개발자’ - ‘연구자’ 의 역할을 묶어주는 생태계 사슬을 만들지 않았나 싶습니다 😮


Docs를 보고 제가 이해한 Langchain의 흐름을 공유드리겠습니다.


언어 모델(Language Model)의 가장 기본입력으로 글을 받아 출력으로 글을 출력합니다.

  • 전처리 부분은 입력 데이터에 관련한 여러 기능을 제공하고 Prompt templates(링크)라 부릅니다.

  • LLM 모델은 이 프로세스의 핵심 기능을 제공하며 LLM(링크) 라고 부릅니다.

    • 주의점은

      • Langchain은 LLM 모델을 개발하거나, 학습하거나, 추론하는 것을 지원하지 않습니다.

      • 결과 모델이 들어갈 통일된 자리만 마련하는것이 Langchain의 역할입니다.

  • 후처리는 모델의 출력으로 나온 결과를 원하는 형태로 재구성할 수 있는 모듈로 Output parsers(링크)라 합니다.



그런데, 저희 chatGPT 같은걸로 문서도 넣고, 웹페이지 링크도 주고 하죠?
그런 개발 업무와 같은것도 지원합니다(여기서부터 신세계입니다). 그림으로 그리면 이렇게 됩니다.

  • 정보 긁기는 사용자가 원하는 정보 소스에서 글 정보를 뽑아올 수 있도록 지원하는 파트로 Retrieval(링크)라고 합니다.

    • 타겟할 수 있는 정보 소스는 pdf, web 정도 말씀드렸지만 공식 문서에 나와있는 가지수로는 30개가 됩니다. (링크)

    • 내부 코드를 살펴봤는데, 사실 어렵지 않게 구현되어서 custom retrieval을 만드는것도 쉽겠더라구요!



여기까지는 기본적인 LLM에 대한 설명이었는데, 저희가 chatGPT를 가지고 “대화”를 할 수 있는 것처럼
단순 LLM 모델도 대화가 가능한 기능을 넣어두었습니다.

대화라는 것은 이전의 만든 & 입력해준 글을 모아둔 정보만 있으면, 그리고 그것을 바탕으로 다음에 나올 말을 예측하면 되는 시나리오입니다. 따라서 정보를 저장할 공간(DB)과 말을 하는것처럼 행동하는 LLM이 필요합니다.

  • DB는 이전의 대화를 저장하거나 입력으로 제공한 외부 정보를 모아두는 공간으로 Memory(링크)라 불립니다.

  • 이를 이용해 system, user, AI 라는 화자를 인식하고 역할에 맞도록 출력을 내보내주는 Chat models(링크)가 존재합니다.



자, 마지막 변형입니다.

바로 설명을 하기 전에 하나의 개념을 말씀드리겠습니다. Agent라는 개념이에요. 이는 어떠한 환경 안에서 본인이 할 수 있는 모든 능력을 동원해 문제를 해결하는 객체를 부르는 용어입니다. 마치, 지난 주말에 “쿠폰 가지고 마트가서 우유랑 두부좀 사와! 이번에는 지갑 두고가지 말고” 라는 와이프의 명령문이 들어왔을 때, 제 모든 능력을 가지고 퀘스트를 수행한 저의 모습과 비슷합니다. 🤔

LLM 모델이 글을 만들어 낼 때, 어떠한 추론 이유(reason)를 기반으로 글을 만들겠죠?
이처럼 LLM이 독립적인 추론 사고를 할 수 있다는 가정으로 나온 변형입니다.

이 변형은 대화나 글의 생성이 아닙니다.

어떠한 최종 목적지만 있고, 그것을 수행하는 모든 방법을 “스스로 생각해서 설계하고” 설계한 필요 행동을 “직접 행하면서” 결과를 만들어 내는겁니다.

이 과정에서 행동을 할 수 있는 능력을 주어야하니 agent에 여러 기능을 추가할 수 있습니다. 심지어 LLM 혹은 Chat model의 능력을 부여할 수도 있구요..

  • Agent(링크)란 명령 문장을 수행하기 위해 필요한 기능을 갖고 있는 독립 객체로 스스로 해야할 것들을 설계하고 그것을 스스로 행하고 다음 행동을 해나가는 객체입니다.



2. 랭체인으로 LLM 성능 비교 데모


위에서 가장 기본 모형인 LLM은, 여러 LLM 모델이 들어갈 자리를 만드는 역할을 하기에
어떠한 LLM이 들어와도 된다고 했습니다.

그래서 이런 생각이 들더라구요.

“입력 문장에 반응해서 여러 LLM들이 각자의 대답을 내놓으면 재밌겠다!”

네, 만들었습니다. (Full screen으로 보세요!!)


여러 LLM 모델을 사용하기 위해서는 해당 모델에 접근할 수 있는 API가 필요합니다.

본 데모에서는 OpenAI, Cohere, Google, HuggingFace의 여러 모델을 테스트할 수 있고 이들에 대한 개인마다의 API를 미리 준비하셔야 합니다. API와 인증키를 발급하는 과정은 7기 랭체인 온라인 모임에서 설명하겠습니다. (제가 링크는 거의다 달아두었습니다. 또한 구글에 물어보시면 다 알려줍니다 ㅎㅎ)

더욱 많은 모델을 시도해보았지만

  • API를 발급 받지 못하거나

  • AWS의 경우는 동아시아 지역에는 아직 모델을 지원하지 않거나

등의 이유로 사용하지 못한 모델들이 있습니다.


아래는 사용 결과 데모 영상을 올려드립니다.

demo.mp4

참고로 2010년 월드컵 2등 나라는 네덜란드입니다. huggingface model만 틀렸네요 ㅋㅋ;;



인사이트

  • Langchain은 요즘 핫합니다.

  • 핫한 이유가 있었습니다.

  • LLM이 요즘 많은 관심을 받고 있고, 핵심 LLM 기술을 활용해 개인만의 서비스 혹은 제품을 만들 수 있는 세계가 열려가고 있습니다.

  • 발전 가능성이 크고 다양한 시도를 할 수 있는 좋은 무기가 될 수 있을 것 같아요.

  • 같이 공부합시다! Langchain!



작성자








9
7개의 답글

👉 이 게시글도 읽어보세요