본문 바로가기

개발/GenAI

Zl랄발광 랭체인 #1

요새 핫한 생성형 AI, 이걸 써먹을 수 있는 랭체인 프레임워크에 대해 알아보자!

하찮은 저 앵무새를 보라!

여러분은 LLM이라는것을 아는가? LLM은 Large Language Model의 약자로 엄청나게 많은 자본을 잡아먹어 기존의 LM(Language Model)의 사이즈를 키운것으로 이해하면 편할것이다. 이러한 LLM을 원동력으로 하는 애플리케이션을 만들어야 산업전반적으로 써먹을텐데 그부분에 대해서는 언어모델의 연구만큼 이루어져있지 않은것이 현실이다. 랭체인(Langchain)은 그 부분을 해소시켜주는 대표젹인 프레임워크로 이미 수면아래에서는 그 가능성을 알아보고 도입하고자 하는 사람들이 많은것 같다. 필자역시 그중하나로 요 랭체인이라는 아이를 잘 노나먹어(?)보자는 의미에서 공부하고 그 내용을 블로그로 써보려고 한다. (물론 내 공부방식이 나만의 언어로 재정의해야 직성이 풀리는 타입이라 그런것도 있다.. ㅎㅎ 딱 독스보고 팟! 개발하는 사람 참 부럽다..)

요 랭체인이라는 아이는 언어모델(Language Model)과 외부 도구를 마치 사슬처럼(Chain) 연결해서 응용할 수 있게 해주는 것이다. 여러가지 모듈을 내장하고 있고 요 아이를 손발처럼 잘 쓸수있다면 어유 무서울게 없겠다 ㅎㅎ

랭체인의 모듈들

위 그림을 보라. 아주 굉장하지 않은가? 이렇게나 많고 유용한 모듈들이 집약적으로 묶여있는것이 바로 랭체인이다! 이렇게 지원해주는 내장모듈들을 가지고 사용자가 적절히 조합하고 구성하여 차곡차곡 쌓아가면서 최종적으로 하나의 개발을 이루어질 수 있게 하는 마치 '밀키트'같은 녀석이다. 물론 개인적으로 있는 도구를 잘 사용하는것도 좋지만 그 원리를 잘 아는것이 더 중요하다고 생각한다. 단순활용만으로는 어느 적정지점까지 가면 한계점이 있기 마련이라고 생각하기 때문에ㅎㅎ 물른 내 철학일뿐. 각자에겍 맞는 방향을 택해서 공부하자!

이제, 각 모듈에 대하여 알아보자.
랭체인은 크게 Model I/O, Chain, Memory, Data Connection, Agents 등으로 구성된다. 일반적인 개발플로우에 따라 모듈들의 순서를 좀 바꿔서 소개해보겠다!

1.  Data Connection

Data Connection은 데이터와의 인터페이스를 말한다. 일반적으로 사용자들만의 데이터가 많이 사용되고 이들을 전처리할 소요가 굉장히 많을것이다. 해당모듈은 이러한 과정들을 집약적으로 다 수행할 수 있게 해준다.

Langchain Data Connection

대표적인 세부모듈들은 아래와 같다.

  • Document loaders : 다양한 외부소스로부터 데이터를 불러오는 모듈이다. 일종의 파이프라인과 같다.
  • Document transformers : chunking(분할), 형태변환, 중복제거 등 불러들인 데이터들에 대해 전처리를 수행하는 모듈이다.
  • Text Embedding Models : 비정형형태로 들어오는 텍스트들을 임베딩시켜주는 모듈이다.
  • Vector Stores : 임베딩된 데이터를 저장하고 관리하는 일종의 데이터베이스 모듈이다.
  • Retrievers : Retriever는 검색이라는 의미로 관리되는 임베딩 데이터에 대한 쿼리를 처리해주는 모듈/기능으로 이해하면 쉽다.

2. Model I/O

modle i/o는 언어모델과의 인터페이스에 해당한다. 사용되는 언어모델은 랭체인에서 바로 지원해주진 않고 오픈소스로 풀려있는 모델이나 open ai와 같은곳과 연계하여 사용하기 때문에 굉장히 중요한 모듈중 하나이다. 

Langchain Model I/O

그 구성요소로도 많은것이 있지만 크게 다음과 같다.

  • Prompt : 언어모델에 들어가는 input을 일종의 템플릿화하여 동적으로 관리할 수 있게 하는 요소
  • Language Model : LLM 애플리케이션의 핵심인 언어모델이다. 목적에 맞게 혹은 성능에 따라 선택하여 사용하면 된다.
  • Output Parser : 모델에서 나온 output의 정보를 추출한다. 우리에게 익숙한 text형태로 나오는것이 아니기때문에 그 안에서 필요한 정보들만 추출해주는 모듈이라 할 수 있겠다.

 

3.  Chains

chain이 랭체인의 가장 큰 유니크함이라 할 수 있겠다. 단순한 작업이야 단독으로 LLM을 불러와 사용할 수 있지만 복잡한 작업들은 대개 그럴 수 없다. 즉, 서로다른 기능을 수행하는 컴포넌트와 LLM을 유기적으로 엮어주는 아주 중요한 모듈인 것이다.

Langchain Chains

4. Agent

chain이 랭체인의 유니크함이었다면 Agent는 랭체인의 미래!! 라고 할 수 있겠다. agent는 language model이 inference model로써 사용되어 어떤 작업을 어떤순서로 수행할지 결정한다.  그래서 tools이라는 요소가 중요한데,

Langchain Agent 예시

그 tools에는 다음내용을 필수적으로 전달해야 한다.

  • Agent가 올바른 tools사용할 수 있도록 액세스 권한
  • Agent가 tools를 잘 사용할 수 있도록 기능과 사용법을 설명

5. Memory

memory는 chain 실행 전후에 있었던 내용을 기억하여 더 많은 정보를 참조할 수 있게 해주는 기능이다. 물론 다방면으로 사용할 수 있지만 크게 애플리케이션 정보 기록(history)관리 및 상태(state) 관리 쯤으로 이해하면 좋을 것 같다.

Langchain Memory

이렇듯 다양한 랭체인 모듈들을 천천히 공부하면서 포스팅 해보겠다! 뽜이팅 ⭐️

'개발 > GenAI' 카테고리의 다른 글

OpenSource 기여자 되기 (feat. LangChain)  (2) 2024.02.07