LangChain 튜토리얼: LLM 기반 애플리케이션 구축 가이드

GPT-4, LLaMA 같은 대규모 언어 모델(LLM) 은 지난 몇 년 동안 엄청난 가능성의 세계를 열었습니다. AI 도구와 애플리케이션이 급격히 확산되었고 ChatGPT는 순식간에 누구나 아는 이름으로 자리 잡았습니다. 하지만 차세대 앱 개발을 촉진하기 위해 만들어진 강력한 도구와 프레임워크가 없었다면 이러한 확산도 불가능했을 것입니다. 

이러한 프레임워크 중 하나인 LangChain은 기존 LLM을 사용하여 새로운 앱을 쉽게 구축할 수 있도록 해줍니다. 이 도구는 머신 러닝 전문가인 해리슨 체이스가 개발했으며 2022년에 오픈 소스 프로젝트로 출시되었습니다. 이 프레임워크는 기존 언어 모델과 새롭고 다양한 애플리케이션 구축 사이의 기술적 격차를 해소하는 데 있어 큰 진전입니다.

LangChain 설명

간단히 말해, LangChain은 AI 앱 구축 프로세스를 간소화하는 표준화된 인터페이스입니다. 서로 다른 구성 요소를 연결하고 복잡한 워크플로를 만드는 데 사용할 수 있는 다양한 도구를 제공합니다. 여기에는 LLM과 다양한 유형의 데이터 소스가 포함됩니다. 사용자가 앱과 상호작용을 하면 LangChain은 LLM에 대한 연결을 사용하여 요청을 처리하고 적절한 응답을 생성합니다. 또한 문서나 데이터베이스와 같은 외부 소스의 정보와 데이터를 사용하여 보다 정확하고 맥락에 맞는 답변을 제공할 수 있습니다.

예를 들어, 사용자가 질문을 하면 LangChain은 LLM을 사용하여 질문을 이해하고 답변을 만들어 냅니다. 하지만 응답을 개선하기 위해 하나 이상의 외부 데이터 소스를 활용하기도 합니다. 이렇게 하면 애플리케이션이 훨씬 더 지능적이고 복잡하고 전문적인 쿼리를 처리할 수 있습니다.

근본적으로 해결하고자 하는 문제와 더욱 관련성이 높은 데이터를 LLM에 제공함으로써 LLM의 기능을 향상시키는 것입니다.

Python과 TypeScript 패키지로 제공되며, 다음과 같은 몇 가지 인상적인 기능을 갖추고 있습니다.

  • 모델 상호작용: LangChain은 입력을 관리하고 출력에서 정보를 추출하여 모든 언어 모델과 상호작용할수 있습니다.

  • 효율적인 통합: OpenAI, Hugging Face 같은 인기 AI 플랫폼과 효율적으로 통합됩니다.

  • 유연성 및 사용자 정의: LangChain은 유연성, 사용자 정의 옵션 및 강력한 구성 요소를 제공하여 다양한 산업 분야에서 다양한 애플리케이션을 만들 수 있습니다.

  • 핵심 구성 요소: 프레임워크는 전체 애플리케이션 라이프사이클을 단순화하는 LangChain 라이브러리, LangChain 템플릿, LangServe, LangSmith로 구성됩니다. 

  • 표준화된 인터페이스: 표준화된 인터페이스, 신속한 관리, 메모리 기능을 제공하여 언어 모델이 데이터 소스와 상호작용할 수 있습니다.

이러한 기능들의 조합 덕분에 유연하고 빠르며 확장성이 뛰어나고 사용하기 쉽습니다. 이는 AI 개발을 시작하려는 개발자들에게 매우 반가운 소식입니다. 

LangChain은 어떻게 작동하나요?

LangChain은 LLM과 통합되는 모듈식 프레임워크입니다. 서로 다른 LLM API로 작업할 때의 복잡성과 어려움을 추상화하는 표준화된 인터페이스로, GPT-4, LLaMA 또는 사용하려는 다른 LLM에도 똑같은 방식으로 통합할 수 있습니다. 또한 동적 LLM 선택 기능이 있어 개발자가 LangChain을 사용하여 수행하는 특정 작업에 가장 적합한 LLM을 선택할 수 있습니다.

모듈식 설계는 입력 데이터를 실행 가능한 출력으로 처리하고 변환하는 과정을 용이하게 합니다. 이 소프트웨어는 텍스트, 코드, 멀티미디어 형식을 포함한 다양한 데이터 유형을 처리하며 데이터 전처리, 정리 및 정규화를 위한 도구를 제공합니다. 이는 데이터를 언어 학습 모델(LLM)에서 활용하기에 적합하게 만드는 과정이며 토큰화, 정규화 및 언어 식별 작업이 포함될 수 있습니다.

또한 LangChain은 LLM의 출력을 처리하여 앱 또는 작업별 요구사항에 적합한 형식으로 변환합니다. 여기에는 텍스트 서식 지정, 코드 스니펫 생성, 복잡한 데이터 요약 제공과 같은 기능이 포함됩니다.

LangChain의 핵심 개념

LangChain의 아키텍처는 컴포넌트와 체인이라는 개념을 기반으로 구축되었습니다. 컴포넌트는 입력 데이터 처리, 텍스트 형식 생성, 외부 정보 접근 또는 워크플로우 관리와 같은 특정 작업을 수행하는 재사용 가능한 모듈을 나타냅니다. 체인은 문서 요약, 창의적인 텍스트 형식 생성, 개인 맞춤형 추천 제공과 같은 더 넓은 목표를 달성하기 위해 함께 작동하는 연속적인 구성 요소입니다.

컴포넌트와 모듈

LangChain에서는 '컴포넌트'와 '모듈'이라는 용어를 종종 혼용해서 사용하지만, 둘 사이에는 미묘한 차이가 있습니다. 

  • 컴포넌트는 LangChain의 핵심 구성 요소로, 특정 작업이나 기능을 나타냅니다. 컴포넌트는 일반적으로 크기가 작고 특정 기능에 집중되어 있으며, 다양한 애플리케이션과 워크플로에서 재사용할 수 있습니다. 

  • 반면에 모듈은 여러 컴포넌트를 결합하여 더 복잡한 기능을 구성합니다. LangChain은 메모리 모듈(대형 언어 모델에서 사용할 데이터를 저장하고 관리하는 재사용 가능한 빌딩 블록)과 에이전트(실시간 피드백과 사용자 상호작용을 기반으로 체인을 오케스트레이션하는 동적 제어 장치) 등 몇 가지 주요 모듈에 표준 인터페이스도 제공합니다. 

컴포넌트와 마찬가지로 모듈도 재사용 가능하며, 서로 조합하여 더욱 복잡한 워크플로우를 만들 수 있습니다. 이를 특정 목표를 달성하기 위해 일련의 컴포넌트 또는 모듈을 조합하는 체인이라고 합니다. LangChain에서 체인은 워크플로우 오케스트레이션의 핵심이며, 이는 다양한 작업을 처리하는 효율적인 애플리케이션을 구축하는 데 필수적입니다.

LLM과의 통합

LangChain은 표준화된 인터페이스를 제공하여 LLM과 원활하게 통합됩니다. 하지만 LangChain과 LLM의 통합은 단순히 연결 메커니즘을 제공하는 것 그 이상입니다. 또한 언어 기반 애플리케이션 구축을 위해 LLM 사용을 최적화하는 여러 기능을 제공합니다.

  • 프롬프트 관리: LangChain을 사용하면 학습 관리자(LLM)가 작업을 이해하고 유용한 답변을 생성할 수 있도록 효과적인 프롬프트를 만들 수 있습니다.

  • 동적 LLM 선택: 복잡성, 정확도 요구 사항, 컴퓨팅 리소스 등의 요소에 따라 다양한 작업에 가장 적합한 LLM을 선택할 수 있습니다.

  • 메모리 관리 통합: LangChain은 메모리 모듈과 통합되므로 LLM이 외부 정보에 액세스하고 처리할 수 있습니다.

  • 에이전트 기반 관리: 이를 통해 변화하는 환경과 사용자 요구에 맞춰 조정되는 복잡한 LLM 기반 워크플로우를 구성할 수 있습니다.

워크플로우 관리

LangChain에서 워크플로우 관리는 특정 문제를 해결하기 위해 체인과 에이전트의 실행을 오케스트레이션하고 제어하는 과정입니다. 이는 데이터 흐름을 관리하고, 컴포넌트의 실행을 조정하며, 애플리케이션이 사용자 상호작용 및 변화하는 상황에 효과적으로 대응하도록 보장하는 것을 포함합니다. 다음은 주요 워크플로우 관리 컴포넌트입니다.

  • 체인 오케스트레이션: LangChain은 작업이 올바른 순서로 수행되고 컴포넌트 간에 데이터가 올바르게 전달되도록 체인 실행을 조정합니다.

  • 에이전트 기반 관리: 사전 정의된 템플릿과 사용자 친화적인 인터페이스를 통해 에이전트 사용이 간소화됩니다.

  • 상태 관리: LangChain은 애플리케이션 상태를 자동으로 추적하여 개발자에게 상태 정보에 액세스하고 수정할 수 있는 통합 인터페이스를 제공합니다.

  • 동시성 관리: LangChain은 동시 실행의 복잡성을 처리하므로 개발자는 스레딩이나 동기화 문제에 대해 걱정하지 않고 작업 및 상호작용에 집중할 수 있습니다.

LangChain 설정

LangChain의 장점 중 하나는 시작하는 데 필요한 조건이 매우 적다는 것입니다. 이 가이드에서는 Python을 사용하므로 컴퓨터에 Python 3.8 이상 버전이 설치되어 있어야 합니다. 그거면 충분합니다!

설치 및 구성

첫 번째 단계는 핵심 LangChain 프레임워크를 설치하는 것입니다. 가장 쉬운 방법은 이 PIP 명령을 사용하는 것입니다.

pip install langchain

다음으로 필요한 것은 LangChain과 상호작용할 수 있는 LLM입니다. 이 예제에서는 OpenAI를 사용하지만, 앱에 원하는 LLM을 사용할 수 있습니다.

pip install openai

OpenAI가 작동하려면 요청을 인증할 API 키가 필요합니다. OpenAI 계정을 만들고 API 키 섹션으로 이동하여 '새 비밀 키 생성'을 선택하면 얻을 수 있습니다. 키를 받은 후에는 안전한 곳에 보관하세요. 곧 사용해야 합니다.

마지막으로 data.txt라는 텍스트 파일을 만들어두세요. 이 파일은 LLM에 컨텍스트를 제공하는 데 사용할 외부 데이터 소스가 될 것입니다.

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

이제 재미있게 즐길 시간입니다!

LangChain을 이용한 애플리케이션 개발

LangChain 앱을 빌드하려면 텍스트 편집기나 원하는 IDE를 열고 data.txt와 같은 위치에 새 Python(.py) 파일을 만들어야 합니다. OpenAI의 GPT-3 LLM에 프롬프트를 전송하고 응답을 출력하는 매우 기본적인 앱을 만들 것입니다.

좀 더 고급 단계를 찾고 계신가요? Amazon Bedrock을 Elasticsearch 및 Langchain과 함께 사용하는 가이드를 확인해 보세요.

1단계: LangChain에서 OpenAI 클래스 가져오기

Python 스크립트 상단에 이 import 문을 추가하여 LangChain의 LLM 모듈에서 OpenAI 클래스를 가져옵니다.

from langchain.llms import OpenAI

2단계: 텍스트 파일에서 데이터를 읽는 기능을 정의합니다.

앱이 파일 경로를 인수로 받도록 함수를 정의하세요. 그러면 읽을 수 있는 파일이 열리고 그 내용이 반환됩니다.

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

3단계: OpenAI 모델 초기화하기

API 키로 OpenAI 클래스의 인스턴스를 생성하고, YOUR-OPENAI-KEY를 OpenAI에서 얻은 실제 키로 바꿉니다.

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

4단계: OpenAI에 응답을 요청하는 함수 정의하기

프롬프트를 인수로 받아 GPT-3 모델의 응답을 반환하는 함수를 작성합니다.

def get_response(prompt):
    return gpt3(prompt)

5단계: 텍스트 파일에서 데이터 읽기

텍스트 파일의 경로를 지정하고 앞서 정의한 함수를 사용하여 내용을 읽습니다. 그런 다음 데이터를 external_data 변수에 저장합니다.

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

6단계: 테스트 프롬프트 만들기

여기에서 GPT-3에 보낼 프롬프트를 정의할 수 있습니다. 이 예제에서는 텍스트를 읽고 텍스트 파일에서 어떤 TV 프로그램에 대해 이야기하고 있는지 알려달라고 요청할 것입니다.

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

7단계: GPT-3에서 응답 획득 및 출력

준비된 프롬프트를 전송하고 GPT-3에서 응답을 받아 출력하는 함수를 호출합니다.

print("Response:", get_response(prompt))

8단계: 앱 실행 및 응답 확인

이 모든 작업을 마치면 다음과 같은 Python 앱이 완성됩니다.

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

이제 Python 앱을 실행하여 제대로 작동하는지 확인하는 일만 남았습니다! 파일을 저장하고 터미널에서 다음 명령어를 사용하여 앱을 실행하세요.

python YOUR-APP-NAME.py

모든 것이 계획대로 진행되었다면 다음과 같은 응답을 받을 수 있습니다.

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

사용 사례

이 예시는 지나치게 단순화된 데모이지만, LangChain의 유연성 덕분에 새로운 AI 앱을 구축할 수 있는 가능성은 무궁무진합니다. 여기에 모든 것을 나열하는 것은 불가능하지만, 몇 가지 사례 연구를 통해 빌드할 수 있는 다양한 것들을 살펴보겠습니다.

  • 챗봇: 자언어로 질문하고 대화 기록을 유지 할 수 있는 나만의 챗봇을 만들어보세요.  

  • Q&A 앱: 원하는 정보를 요청할 수 있는 앱을 만들면 저장된 문서에서 답을 찾을 수 있습니다.

  • 텍스트 검색(BM25): 나만의 텍스트 검색 앱을 만들어 대량의 데이터를 쿼리할 수 있습니다.

  • 벡터 검색: 데이터 유사성을 검색하고 메타데이터를 필터링하는 앱을 만들 수 있습니다.

  • 하이브리드 검색(텍스트 및 벡터): 텍스트와 벡터 필터링을 모두 사용하여 유사한 문서를 매칭하는 AI를 개발합니다.

  • LangChain과 자체 LLM: LangChain을 사용해 외부 데이터 소스와 함께 자체 LLM을 사용하는 AI 앱을 만들 수 있습니다.

LangChain을 사용하여 LLM 기반 앱 구축하기

지금쯤이면 LLM의 힘과 외부 데이터 소스의 컨텍스트와 추가 정보를 결합하여 LangChain이 무한한 가능성을 제공할 수 있다는 것을 확신하실 수 있을 겁니다. 이 LangChain 튜토리얼에서 알 수 있듯이 시작하는 방법도 매우 쉽습니다. 이러한 사용 편의성과 유연성 및 강력한 기능이 결합된 LangChain은 다양한 AI 애플리케이션 개발에 이상적인 플랫폼입니다. 챗봇, Q&A 앱 또는 검색 엔진 중 무엇을 구축하든, LangChain은 혁신적이고 효과적인 솔루션을 만드는 데 도움을 줄 수 있습니다.

다음에 해야 할 일

준비가 되면 비즈니스 데이터에서 인사이트를 활용하는 데 도움이 되는 네 가지 방법을 확인해 보세요.

  1. 무료 체험판을 시작하고 Elastic이 여러분의 비즈니스에 어떻게 도움이 되는지 알아보세요.

  2. Elastic 솔루션을 둘러보고 Elasticsearch Platform의 작동 방식과 솔루션이 여러분의 요구 사항에 어떻게 부합하는지 알아보세요.

  3. 엔터프라이즈에서 생성형 AI를 어떻게 통합하고 있는지 알아보세요.

  4. 관심이 있을 만한 지인에게 이 글을 공유하세요. 이메일, LinkedIn, Twitter, 또는 Facebook을 통해 공유할 수 있습니다.

이 게시물에서 설명된 모든 기능이나 성능의 출시와 일정은 Elastic의 단독 재량에 따라 결정됩니다. 현재 제공되지 않는 기능이나 성능은 예정된 시간에 출시되지 않을 수도 있으며 아예 제공되지 않을 수도 있습니다.

이 블로그 게시물에서는 타사 생성형 AI 도구를 사용하거나 언급했을 수 있으며 이러한 도구는 각각의 소유자가 소유하고 운영합니다. Elastic은 이러한 타사 도구에 대해 어떠한 통제권도 없으며 해당 도구의 콘텐츠, 운영, 사용뿐 아니라 사용으로 인해 발생할 수 있는 손실이나 손해에 대해 어떠한 책임도 지지 않습니다. 개인 정보, 민감한 정보 또는 기밀 정보를 AI 도구와 함께 사용할 때는 주의하시기 바랍니다. 제출된 모든 데이터는 AI 학습이나 기타 목적으로 사용될 수 있습니다. 제공한 정보가 안전하게 보호되거나 비밀로 유지된다는 보장은 없습니다. 생성형 AI 도구를 사용하기 전에 해당 도구의 개인정보 보호 관행과 이용 약관을 숙지하시기 바랍니다. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine 및 관련 마크는 미국 및 기타 국가에서 Elasticsearch N.V.의 상표, 로고 또는 등록 상표입니다. 그 외의 모든 회사 및 제품 이름은 해당 소유자의 상표, 로고 또는 등록 상표입니다.