랭체인(Langchain)은 대규모 언어 모델(LLM)로 구동되는 애플리케이션을 개발하기 위한 프레임워크입니다.
RAG에 관심이 있거나 개발하시는 분들이라면 랭체인을 한 번쯤은 들어보셨을 것입니다.
GPT와 같은 LLM을 이용해 애플리케이션을 만들려 할 때 부수적으로 개발해야 할 모듈이 많습니다.
예를 들어, 문서를 통한 QA 시스템을 만들 때는 기존 FAQ나 정해진 매뉴얼을 불러오는 로더(Loader)부터 데이터베이스화, 프롬프트 작성 등 간단한 시스템에도 서비스를 위한 모듈을 모두 개발해야 합니다. 랭체인(Langchain)은 LLM을 사용하기 위한 다양한 모듈을 통합해 제공하는 프레임워크입니다.
랭체인(Langchain)의 주요 특징과 기능
프롬프트 관리 (Prompt Management)
- 프롬프트를 체계적으로 설계하고 관리할 수 있도록 도와줍니다.
- 템플릿을 사용해 효율적인 프롬프트 제작이 가능.
체인 구성 (Chains)
- LLM을 포함한 다양한 모듈을 연결해 워크플로우를 구성할 수 있습니다.
- 예: 입력 → 프롬프트 작성 → 모델 호출 → 후처리 → 출력.
메모리 관리 (Memory)
- 챗봇 등 대화형 AI에서 대화 이력을 유지할 수 있도록 도와줍니다.
- 단기 및 장기 메모리를 지원하여 보다 자연스러운 상호작용이 가능.
데이터 소스 연결 (Data Connection)
- 데이터베이스, 웹 검색, API 등 다양한 외부 소스와 연결 가능.
- PDF, CSV 등 파일을 처리하는 기능도 포함.
에이전트 (Agents)
- LLM이 스스로 도구(예: 계산기, 검색 등)를 선택하고 활용할 수 있도록 구성.
- 복잡한 작업을 수행하기 위해 필요한 도구들을 조합하여 자동화 가능.
통합 및 확장성
- OpenAI, Hugging Face, Google Vertex AI 등의 다양한 모델과 쉽게 연동 가능.
- Python을 중심으로 한 개발 환경 지원.
랭체인(Langchain) 프레임워크 구성
LangChain Expreesion Language(LCEL)
LangChain 프레임워크에서 사용되는 기능으로, LLM 기반 애플리케이션의 로직을 보다 직관적이고 선언적으로 구성할 수 있도록 도와주는 DSL(도메인 특정 언어)입니다. 기존의 파이썬 코드보다 간결한 방식으로 체인을 정의하고, 다양한 컴포넌트를 쉽게 조합할 수 있도록 설계되었습니다.
LCEL의 주요 특징
1. 함수형 스타일의 체인 구성
• 기존의 절차적 코드 대신, 데이터를 흐름에 따라 연결하는 방식으로 LLM 파이프라인을 구성.
• | (파이프 연산자)를 활용한 직관적인 체인 표현이 가능.
2. 가독성 향상 및 코드 간결화
• 복잡한 체인을 단순화하여 유지보수 용이.
• 파이프라인을 단순한 연산으로 표현 가능.
3. 유연한 조합 및 확장성
• 프롬프트 템플릿, LLM 호출, 출력을 처리하는 다양한 구성 요소를 손쉽게 조합.
• 기존 LangChain과의 호환성을 유지하면서도 선언적 스타일로 확장 가능.
LCEL 사용법
OpenAI나 API를 활용해 LLM기반 애플리케이션을 구축할 때 지정하는 파라미터들을 파이프연산자로 쉽게 코딩할 수 있습니다.
이런 특징은 직관적인 이해가 가능하고 프롬프트 템플릿 지정, 프럼프트 사전 처리, 프롬프트 사후 처리 등 복잡한 코딩을 단순하게 표현할 수 있는 장점이 있습니다.
LCEL 기본 문법
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains import LLMChain
# LCEL 방식 적용
prompt = PromptTemplate.from_template("What is {topic}?")
llm = OpenAI(model_name="gpt-3.5-turbo")
# 기존 방식
chain = LLMChain(prompt=prompt, llm=llm)
response = chain.run({"topic": "LangChain"})
# LCEL 방식 (파이프 연산자 사용)
response = prompt | llm | str
print(response.invoke({"topic": "LangChain"}))
LCEL을 이용한 복잡한 체인구성
from langchain.prompts import PromptTemplate
from langchain.chains import SequentialChain
from langchain.chat_models import ChatOpenAI
# 첫 번째 단계: 프롬프트로 질문 작성
prompt1 = PromptTemplate.from_template("What are the benefits of {topic}?")
prompt2 = PromptTemplate.from_template("Summarize the key points about {topic}.")
llm = ChatOpenAI(model="gpt-4")
# LCEL로 체인 연결
chain1 = prompt1 | llm
chain2 = prompt2 | llm
# 연속 체인 조합
final_chain = chain1 | chain2
output = final_chain.invoke({"topic": "AI in healthcare"})
print(output)
LCEL이 적합한 사용 사례
- 빠른 LLM 기반 프로토타이핑 (챗봇, 자동화 워크플로우)
- 단계별 논리적 흐름이 필요한 애플리케이션 (문서 요약, 질의응답)
- 데이터 처리 파이프라인 (API 호출, 텍스트 변환)
LangGraph
LangGraph는 LangChain 프레임워크의 확장 기능으로, LLM 기반 애플리케이션의 워크플로우를 그래프(Graph) 기반으로 설계하고 실행할 수 있도록 도와주는 도구입니다. LangGraph를 사용하면 복잡한 논리 흐름을 보다 유연하고 구조적으로 구현할 수 있으며, 기존의 Linear Chain보다 더 복잡한 의사 결정 및 상태 관리를 효과적으로 처리할 수 있습니다.
LangGraph의 주요 특징
1. 비선형 워크플로우 설계 (Non-Linear Workflow)
- 단순한 입력-출력 체인 대신 의사 결정 노드, 병렬 실행, 조건부 흐름 등을 설정할 수 있음.
- AI 에이전트가 다양한 경로로 데이터를 처리할 수 있도록 설계 가능.
2. 상태 관리 및 메모리 기능 (State Management)
- 작업 수행 중 상태를 유지하며 이전 단계의 데이터를 참조하고, 다양한 경로를 선택할 수 있음.
- LLM이 동적 의사 결정을 내릴 때 유용.
3. 조건부 흐름 (Conditional Routing)
- 특정 입력에 따라 경로를 분기시켜 다중 결과를 처리.
- 예: 유저 질문의 유형에 따라 다른 경로로 진행.
4. 병렬 및 순차 작업 (Parallel & Sequential Processing)
- 여러 작업을 동시에 수행하거나, 순서대로 실행할 수 있도록 지원.
5. 유연한 통합 (Modular Integration)
- LangChain의 기존 기능(프롬프트 템플릿, LLM, 메모리 등)과 원활하게 통합 가능.
- 다양한 데이터 소스 및 외부 API와 연결.
LangGraph의 핵심 개념
- 노드(Node): 그래프의 개별 작업 단위로, 프롬프트 처리, API 호출, 데이터 조작 등이 포함됨.
- 엣지(Edge): 노드 간의 연결을 정의하며, 데이터 흐름과 실행 순서를 지정.
- 입력/출력 (Input/Output): 노드의 데이터 흐름을 결정하는 요소.
- 상태(State): 각 단계에서 처리된 데이터를 저장 및 공유.
LangGraph 사용예제
LangGraph는 Apache Beam과 같이 그래프 형식의 인터페이스를 통해 복잡한 과정을 시각적으로 설계, 구동할 수 있는 프레임워크 입니다. 코드를 통해 네트워크 그래프를 설정하고 각 분기에 따라 여러 컴포넌트를 섞어 사용할 수 있습니다.
기본 그래프 그리기 예제
from langchain.graphs import StateGraph
from langchain.chat_models import ChatOpenAI
# LangGraph의 상태 및 워크플로우 정의
def process_input(state):
llm = ChatOpenAI(model="gpt-4")
response = llm.predict("Tell me about " + state["topic"])
return {"response": response}
graph = StateGraph(initial_state={"topic": "Artificial Intelligence"})
# 그래프 노드 추가
graph.add_node("process", process_input)
# 실행 경로 정의
graph.set_entry_point("process")
# 그래프 실행
result = graph.run()
print(result["response"])
병렬처리 그래프 예제
def task_1(state):
return {"result_1": "Task 1 completed"}
def task_2(state):
return {"result_2": "Task 2 completed"}
graph = StateGraph(initial_state={})
graph.add_node("task_1", task_1)
graph.add_node("task_2", task_2)
# 병렬 실행 설정
graph.add_edge("task_1", "task_2")
graph.set_entry_point("task_1")
result = graph.run()
print(result)
LangServe
LangServe는 LangChain 애플리케이션을 웹 서비스로 쉽게 배포할 수 있도록 도와주는 도구입니다. 이를 통해 LangChain 기반의 LLM(대형 언어 모델) 파이프라인을 API 형태로 제공할 수 있으며, 프론트엔드 및 기타 애플리케이션과 쉽게 통합할 수 있습니다.
LangServe를 활용하면 LangChain 체인을 FastAPI 기반의 RESTful API로 변환하여 웹 애플리케이션이나 모바일 앱과 연동할 수 있습니다.
LangServe는 Langchain을 이용해 구성한 RAG시스템을 쉽게 웹 서비스로 배포할 수 있게 돕는 프레임워크입니다. 컨테이너로 묶고 별도의 서버를 구성하는 번거로움을 단 몇 줄의 코드로 쉽게 배포할 수 있도록 돕는데 의미가 있습니다.
LangServe의 주요 특징
1. 간편한 API 배포
- LangChain 모델 및 체인을 바로 REST API로 배포할 수 있음.
- FastAPI를 기반으로 하므로 자동 문서화(Swagger UI) 지원.
2. 확장성 및 유연성
- 서버리스 환경, 클라우드 플랫폼(AWS, GCP, Azure) 등 다양한 배포 옵션 지원.
- 로컬 개발 환경에서 빠르게 테스트 가능.
3. 비동기 처리 지원
- 고성능 API 처리를 위해 비동기 방식으로 요청을 처리.
4. 자동 스케일링 가능
- 컨테이너화(Docker)를 통해 마이크로서비스로 배포 가능.
5. 보안 및 인증 지원
- API 키 및 인증 토큰을 활용한 보안 강화.
LangServe의 장점
- 쉽고 빠른 배포: 코드 몇 줄로 AI 서비스를 웹 API로 변환.
- 확장성: 대량의 요청을 처리할 수 있도록 컨테이너 기반 배포 가능.
- API 문서화: FastAPI의 Swagger UI로 자동 문서화.
- 다양한 프론트엔드 연동: React, Vue.js, 모바일 앱과 쉽게 연결.
LangServe 사용 예제
간단한 LangServe 배포 코드
from langchain.llms import OpenAI
from langserve import add_routes
from fastapi import FastAPI
# LangChain LLM 설정
llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
# FastAPI 애플리케이션 생성
app = FastAPI()
# LangServe를 통해 API 경로 추가
add_routes(app, llm, path="/llm")
# 서버 실행
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
LangChain의 프롬프트 체인을 API로 배포하는 예제코드
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
prompt = PromptTemplate.from_template("What is the meaning of {word}?")
llm = OpenAI(model_name="gpt-4")
# 체인 생성
chain = LLMChain(llm=llm, prompt=prompt)
# FastAPI 애플리케이션 설정
app = FastAPI()
# LangServe로 체인 등록
add_routes(app, chain, path="/meaning")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
LangServe를 사용하면 LangChain을 기반으로 하는 LLM 애플리케이션을 빠르게 API로 변환하고 배포할 수 있습니다. 이를 통해 웹 애플리케이션, 모바일 앱, 기업 내 시스템과의 연동이 훨씬 용이해지며, 빠른 프로토타이핑 및 운영 환경 배포가 가능합니다.
LangSmith
LangSmith는 LangChain 기반의 애플리케이션을 디버깅, 평가 및 모니터링할 수 있도록 도와주는 도구입니다. LLM(대형 언어 모델)을 활용한 애플리케이션의 성능을 최적화하고, 체인의 정확성을 검증하며, 개발 과정에서 발생하는 오류를 분석하는 데 초점을 맞추고 있습니다.
LangSmith를 활용하면 LLM 기반 애플리케이션의 개발 프로세스를 더 체계적이고 효율적으로 관리할 수 있으며 추적, 로깅, 분석, 벤치마킹 기능을 제공합니다.
LangSmith가 필요한 이유는 무엇보다 '추적' 때문입니다. LLM을 활용한 애플리케이션이나 RAG를 써서 LLM에 프롬프트를 보낼 때 어느정도의 토큰이 사용됬는지 부터 응답시간, API로 보낸 데이터 ,받은 데이터 등을 확인 할 수 있습니다.
하나의 질문을 바로 확인하는 것은 print로 쉽게 확인할 수 있지만, LLM을 이용한 데이터 재생산, 서비스 등을 할 때는 문제가 있던 프롬프트를 모두 확인하는 것은 쉽지 않습니다. LangSmith는 간단한 방법으로 프로젝트를 연결해 프로젝트 내에 사용하는 LLM호출, RAG 인터페이스를 모두 추적, 관찰할 수 있어 편리합니다.
단점은 기본으로 Trace횟수를 다쓰면 유료로 전환된다는 점입니다. (v3 부터 유료로 전환...)
LangSmith의 주요 기능
1. 디버깅 (Debugging)
- LangChain의 체인을 실행할 때 발생하는 입출력 추적 및 분석.
- 프롬프트의 문제를 발견하고 수정할 수 있도록 상세한 실행 기록 제공.
- 체인의 작동 방식을 시각적으로 확인 가능.
2. 평가 및 벤치마킹 (Evaluation & Benchmarking)
- 여러 버전의 체인을 비교하고 성능을 평가.
- 자동화된 평가 도구를 통해 정확성, 응답 속도, 비용 효율성을 분석.
3. 프로파일링 (Profiling)
- 체인의 실행 시간, 비용 및 성능 병목 현상을 식별.
- API 호출 비용 추적 및 최적화.
4. 로깅 및 모니터링 (Logging & Monitoring)
- 체인의 전체 수행 내역을 시각적으로 기록 및 모니터링.
- 프로덕션 환경에서도 성능 데이터를 수집하여 분석 가능.
5. 협업 기능 (Collaboration)
- 팀원과 체인 실행 결과 및 성능 보고서를 공유.
- 실시간 피드백을 통한 지속적인 개선.
LangSmith의 장점
- 개발 속도 향상: 자동화된 로깅 및 디버깅을 통해 빠른 문제 해결 가능.
- 데이터 기반 최적화: 체인의 성능을 측정하고 데이터 기반으로 개선.
- 비용 절감: 불필요한 API 호출을 줄이고 효율적으로 자원을 사용.
- 사용자 경험 개선: 정확성과 일관성을 확보하여 최적의 LLM 응답 제공.
맺음말
LangChain이 무엇이고 어떻게 구성된 프레임워크인지 알아보았습니다. LangChain을 사용해야 하는 이유는 대형 언어 모델(LLM)을 활용한 애플리케이션을 보다 효율적이고 체계적으로 개발할 수 있도록 지원하기 때문입니다.
LangChain은 프롬프트 관리, 체인 구성, 메모리 관리, 데이터 소스 통합, 평가 및 디버깅 등의 기능을 제공하여 개발자들이 복잡한 AI 워크플로우를 간결하게 구현하고 유지보수할 수 있도록 돕습니다. 또한, 다양한 AI 모델(OpenAI, Hugging Face 등) 및 외부 시스템(API, 데이터베이스 등)과의 손쉬운 통합이 가능하며, LCEL(LangChain Expression Language)을 통해 직관적인 워크플로우 작성을 지원합니다.
나아가, LangServe를 이용하면 모델을 빠르게 API 형태로 배포할 수 있으며, LangSmith를 통해 체인의 성능을 모니터링 및 평가할 수 있어, 비용 효율적이고 최적화된 AI 애플리케이션 개발이 가능합니다. 이러한 기능을 통해 LangChain은 AI 기반 애플리케이션의 개발, 운영, 유지보수를 보다 쉽고 효과적으로 수행할 수 있도록 지원하는 강력한 프레임워크입니다.