안녕하세요.
이번 글에서는 LLM 활용을 간편하게 도와주는 LangChain 모듈에 대한 소개를 해보고
설치 과정과 함께 시작해볼 수 있는 간단한 예시 코드 스니펫을 정리해보도록 하겠습니다.
LangChain이란? / 장점
LangChain은 LLM과의 상호작용을 보다 쉽게 만들어주는 파이썬 라이브러리인데요.
예를 들어, GPT-4o, LLAMA, Claude, Gemini와 같은 다양한 종류의 LLM을 활용해
자연어 처리 혹은 대화형 애플리케이션을 개발할 때, 모델에 대한 프롬프트를
효율적으로 구성하고 그 결과값을 다루는 과정을 간편화해 줍니다.
LLM들을 수동으로 연결하고, 프롬프트도 수동으로 관리하고 기록 로깅도 수동으로
모두 구현을 하려면 할 수는 있겠지만 이 과정들을 애플리케이션마다 일일이
설정하고 관리하는 것은 큰 비용이 듭니다.
그러나, LangChain을 사용하면 일련의 개발 과정 관리가 매우 편해지고
확장성이 크게 증가하는 이점이 있어 널리 채택되고 있습니다.
다음은 LangChain을 활용하면 좋은 대표적인 장점들을 나열한 것입니다.
1. 체계적인 프롬프트 관리
- 반복되는 프롬프트를 템플릿화하여 재사용할 수 있고, 여러 변수를 동적으로 주입해
다양한 상황에 대응하기 용이합니다. - 체계적인 프롬프트 체인을 통해, 복잡한 흐름의 작업을 단계별로 분리하고
관리할 수 있습니다. - LangSmith 등의 기능과 연계하여 프롬프트 입출력 관리 및 성능, 비용 추적이 용이합니다.
2. 메모리 기능
- 기본적으로 stateless 구조인 LLM API에 대화 이력이나 기타 맥락 정보를
저장할 수 있도록 다양한 Memory 모듈을 제공합니다. - 이전에 언급된 대화 내용을 참조하여 자연스러운 맥락 유지가 가능해지고,
더 풍부한 대화형 애플리케이션을 구현할 수 있습니다.
3. Agent 및 Tool 연동
- LLM이 단순 질의응답을 넘어 파일 시스템, API, 데이터베이스 등을
Tool로 활용할 수 있게 해주는 에이전트 시스템을 제공합니다. - 이를 통해 모델이 검색 엔진, 계산기, 웹 API 등을 직접 사용하여
답변의 정확도를 높이거나 동적인 작업을 처리할 수 있게 됩니다.
4. 모듈화 및 확장성
- Prompt, Chain, Memory, Agent 등 각 기능이 분리되어 있어
필요한 부분만 골라 쓰거나, 기존 체인을 재활용하기가 수월합니다. - 설정을 변경하거나, 다양한 종류의 LLM으로 교체할 때도 구조를 크게 바꾸지 않고
쉽게 대응할 수 있습니다. 이는 API로 활용하는 모델과 디바이스에 직접 실행하는 모델 간의
전환도 쉽게 가능합니다.
5. 활발한 커뮤니티
- LangChain은 오픈소스 프로젝트로 활발한 커뮤니티를 보유하고 있어
다양한 예제 코드와 튜토리얼, 플러그인을 쉽게 접할 수 있습니다. - 일반적인 task에서 널리 사용되는 프롬프트들을 제공하고 있으며,
성능 향상을 위한 프롬프트 엔지니어링 과정에 큰 영감을 받기 좋습니다.
LangChain 설치
LangChain 라이브러리를 설치하려면 다음과 같은 명령어들을 입력해주시면 됩니다.
$pip install langchain
$pip install langchain-openai # GPT 종류 모델 활용 시
$pip install langchain-community # 커뮤니티에서 기여한 다양한 util 코드 지원
이 외에도 다양한 종류의 세부 모듈을 지원하는데요.
이에 대한 내용은 아래 링크를 참고해주시면 됩니다.
(v0.3 기준으로 되어 있으므로, 버전이 다를 경우 맞는 버전의 페이지를 참고해주세요.)
https://python.langchain.com/docs/versions/v0_3/#installation
LangChain 코드 예제
다음은 LangChain을 이용해서 OpenAI 모델을 실행하는 예시 코드 스니펫입니다.
(v0.3 기준입니다.)
from langchain.prompts.prompt import PromptTemplate
from langchain_openai import ChatOpenAI
# @@@ 참고: OPENAI_API_KEY 환경 변수에 api key 선언 필요 @@@
# animal1, animal2를 input으로 받는 프롬프트 예시
my_prompt = """
두 가지 동물에 대한 비교를 3줄 요약으로 해주세요.
{animal1} vs {animal2}
"""
# 프롬프트 템플릿 선언
my_prompt_template = PromptTemplate(
input_variables=["animal1", "animal2"], template=my_prompt
)
# OPENAI 모델 선언
llm = ChatOpenAI(temperature=0, model_name="gpt-4o-mini")
# 프롬프트 템플릿과 모델을 chain으로 연결
chain = my_prompt_template | llm
# chain 실행
res = chain.invoke(input={"animal1": "고양이", "animal2": "호랑이"})
print(res)
# 출력 결과 예시
"""content='고양이는 주로 가정에서 기르는 소형 포유류로, 독립적이고 애교가 많은 성격을 가지고 있습니다. 반면 호랑이는 대형 육식동물로, 강력한 사냥 능력과 사회적 구조를 가진 야생 동물입니다. 두 동물 모두 고양잇과에 속하지만, 크기와 서식지, 행동 양식에서 큰 차이를 보입니다.'
additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 94, 'prompt_tokens': 33, 'total_tokens': 127, 생략..."""
출력 결과를 살펴보면 output 텍스트와 토큰 수 정보 등이 모두 포함된 것을 확인할 수 있습니다.
llm 변수 선언 부분에서 원하는 모델로 교체하는 식으로 쉽게 모델 교체도 가능하며,
프롬프트 및 input 변수에 대해서도 확장성이 높다는 점을 유추해볼 수 있었습니다.
다음 번에는 LangChain의 세부적인 기능들에 대하여 상세히 다루는 기회를 가져보겠습니다.
이 글이 LangChain의 기본 콘셉트를 이해하는 과정에 도움이 되셨기를 바라겠습니다.
잘 봐주셔서 감사드립니다.
'Python > NLP Code' 카테고리의 다른 글
LangChain으로 RAG를 구현하는 방법 기본 예제 (0) | 2025.01.09 |
---|---|
파이썬 챗봇 개발 라이브러리 Llama Index 예제 및 장점 정리 (0) | 2024.12.17 |
ChatGPT 모델 fine-tuning 진행하는 방법 파이썬 코드 예제 (2) | 2024.11.10 |