들어가며
최근 AI 개발이나 LLM(Large Language Model)을 활용한 서비스 개발이 급속히 증가하면서 팀과제나 학습에서 개인적으로 관심을 갖게된 기술중 하나가 바로 LangChain입니다 이번 글에서는 LangChain의 개념과 활용 방법, 그리고 왜 AI 개발에 LangChain이 유용한지 가볍게 알아보려 합니다.
랭체인(LangChain)이란?
LangChain은 다양한 언어 모델을 쉽게 연결하여 자연어 처리를 기반으로 하는 애플리케이션을 구축할 수 있게 도와주는 도구입니다. 간단히 말하면, 여러 가지 도구나 API, 데이터베이스 등을 언어 모델과 쉽게 결합하여 더욱 강력하고 유용한 AI 서비스를 만들 수 있도록 지원하는 오픈소스 라이브러리입니다.
랭체인(LangChain)의 주요 구성 요소
- LLM 추상화 (Abstraction) 자동차 시동을 걸듯 내부 구조를 몰라도 언어 모델을 쉽게 사용할 수 있게 합니다.
- 프롬프트 템플릿 (Prompts) 구조화된 프롬프트 작성을 도와 정형화된 명령 구성을 쉽게 합니다.
- 체인 (Chains) 여러 LLM 호출 작업, 검색, 분석 단계를 연결해 복잡한 워크플로우를 처리할 수 있습니다.
- 인덱스 (Indexes) 외부 문서를 로딩, 분할하고 벡터 DB에 저장하여 효율적으로 검색하고 응답 품질을 높입니다.
- 메모리 (Memory) 사용자 대화 맥락을 저장해 챗봇에 지속된 기억력을 부여합니다.
- 에이전트 (Agents) LLM이 스스로 도구(API, 검색, DB 등)를 선택해 작업할 수 있는 능력을 제공합니다.
랭체인(LangChain)은 무엇을 도와줄까요?
우리가 음식을 만드는 과정을 예시로 들어보겠습니다.
음식 또는 요리를 하려면 다양한 재료(데이터), 요리 도구(LLM), 요리법(프롬프트)이 필요하겠죠?
랭체인은 이 모든 것들을 잘 정리하고 연결해서 우리가 원하는 요리(AI 애플리케이션)를 쉽고 빠르게 만들 수 있도록 도와주는 훌륭한 스마트 주방 도우미 라고 할것 같습니다
아래는 랭체인 구조의 주요 구성 요소들을 예시와 함께 설명합니다.
- 다양한 LLM 연결: 마치 여러 종류의 오븐(GPT-3.5, GPT-4, Llama 등 다양한 LLM)을 필요에 따라 쉽게 바꿔 쓸 수 있게 해줍니다.
- 복잡한 작업 연결: 하나의 요리가 여러 단계로 이루어지듯이, 랭체인은 여러 AI 모델이나 도구(검색 엔진, 데이터베이스 등)를 순서대로 연결해서 복잡한 작업을 수행하게 합니다. 예를 들어, 질문을 이해하고(LLM), 필요한 정보를 검색하고(검색 엔진), 그 정보를 바탕으로 답변을 생성하는(LLM) 일련의 과정을 쉽게 만들 수 있습니다.
- 기억력 제공: LLM은 기본적으로 이전에 나눈 대화를 기억하지 못합니다. 랭체인은 LLM이 이전 대화를 기억하고 문맥을 유지할 수 있도록 도와줍니다. 마치 요리 도우미가 우리가 어떤 재료를 넣었는지 기억하고 다음 단계를 알려주는 것처럼요.
- 다양한 데이터 활용: 요리에 다양한 재료가 필요하듯이, 랭체인은 웹 페이지, 문서, 데이터베이스 등 다양한 종류의 데이터를 LLM이 이해할 수 있는 형태로 바꿔서 활용할 수 있게 해줍니다.
- 논리적인 사고 흐름 만들기: 마치 요리사가 요리 순서를 계획하듯이, 랭체인은 LLM이 질문에 답하거나 작업을 수행할 때 어떤 단계를 거쳐야 할지 논리적인 사고 흐름을 만들 수 있게 해줍니다. 이걸 "에이전트(Agent)"라고 부르기도 합니다.
랭체인(LangChain) 기본 사용법
간단하게 랭체인에 대한 기본 사용법을 python 코드로 예시를 들어 보겠습니다
우선 시작은 랭체인을 설치해줍니다
pip install langchain openai
간단한 프롬프트 사용예시
from langchain.llms import OpenAI
llm = OpenAI(api_key="YOUR_API_KEY")
response = llm("LangChain이란 무엇인가요?")
print(response)
체인(chain)을 활용한 예시
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
prompt_template = PromptTemplate(
input_variables=["product"],
template="{product}에 대한 광고 카피를 작성해주세요."
)
chain = LLMChain(llm=llm, prompt=prompt_template)
result = chain.run("스마트폰")
print(result)
LangChain은 위코드에서 다음과 같은 효과를 제공합니다.
- 프롬프트 구성과 관리가 간편
- 언어 모델 호출의 추상화 및 간편한 실행
- 코드의 재사용성 및 유지보수성 증가
이를 통해 LangChain이 없을 때보다 더 효율적이고 구조적으로 AI 응용 프로그램을 구축할 수 있습니다.
RAG(Retrieval-Augmented Generation) 구현
RAG는 사용자의 질문과 관련된 데이터를 검색하여 답변의 정확성을 높이는 기술입니다.
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
loader = TextLoader('data.txt')
documents = loader.load()
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever()
)
result = rag_chain.run("LangChain을 설명해주세요.")
print(result)
랭체인이 RAG 구현에 어떻게 사용될까요?
랭체인은 RAG의 각 단계를 쉽게 구축하고 연결할 수 있도록 다양한 기능을 제공합니다.
- 데이터 로딩 및 처리:
- 문서 로더(Document Loaders): PDF, 웹 페이지, 텍스트 파일 등 다양한 형식의 문서를 불러옵니다.
- 텍스트 분할기(Text Splitters): 불러온 문서를 LLM이 처리하기 적절한 크기로 자릅니다. 너무 길면 LLM이 한 번에 처리하기 어렵고, 너무 짧으면 문맥이 끊어질 수 있습니다.
- 임베딩(Embedding) 생성:
- 분할된 텍스트 조각들을 벡터(숫자 배열) 형태로 변환합니다. 이 벡터는 텍스트의 의미를 담고 있어서, 의미가 비슷한 텍스트는 벡터 공간에서 가깝게 위치하게 됩니다.
- 벡터 저장소(Vector Store):
- 생성된 임베딩 벡터들을 저장하고 검색할 수 있는 데이터베이스에 저장합니다. 사용자가 질문을 하면, 질문도 임베딩으로 변환하여 이 벡터 저장소에서 질문과 가장 유사한(의미적으로 가까운) 텍스트 조각들을 찾아냅니다.
- 검색(Retrieval):
- 사용자의 질문과 관련된 정보를 벡터 저장소에서 효율적으로 검색합니다. 랭체인은 다양한 검색 방식을 지원합니다.
- 생성(Generation):
- 검색된 관련 정보(콘텍스트)와 사용자의 질문을 LLM에 함께 전달하여 답변을 생성합니다. 랭체인은 이때 프롬프트 템플릿 등을 사용하여 LLM이 정보를 잘 활용하여 답변을 만들도록 유도합니다.
어떨때 주로 활용될까?
랭체인은 LLM을 활용한 다양한 AI 애플리케이션을 만들 때 유용합니다. 몇 가지 예시를 아래에 들어보겠습니다
- 채팅봇: 사용자의 질문에 답하고, 이전 대화를 기억하며, 필요에 따라 외부 정보를 찾아 답변하는 똑똑한 채팅봇을 만들 때 사용합니다.
- 문서 요약 및 질문 답변 시스템: 긴 문서를 읽고 핵심 내용을 요약해주거나, 문서 내용에 대해 질문하면 답변해주는 시스템을 만들 때 사용합니다. (이때 RAG 개념이 중요하게 쓰일 수 있습니다)
- 콘텐츠 생성: 특정 주제에 대한 블로그 글, 이메일, 마케팅 문구 등을 자동으로 생성하는 도구를 만들 때 사용합니다.
- 데이터 분석 보조 도구: 복잡한 데이터에 대해 질문하면 LLM이 데이터를 분석하고 인사이트를 제공하는 도구를 만들 때 사용합니다.
- 개인 비서: 이메일 작성, 일정 관리, 정보 검색 등 다양한 작업을 도와주는 개인 비서 애플리케이션을 만들 때 사용합니다.
마치며
LangChain은 LLM을 활용한 서비스 개발에 복잡한 과정을 비교적 쉽고 효율적으로 만들어주는 강력한 프레임워크입니다 특히 다양한 구성요소의 모듈화와 유연한 통합 기능을 통해 개발자가 빠르게 목표하는 결과물에 도달할 수 있도록 도와줄 수 있지 않을까 생각합니다.
AI 관련한 개발이나 서비스를 생각하고 있다면 LangChain을 적극적으로 활용해보는 것을 추천합니다.
예제코드는 LangChain이 기본적으로 python생태계와 매우 잘 통합되어 있어 python을 활용했지만 node나 javascript 진영에서도 langchain.js를 활용해 여러가지 개발에 활용할 수 있습니다
끝까지 읽어주셔서 감사합니다.