LangChain이란 무엇이며, 왜 사용해야 할까요?
LangChain은 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 간소화하는 오픈 소스 프레임워크입니다. OpenAI, Gemini(구글), Anthropic 등 다양한 LLM을 구조화하고, 도구 및 메모리 기능을 추가하여 챗봇, 가상 비서, 에이전트, AI 기반 소프트웨어 등 실제 응용 프로그램을 구축할 수 있도록 지원합니다.
LLM 프로젝트에 LangChain을 사용하는 이유는 무엇인가요?
- 체인 가능한 구성 요소: 프롬프트, LLM, 도구, 메모리를 결합하여 파이프라인을 쉽게 구축할 수 있습니다.
- 다중 모델 지원: Gemini, OpenAI, Anthropic, Hugging Face 등 다양한 모델과 호환됩니다.
- 내장 템플릿: 프롬프트를 효과적으로 관리할 수 있는 템플릿을 제공합니다.
- 다중 턴 대화 지원: 메모리와 역할을 활용하여 복잡한 상호작용을 관리할 수 있습니다.
- 도구 및 API 통합: 외부 API나 함수와의 상호작용을 통해 모델의 기능을 확장할 수 있습니다.
코드 예시: Gemini와 LangChain의 통합
다음은 LangChain과 Gemini API의 다양한 기능을 보여주는 4가지 주요 코드 예시입니다.
예시 1: LangChain을 사용한 기본 Gemini API 호출
import os
from dotenv import load_dotenv
load_dotenv(".env") # .env 파일에서 환경 변수 로드
api_key = os.getenv("GOOGLE_API_KEY") # Google API 키를 안전하게 가져오기
# LangChain에서 Gemini LLM 래퍼 가져오기
from langchain_google_genai import ChatGoogleGenerativeAI
# 특정 구성으로 Gemini 모델 초기화
llm = ChatGoogleGenerativeAI(model='gemini-2.0-flash', temperature=0.9)
# 모델에 프롬프트를 보내고 응답 받기
response = llm.invoke('langchain_google_genai에서 ChatGoogleGenerativeAI 함수의 역할을 설명해주세요.')
print(response.content)
함수 설명:
- load_dotenv(".env"): .env 파일에서 환경 변수를 로드합니다.
- os.getenv(): 스크립트에 API 키를 하드코딩하지 않고 Gemini API 키를 가져옵니다.
- ChatGoogleGenerativeAI(): 모델 이름과 창의성 수준(temperature)을 설정하여 Gemini 모델을 초기화합니다.
- invoke(): LLM에 프롬프트를 보내고 응답 객체를 반환합니다.
이 예시는 LangChain을 통해 Gemini를 호출하고 결과를 출력하는 기본 설정을 보여줍니다.
예시 2: PromptTemplate과 체인 구성 사용
from langchain.prompts import PromptTemplate
llm = ChatGoogleGenerativeAI(model='gemini-2.0-flash', temperature=0.9)
# 플레이스홀더를 포함한 재사용 가능한 프롬프트 구조 정의
prompt = PromptTemplate.from_template('당신은 파이썬 코딩 에이전트입니다. {message} 사용 방법을 설명해주세요.')
# 프롬프트 템플릿과 모델을 파이프 연산자로 체인 연결
chain = prompt | llm
# 플레이스홀더에 실제 입력 제공
message = 'heapq'
response = chain.invoke(input=message)
print(response.content)
함수 설명:
- PromptTemplate.from_template(): {message}가 동적으로 대체되는 매개변수화된 프롬프트를 생성합니다.
- | (파이프 연산자): 프롬프트와 LLM을 체인으로 연결하여 파이프라인을 형성합니다.
- invoke(input=message): 실제 사용자 입력('heapq')을 체인에 전달하고 최종 출력을 얻습니다.
이 부분은 프롬프트를 모듈화하고 구성 요소를 체인으로 연결하는 방법을 보여줍니다.
예시 3: 역할 기반 입력을 위한 시스템 및 사용자 메시지 사용
from langchain_core.messages import HumanMessage, SystemMessage
llm_pro = ChatGoogleGenerativeAI(model='gemini-2.5-pro-exp-03-25', temperature=0.9)
# 시스템과 사용자의 역할을 나타내는 구조화된 메시지 생성
output = llm_pro.invoke([
SystemMessage(content='100자 이내로 한국어로 답변해주세요.'),
HumanMessage(content='다음 주 아마존 주가 예측은?')
])
print(output.content)
함수 설명:
- SystemMessage(): 모델의 응답 방식 등 배경 동작을 지정합니다.
- HumanMessage(): 사용자의 실제 질문이나 프롬프트를 시뮬레이션합니다.
- 메시지 목록 전달: 다중 턴 대화 또는 다양한 역할의 컨텍스트 제공을 지원합니다.
이 부분은 명확한 역할과 행동 지침이 있는 어시스턴트를 구축하기 위한 채팅 기반 메시지 구조를 소개합니다.
예시 4: 역할 키워드를 활용한 ChatPromptTemplate 사용
from langchain_core.prompts import ChatPromptTemplate
llm_pro = ChatGoogleGenerativeAI(model='gemini-2.5-pro-exp-03-25', temperature=0.9)
# 역할 기반 콘텐츠를 포함한 채팅 스타일 프롬프트 템플릿 정의
prompt = ChatPromptTemplate([
('system', '100자 이내로 한국어로 답변해주세요.'),
('user', '다음 주 {message} 주가 예측은?')
])
# 프롬프트에서 모델로 체인 생성
chain = prompt | llm_pro
# 프롬프트 템플릿의 변수를 대체
message = '아마존'
response = chain.invoke(input=message)
print(response.content)
함수 설명:
- ChatPromptTemplate(): 'system' 및 'user'와 같은 키워드를 사용하여 역할별 메시지를 정의할 수 있는 유연한 방법을 제공합니다.
- 변수를 포함한 템플릿: {message}는 실행 시 동적으로 채워집니다.
- 프롬프트 체이닝: 이전과 동일하게 템플릿이 LLM으로 흐릅니다.
이 버전은 SystemMessage와 HumanMessage를 수동으로 정의하는 것보다 더 깔끔하고 확장 가능한 방식입니다.
2025.04.23 - [AI] - Google Gemini 2.5 Pro와 LangChain을 활용한 간단한 LLM 챗봇 서버 구축 에서 랭체인을 이용한 간단한 챗봇 구현 예제를 더 보실 수 있습니다.
참고 자료
마무리 및 요약
LangChain은 다양한 LLM 제공자와의 통합을 가능하게 하며, 체이닝 구조를 통해 유연하고 확장 가능한 AI 애플리케이션을 구축할 수 있는 강력한 프레임워크입니다. 특히 Google Gemini 2.5 Pro와의 연동은 고성능 자연어 이해 및 생성 기능을 활용할 수 있게 하며, 기업용 챗봇이나 자동화된 에이전트 시스템 구현에 적합합니다.
본 문서에서 소개한 예시들은 초심자부터 중급 개발자까지 실제 프로젝트에서 LangChain을 활용하는 데 필요한 핵심 개념과 패턴을 설명하고 있습니다. Gemini API 키만 준비되어 있다면, 빠르게 LangChain 기반 AI 애플리케이션을 시작할 수 있습니다.
'AI' 카테고리의 다른 글
컴퓨터비전(CV)을 위한 설명 가능한 인공지능 (Explainable AI) 솔루션 (0) | 2025.05.09 |
---|---|
Retrieval-Augmented Generation(RAG) 설명 (0) | 2025.05.08 |
LangChain, FAISS, Gemini 임베딩을 활용한 벡터 DB 저장 및 검색 방법 (1) | 2025.05.08 |
벡터 데이터베이스(Vector DB)란? FAISS 예제와 함께 깊이 있게 살펴보기 (0) | 2025.05.08 |
랭그래프와 제미나이로 구현한 대화상태 기억하는 LLM 챗봇서버 (0) | 2025.05.08 |