Haru's 개발 블로그

[LLM]LangChain이란 무엇인가? 본문

머신러닝 & 딥러닝/LLM

[LLM]LangChain이란 무엇인가?

Haru_29 2023. 12. 2. 22:57

LangChain이란?

최근 다양한 기업들이 LLM 서비스를 어플리케이션과 통합을 하여 사용하는 추세입니다. 이러한 과정을 편리하게 하기 위하여 랭체인(LangChain)은 노출하여 대규모 언어 모델과 애플리케이션의 통합을 간소화하는 SDK입니다.

여기서 중요한 점은 오픈AI와 같은 공급업체가 제공하는 모델 API를 사용하든, 오픈소스 모델을 앱에 사용하든 LLM 기반 애플리케이션을 구축하기 위해서는 단순히 프롬프트를 보내는 것 뿐만 아니라 다양한 작업들이 존재합니다. 예를 들어, 매개변수 조정부터 프롬프트 보강, 응답 조정, LLM은 상태를 저장하지 않으므로 대화의 이전 메시지를 기억하지 못하기 때문에 맥락 정보가 새로운 대화에서 컨텍스트를 다시 가져오기 위해 영구적인 데이터 베이스를 사용해야 할수도 있습니다. 또한, LLM에는 일률적인 규칙이 존재하지가 않는데 감정 분석, 분류, 질문 답변과 요약 등 다양한 도메인에 특화된 모델을 사용 할수도 있습니다.

 

  ● Data-aware: 언어 모델을 다른 데이터 소스와 연결하거나

  ● Agentic: 언어 모델이 환경과 상호작용할 수 있도록 하는 애플리케이션 개발을 지원한다. 

 

랭체인은 LLM과 애플리케이션의 통합을 간소화하도록 설계된 SDK로서 앞서 설명한 대부분의 문제를 해결할 수 있습니다. 추가적으로 랭체인은 간단하고 통합된 API를 노출하여 기본 LLM의 구현 세부 사항을 요약하는데, 이 API를 통해 개발자들은 코드를 크게 변경하지 않고 모델을 쉽게 교체하거나 대체할 수 있습니다.

LangChain에서는 검색을 통해 언어모델에 지식을 보완하는 방법을 사용합니다.

관련 코퍼스를 적절한 단위(Chunk, 청크)로 쪼개두고 임베딩해둔 다음, 질문에 대해 유사한 청크를 검색하여 활용하는 방식입니다. 이러한 개념을 프롬프트 파이프라인이라고 합니다.

 

위의 내용은 랭체인의 흐름도를 나타내는데 간단하게 알아보면 

1. 데이터 소스

애플리케이션이 LLM에 대한 컨텍스트를 구축하기 위해 PDF, 웹 페이지, CSV, 관계형 데이터베이스와 같은 외부 소스에서 데이터를 검색해야 하는 경우가 있습니다. 랭체인은 서로 다른 소스에서 데이터에 액세스하고 검색할 수 있는 모듈과 원활하게 통합하게 됩니다.

2.  단어 임베딩

일부 외부 소스에서 검색된 데이터는 벡터로 변환되어야 한다. 그래야 텍스트를 LLM과 관련된 단어 임베딩 모델에 전달하게 됩니다. 실제로 오픈AI의 GPT-3.5 모델은 컨텍스트를 전송하는 데 사용해야 하는 단어 임베딩 모델과 관련되어 있다. 랭체인은 선택한 LLM을 기반으로 최적의 임베딩 모델을 선택하게 됩니다.

3.  벡터 데이터베이스

생성된 임베딩은 유사성 검색을 위해 벡터 데이터베이스에 저장하게 됩니다. 랭체인은 메모리 내 배열부터 호스팅 벡터 데이터베이스에 이르기까지 다양한 소스에서 벡터를 쉽게 저장하고 검색할 수 있도록 지원합니다.

4.  언어 모델(LLM)

랭체인은 오픈AI, 코히어(Cohere), AI21에서 제공하는 주류 LLM과 허깅페이스(Hugging Face)에서 제공되는 오픈소스 LLM을 지원합니 다. 지원되는 모델과 API 엔드포인트 목록은 빠르게 증가하고 있습니다.

 

LangChain 모듈

LangChain은 이름 그대로 여러 구성 요소를 결합하여 애플리케이션을 만들 수 있는 체인을 제공합니다.

아래와 같이 최소한의 모듈부터 시작해서 복잡한 모듈까지, 확장 가능한 인터페이스 및 외부 소스와의 통합을 제공합니다.

 

● Model I/O - 언어모델과 인터페이스

 Data connection - 애플리케이션 특화된 데이터와 인터페이스

 Chains - 호출(Call) 시퀀스를 구성함

 Agents - 체인이 high-lebel의 지침에 따라 사용할 도구를 선택하도록 함

 Memory - 체인의 실행 사이에 애플리케이션의 상태를 유지함

 Callbacks - 체인의 중간 단계를 기록하거나 스트리밍함

 

Schema, Model, Prompt, Index, Memory, Chain, Agent 이렇게 7가지로 분류된 컴포넌트를 제공합니다.

 

1. Schema

1. 채팅 메세지
LLM과 상호 작용하는 가장 기본이 되는 인터페이스입니다.
현재는 System, Human, AI 3종류의 사용자를 지원합니다.

 

  • System : AI에게 해야 할 일을 알려주는 배경 컨텍스트
  • Human : 사용자 메세지
  • AI : AI가 응답한 내용을 보여주는 상세 메세지

2 문서
텍스트와 메타데이터를 담고있는 객체입니다.

 

2. Models

2.1 언어 모델 (LLMs)
텍스트 문자열을 입력하고, 텍스트 문자열을 출력하는 모델입니다.
LangChain 은 LLM 공급자가 아니며, 인터페이스만 제공합니다.
 
2.2 채팅 모델
채팅 모델은 언어 모델의 변형으로, 내부적으로는 언어 모델을 사용하지만 노출되는 인터페이스는 약간 다릅니다. 현재 보다 나은 추상화를 위해서 지속적으로 개선이 이뤄지고 있습니다.
 
2.3 텍스트 임베딩 모델
텍스트를 벡터 (텍스트의 의미 를 담고 있는 일련의 숫자) 로 변경합니다. 주로 두 텍스트를 함께 비교할 때 사용합니다.
 

3. Prompt

모델을 프로그래밍 하는 새로운 방법은 프롬프트를 사용하는 것입니다. 다른 데이터 유형 (이미지, 오디오) 등을 고려하여 추상화 작업이 진행되고 있으며, 현재는 텍스트를 처리합니다.
 
3.1 Prompt Template
사용자로부터 일련의 매개변수를 가져와 프롬프트를 생성할 수 있는 텍스트 문자열이 포함되어 있습니다.
 
3.2 예제 선택기 (Example Selector)
프롬프트에서 상황에 맞는 정보를 동적으로 배치할 수 있는 예제 중에서 쉽게 선택할 수 있는 방법을 제공합니다.
 
3.3 출력 파서 (Output Parser)
일반적으로 LLM은 텍스트를 출력합니다. 하지만 보다 구조화된 정보를 얻고 싶을 수 있습니다.
이런 경우 출력 파서를 이용하여 LLM 응답을 구조화할 수 있습니다.
출력 파서는 두 가지 컨셉을 갖고 있습니다.

4. Index

Index는 LLM 이 다른 소스에서 문서를 쉽게 가져올 수 있도록 하는 방법입니다. 문서 작업을 위한 유틸리티 함수, 다양한 유형의 Index, 그리고 이러한 Index 를 체이닝하여 사용합니다.
 
이제 외부 리소스 가져오는 것을 LangChain을 이용하여 아주 간단히 해결해보세요.
 
4.1 문서 로더 (Document Loader)
CSV, HTML, 메일, Image, PDF, PPT, Site, Youtube 등 다양한 소스에서 Document 를 작성할 수 있는 Loader 가 제공되고 있습니다. 전체 목록은 아래 링크에서 참고해주세요.
 
4.2 텍스트 분할기 (Text Splitters)
책과 같이 문서가 너무 길어서 LLM 에 한번에 입력이 어려운 경우, 문서를 잘게 쪼개야 합니다. 이 경우 텍스트 분할기를 이용하여 도움을 받을 수 있습니다.
 
4.3 벡터 스토어 (Vector Stores)
벡터 (Vector)를 저장하는 데이터베이스와 관련된 기능입니다. 벡터 저장소 작업의 핵심 부분은 일반적으로 임베딩을 통해 생성되는 벡터를 만드는 것입니다.
 
4.4 검색기 (Retrievers)
리트리버 인터페이스는 문서를 쉽게 결합할 수 있는 일반 인터페이스입니다.
현재 ChatGPT Plugin Retriever 와 VectorStore Retriever 가 있습니다.

5. Memory

기본적으로 체인과 에이전트는 상태를 저장하지 않습니다. 즉, 쿼리가 수행되면 독립적으로 처리합니다.
Memory 컴포넌트는 LLM 이 정보를 기억할 수 있도록 지원합니다. 간단하게는 과거 채팅 히스토리를 기억할 수 도 있고, 더 복잡한 정보를 검색 할 수도 있습니다.

6. Chain

다양한 LLM 호출하는데 사용되는 컴포넌트입니다.
 
6.1 간단한 Sequential Chains
LLMChain 을 이용하여 LLM 출력을 다른 LMM의 입력으로 사용할 수 있도록 합니다.
 
6.2. 요약 체인
한번에 처리가 어려운 문서를 나눠서 요약할 수 있습니다.

7. Agents

사용자 입력에 따라 Agent는 여러 도구 중 호출할 수 있는 경우 도구를 결정할 수 있습니다.
Agnet는 LLM 을 사용하여 수행핼 작업과 순서를 결정합니다. 이 과정에서 도구를 사용하여 출력을 관찰하거나 사용자에게 반환할 수 있습니다.
 
7.1 Tools
구글 검색, 데이터베이스 조회, Python REPL 등을 이용하여 현재 문자열을 입력받아 결과값을 출력합니다. OpenAI Plugins 과 유사한 영역입니다.

 

Comments