랭체인(LangChain)이란
대규모 언어 모델(LLM, Large Language Model)을 기반 앱 구축을위한 오픈 소스 프레임워크를 말합니다. 원래 ChatGPT, LLama 등의 LLM을 활용한 애플리케이션을 구축하려면 다음과 같은 작업들을 해줘야 합니다.
1) 여러 LLM별로 인터페이스 별도 구성
2) LLM에게 했던 이전 대화 내용 기록을 별도로 저장 및 LLM에게 제공(컨텍스트를 맞춘다고도 합니다)
3) 각종 Data source로부터 데이터를 수집해 LLM을 튜닝 또는 LLM에게 질의하는 파이프라인을 직접 구성
4) 등등..
즉 랭체인은 이렇게 LLM 기반의 앱 개발을 좀 더 편하고 빠르게 해줄 수 있도록 하는 "프레임워크"라고 보면 됩니다.
랭체인 구성 요소
1) LLM 추상화
우리가 객체지향 프로그래밍 시간에 배웠던 추상화 개념과 일치합니다. 자동차를 운전할 때, 어떤 차를 운전하든 핸들을 왼쪽으로 꺾으면 차가 왼쪽으로 가고 핸들을 오른쪽으로 꺾으면 차가 오른쪽으로 간다는 것을 우리는 알고 있습니다. 핸들의 움직임에 따라 내부적으로 어떻게 동작하는지는 우리가 알 필요가 없죠. 어떤 차든간에 핸들의 방향에 따라 차가 나아간다는 것만 알면 됩니다.
마찬가지로 현재 세상에 나온 여러 LLM들은 서로 특성 등이 상이하기 때문에, 애플리케이션에서 사용할 LLM별로 특성 등을 파악하는 것은 매우 번거롭고 힘든 일입니다. 따라서 랭체인은 LLM 추상화를 통해 어떤 LLM을 사용하던 간에 동일한 인터페이스를 우리에게 제공해줌으로써, 우리는 내부적으로 어떤 일이 일어나는지 신경쓸 필요 없이 앱을 구축할 수 있게 해줍니다.
2) 프롬프트
프롬프트는 LLM에 전달하는 명령어를 말합니다. 특히 랭체인에는 "프롬프트 템플릿 클래스"라는 것이 있습니다. LLM에게 전달할 컨텍스트와 쿼리, 출력 형식 등을 직접 수동으로 작성할 필요 없이 자동으로 프롬프트의 구성을 구조화(템플릿화)해주는 것이라고 이해하면 됩니다.
3) 체인
LLM 기반 앱은 단순히 LLM에게 뭔가를 질의하고 끝나기보다는 여러 태스트들이 이어진 형태로 동작하는 경우도 많습니다. 예를 들어
1. 특정 데이터 검색
2. 검색된 데이터 요약
3. 요약된 데이터 기반으로 LLM에게 질의
체인은 이 일련의 Task들이 서로 연결될 수 있도록 해주는 것이라고 이해하면 됩니다.
4) 인덱스
LLM들은 특정 날짜까지만(ex: 2023년 4월 등)의 데이터를 학습했기 때문에 상황에 따라 잘못된 답변을 내놓을 수 있습니다(이를 할루시네이션이라고도 부릅니다). 이 때 LLM에게 외부의 데이터를 직접 학습시켜서 보다 정확한 답을 내놓을 수 있도록 증강시킬 수 있는데 이를 RAG(Retrieval-Augmented Generation)이라 부릅니다. 이 RAG를 위해서는 외부 데이터 소스에 접근할 수 있는 기능이 필요하며, 랭체인에서는 이를 지원합니다. 이때 랭체인에서 이 외부 데이터들을 쉽게 탐색할 수 있도록 구조화하는 모듈을 인덱스라고 부릅니다.
5) 메모리
사용자가 프롬프트로 LLM과 질의를 주고받는 동안, 그 대화의 내용(컨텍스트)을 기억해 향후 적용할 수 있어야 합니다. 기본적으로 LLM은 채팅으로 직접 이전 대화에서의 컨텍스트를 전달해야 하지만, 랭체인은 애플리케이션에 "메모리"를 추가해 직접 채팅으로 컨텍스트를 전달하지 않고도 LLM이 컨텍스트를 기억하도록 해준다고 이해하면 됩니다.
6) 에이전트
LLM과 하나 이상의 도구를 결합해, LLM을 통해 수행할 일련의 작업을 선택하는 것이라고 이해하면 됩니다.
참고글