LLM을 사용하여 애플리케이션을 개발하기 위한 오픈 소스 오케스트레이션 프레임워크이다. 챗봇, 에이전트 같은 LLM 기반 애플리케이션을 구축하는 과정을 간소화한다. 즉, LangChain은 LLM 애플리케이션을 구축하기 위한 기본 프레임워크이다.
모듈 기반 접근 방식으로 코드를 재작성하지 않고 다른 모델들까지 사용할 수 있다. 2022년 10월 헤리슨 체이스 (Harrison Chase)가 시작했고, 생성형 AI에 더 쉽게 접근할 수 있도록 하는데 중요한 역할을 했다.
추상화를 통해 LLM 애플리케이션의 프로그래밍을 간소화하는 개발 환경으로, 코드를 단순화한다. 복잡한 NLP 작업을 실행하는 데 필요한 코드의 양과 세밀한 이해를 줄일 수 있다.
체인은 여러 단계로 구성된 프로세스를 하나로 묶어주는 역할을 한다. 하나의 단계가 끝나면 그 다음 단계가 시작된다. 체인을 사용하면 복잡한 작업을 쉽게 분할하고, 단계별로 처리할 수 있다.
요리를 할 때 먼저 재료를 준비하고, 조리 방법을 따르고, 마지막으로 접시에 담는 순서와 같이, LangChain의 체인도 각 단계를 차례차례 실행한다. 이 과정에서 자동화가 가능해져, 개발자가 반복적인 작어븡ㄹ 일일이 수행할 필요가 없게 된다.
LangChain 에서 에이전트는 외부와의 소통을 담당한다. 사용자가 입력한 데이터를 바탕으로 결정을 내리고, 이를 체인으로 전달하고나 다른 모델과 연결하는 역할을 한다.
특히 AI 모델 간의 협력을 원할하게 만들어준다. 여러 AI 모델이 협력하여 더 나은 결과를 도출하게 한다.
프롬프트 템플릿은 AI 모델에 명령을 내릴 때 사용하는 틀이다. 텍스트 생성, 데이터 요약, 질문에 대한 답 등 다양한 작업을 수행할 떄 프롬프트 템플릿을 통해 지침을 AI 모델에 전달한다.
대화의 흐름을 정리하는 시나리오와 같다. AI에게 무엇을, 어떻게 물어볼지가 중요하다. 명확한 지시를 전달함으로써 원하는 결과를 얻을 수 있다.
메모리 관리는 체인과 에이전트가 데이터를 효율적으로 다룰 수 있게 하는 중요한 기능이다. 메모리는 AI가 이전에 다뤘던 정보를 기억하고, 이를 기반으로 다음 작업을 진행할 수 있도록 돕는다.
메모장에 메모를 남기는 것 같이, 중요한 정보를 잊지 않도록 기록해두고 필요할 때마다 그 메모를 침고하는 것 처럼 이전 데이터와 정보를 저장하고 필요할 때 이를 다시 활용한다. 복잡한 대화나 여러 단계를 거치는 작업에서 유용하다. AI가 앞서 진행한 단계를 기억하고, 그 데이터를 바탕으로 다음 단계를 더 던확하게 처리할 수 있게 때문이다.
체인, 에이전트, 프롬프트 템플릿, 그리고 메모리 관리는 Langchain의 핵심 요소이다. 이 개념들을 어떻게 사용하는지는 뒤에서 알아보자.
LangChain Libraries : 파이썬과 자바스크립트 라이즈러리를 포함하며 다양한 컴포넌트의 인터페이스와 통합하고, 체인과 에이전트로 결합할 수 있는 기본 런타임, 체인과 에이전트의 사용 가능한 구현이 가능하다.
LangChain Templates : 다양한 작업을 위한 쉽게 배포할 수 있는 참조 아키텍쳐 모음이다. 개발자들이 특정 작업에 맞춰 빠르게 애플리케이션을 구축할 수 있도록 돕는다.
LangServe : 랭체인 체인을 REST API로 배포할 수 있게 하는 라이브러리이다. 어플리케이션을 외부 시스템과 통합할 수 있다.
LangSmith : 개발자 플랫폼으로 LLM 프레임워크에서 구축된 체인을 디버깅, 테스트, 평가, 모니터링할 수 있으며 랭체인과 원활한 통합을 지원한다.
LangChain을 설치하면 langchain-core, langchain-community, langsmith 등이 함께 설치된다.
pip install langchain # pip 사용
conda install langchain -c conda-forge # conda 사용
OpenAI 모델을 사용할 때 필요한 의존성 라이브러리를 설치하는 방법은 아래와 같다.
pip install langchain-openai # GPT-3.5, GPT-4 등 LLM 모델과 기타 보조 도구를 포함
pip install tiktoken # OpenAI 모델이 사용하는 토크나이저
프로젝트 폴더 생성
mkdir langchain_project
cd lanchain_project
가상 환경 설정 및 활성화
python -m venv venv
source venv/bin/activate # Mac/Linux
이제 Langchain을 활용해 간단한 AI 파이프라인을 만들어보자.
LangChain을 사용하면 여러 단계의 작업을 체인으로 묶어 자동으로 처리할 수 있다. 예를 들어, 아래는 텍스트를 생성한 후 그 텍스트를 요약하는 간단한 AI 파이프라인이다.
from langchain import PromptTemplate, LLMChain
from langchain.llms import OpenAI
# OpenAI API 사용 설정
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")
# 프롬프트 템플릿 생성
template = PromptTemplate(input_variables=["topic"],
template="Write a detailed paragraph about {topic}")
# LLM 체인 생성
chain = LLMChain(llm=llm, prompt_template=template)
# 파이프라인 실행
result = chain.run("Artificial Intelligence")
print(result)
프롬프트는 AI에게 어떻게 질문할 지, 어떤 형태로 데이터를 요청할 지를 정의하는 틀이다. 아래는 프롬프트 템플릿을 사용한 다른 예제이다. 주어진 텍스트를 요약하는 과정을 자동화한다.
summary_template = PromptTemplate(
input_variables=["text"],
template="Summarize the following text: {text}"
)
summary_chain = LLMChain(llm=llm, prompt_template=summary_template)
text_to_summarize = """
Artificial intelligence (AI) refers to the simulation of human intelligence in machines that are programmed to think like humans and mimic their actions.
"""
summary_result = summary_chain.run(text_to_summarize)
print(summary_result)
LangChain의 에이전트는 여러 작업을 관리하고, 필요한 외부 데이터와 상호작용하며 결정을 내리는 중요한 역할을 한다. 에이전트는 AI가 데이터를 받아 처리한 후, 그 결과를 다시 다른 AI 모델이나 체인으로 전달하는 과정을 담당한다.
아래 코드는 텍스트 생성 도구와 요약 도구를 설정한 후, 에이전트를 통해 두 작업을 연결한다. 에이전트는 AI가 텍스트를 생성한 뒤, 바로 요약까지 자동으로 처리하게 된다.
from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType
# 에이전트에 사용할 도구 정의
tools = [
Tool(name="Text Generator", func=chain.run, description="Generates text based on a topic"),
Tool(name="Summarizer", func=summary_chain.run, description="Summarizes a given text")
]
# 에이전트 초기화
agent = initialize_agent(tools, llm, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
# 에이전트 실행
response = agent.run("Tell me about AI and then summarize it")
print(response)
LangChain은 다양한 외부 API와 연동할 수 있다. Hugging Face 모델을 연동하는 예제를 보자.
아래는 Hugging Face의 'gpt2' 모델을 활용해 창의적인 이야기를 생성하는 파이프라인을 구축하는 것이다. 이렇게 LangChain은 다양한 API와 결합하여 유연한 AI 파이프라인을 만들 수 있다.
from transformers import pipeline
from langchain.llms import HuggingFaceLLM
# Hugging Face 모델 로드
hf_model = pipeline("text-generation", model="gpt2")
# Langchain에 Hugging Face 모델 연결
llm = HuggingFaceLLM(pipeline=hf_model)
# 프롬프트 설정 및 파이프라인 실행
template = PromptTemplate(input_variables=["prompt"],
template="Write a creative story about {prompt}")
story_chain = LLMChain(llm=llm, prompt_template=template)
# 파이프라인 실행
story = story_chain.run("a futuristic world where AI controls everything")
print(story)
단순한 작업을 넘어서 복잡한 AI 파이프라인을 구성하기 위해서는 여러 데이터 소스를 통합하고, 사용자 정의 체인을 만들며, 확장 가능한 시스템을 구축하는 것이 중요하다.
SQL 데이터베이스를 간단히 통합하는 코드. 아래 코드는 SQLite 데이터베이스에 연결하여 데이터를 질의하고, 결과를 LangChain의 AI 모델을 통해 처리한다.
from langchain.sql_database import SQLDatabase
from langchain.llms import OpenAI
from langchain.chains import SQLDatabaseChain
# 데이터베이스 연결
db = SQLDatabase.from_uri("sqlite:///my_database.db")
llm = OpenAI(api_key="YOUR_API_KEY")
# 데이터베이스 체인 설정
db_chain = SQLDatabaseChain(llm=llm, database=db)
# 데이터 질의 실행
result = db_chain.run("SELECT * FROM users WHERE age > 30")
print(result)
웹 데이터를 수집해 분석하는 기능을 제공한다. 웹 스크래핑 도구와 연동해 실시간 데이터를 AI 모델에 제공할 수 있다. 예를 들어, BeautifulSoup과 같은 도구를 사용해 웹 데이터를 가져오는 코드를 작성할 수 있다.
import requests
from bs4 import BeautifulSoup
from langchain.llms import OpenAI
# 웹 데이터 가져오기
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
web_content = soup.find('p').get_text()
# AI 모델에 웹 데이터 전달
llm = OpenAI(api_key="YOUR_API_KEY")
result = llm.run(f"Summarize the following content: {web_content}")
print(result)
사용자 정의 체인을 만들어 맞춤형 파이프라인을 구축할 수 있다. 나만의 체인을 설계해 필요한 기능을 추가하거나 특화된 작업을 자동화할 수 있다.
아래는 프롬프트 템플릿을 조금 더 복잡하게 만들고, 에이전트를 특정 작업에 맞게 세밀하게 조정하는 방법이다.
from langchain import LLMChain, PromptTemplate
from langchain.agents import initialize_agent, Tool
# 맞춤형 프롬프트 템플릿
custom_template = PromptTemplate(input_variables=["data"],
template="Process the following data: {data}")
# 맞춤형 체인 생성
llm = OpenAI(api_key="YOUR_API_KEY")
custom_chain = LLMChain(llm=llm, prompt_template=custom_template)
# 에이전트 설정
tools = [
Tool(name="CustomProcessor", func=custom_chain.run, description="Processes custom data")
]
agent = initialize_agent(tools, llm)
# 실행
result = agent.run("Analyze this complex dataset")
print(result)
LangChain을 사용하여 단순한 작업뿐만 아니라 확장 가능한 AI 파이프라인을 구축할 수 있다. 복잡한 파이프라인도 유연하게 처리할 수 있으며, 이를 통해 더 넓은 범위의 AI 응용 프로그램을 만들 수 있다.
from langchain.chains import SequentialChain
# 여러 체인을 연결한 확장 가능한 파이프라인
chain1 = LLMChain(llm=llm, prompt_template=PromptTemplate.from_template("Describe {topic}"))
chain2 = LLMChain(llm=llm, prompt_template=PromptTemplate.from_template("Summarize the description of {topic}"))
# 순차적으로 체인 연결
sequential_chain = SequentialChain(chains=[chain1, chain2])
# 파이프라인 실행
result = sequential_chain.run("Artificial Intelligence")
print(result)
챗봇은 고객 응대나 정보 제공 등 다양한 분야에서 활용할 수 있다.
간단한 대화형 챗봇을 구현해보자. 사용자의 질문에 AI가 그에 맞춰 답변을 생성하고 실시간으로 제공한다.
from langchain import OpenAI
from langchain.chains import ConversationChain
# OpenAI API 설정
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")
# 대화형 체인 생성
chatbot_chain = ConversationChain(llm=llm)
# 사용자가 질문을 입력하고 답변을 받는 과정
def chatbot():
print("챗봇에 질문을 입력하세요. 종료하려면 'quit'을 입력하세요.")
while True:
user_input = input("You: ")
if user_input.lower() == "quit":
print("챗봇을 종료합니다.")
break
response = chatbot_chain.run(user_input)
print(f"AI: {response}")
chatbot()
블로그 포스트나 기사와 같은 긴 텍스트를 자동으로 생성할 수 있다.
from langchain import LLMChain, PromptTemplate
from langchain.llms import OpenAI
# OpenAI API 설정
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")
# 프롬프트 템플릿 설정
template = PromptTemplate(input_variables=["topic"], template="Write a blog post about {topic}")
# LLM 체인 생성
blog_chain = LLMChain(llm=llm, prompt_template=template)
# 주제 입력 및 블로그 포스트 생성
topic = "The future of artificial intelligence"
blog_post = blog_chain.run(topic)
print(blog_post)
[Reference]
https://www.ibm.com/kr-ko/think/topics/langchain