이 글은 랭체인(LangChain) 입문부터 응용까지 위키독스의 내용을 기반으로 작성했습니다.
https://wikidocs.net/book/14473
랭체인(LangChain)은 LLM을 사용하고, RAG와 같은 파이프라인을 구축할 때 더 빠르고 쉽게 사용할 수 있게 해 주는 프레임워크입니다. 개인적으로 LLM을 자주 접하고 있지만, 실질적으로 배포가 되는 RAG 시스템을 구축해본 경험은 없었던 만큼 랭체인을 따로 공부해본 적은 없었습니다. 그럼에도 많이 사용하고 있는 프레임워크인 만큼 따로 공부해보고 싶다는 생각을 했고, 위키독스를 기반으로 스터디를 진행 중입니다. 이 글에서는 스터디에서 진행한 내용 중 실제로 랭체인을 처음 빠르게 시작해볼 때 알면 좋을 내용들만 골라서 정리해보고자 합니다. 위키독스의 내용과 마찬가지로, OpenAI의 gpt-4o-mini 모델을 사용한다는 가정 하에 정리해보겠습니다.
랭체인을 처음 시작할 때 필요한 것은 크게 두 가지라고 볼 수 있습니다.
먼저, 랭체인을 실행하기 위해 파이썬이 설치되어 있는 환경을 준비합니다. 구글 코랩을 이용한다면 모든 게 해결됩니다. 그리고 여기서 랭체인을 설치하면 됩니다.
pip install langchain
만약 OpenAI에서 제공하는 모델들을 사용한다면 여기에 추가로 의존성 라이브러리들을 설치하면 됩니다. OpenAI 외에 anthropic, google 등에서 제공하는 모델들을 사용하고자 한다면 다른 라이브러리들을 설치하면 됩니다.
pip install langchain-openai
pip install tiktoken # OpenAI 모델이 사용하는 토크나이저
현 시점에서는 해결된 이슈이지만, 얼마 전 OpenAI 모델이 실행되지 않는 이슈가 있었습니다. 아래와 같이 몇 가지 설치를 해주면 해결이 되었는데, 지금은 필요하지 않지만 이후 비슷한 이슈가 발생하면 해결에 참고가 될 것 같아 기록해둡니다.
pip install --upgrade --upgrade-strategy eager "regex" "charset-normalizer<4" "idna" "urllib3<3" "certifi" "requests" "anyio<5" "distro<2" "sniffio" "h11<0.15" "httpcore==1.*" "annotated-types" "typing-extensions<5" "pydantic-core==2.27.1" "pydantic<3" "jiter<1" "tqdm" "colorama" "openai" "tiktoken" "httpx<0.28"
두 번째로 사용하고자 하는 LLM 모델에 따라 인증키를 발급받으면 됩니다. 본문에서는 OpenAI를 기준으로 설명하고 있으므로 OpenAI를 말씀드리자면, 먼저 OpenAI API 사이트에 접속합니다.
https://openai.com/index/openai-api/
회원가입을 하고, 우측 상단의 설정으로 들어갑니다.

좌측 사이드바에 있는 API keys로 들어가서 Create new secret key를 눌러 새로운 API 키를 발급받습니다. 이 때 발급된 secret key는 처음 발급받을 때만 볼 수 있으므로 꼭 별도로 메모해두시길 바랍니다.

여기서 슬픈 점은, API 키만 발급받으면 되는 게 아니라, 결제를 위한 수단을 등록해야 합니다. 즉 모델을 사용하기 위해선 어느 정도 돈이 필요합니다. 좌측의 Billing으로 들어가 결제 수단을 등록해주시면 됩니다. 경험상 결제 수단을 등록한 후에 5달러 정도를 미리 충전해야 API 키 사용이 가능했던 것으로 기억합니다. 충전된 credit balance에서 API를 사용한 만큼 금액이 빠져나가는 구조입니다.

모델을 얼마나 사용하는지에 따라 금액이 정해져 있는데, 당장은 큰 금액이 아니지만 어느 정도 limit을 주고 싶을 수 있고, 금액 상한선을 정해두는 것을 매우매우 권장합니다. 따라서 좌측의 limit으로 들어가 usage limit을 걸어두는 것을 권장합니다.

이렇게 발급받은 인증키를 아래 코드의 'OPENAI_API_KEY' 부분에 집어넣은 상태로 환경변수로 등록해두면 편리하게 사용 가능합니다.
import os
os.environ['OPENAI_API_KEY'] = 'OPENAI_API_KEY'
이제 랭체인을 실행할 모든 준비가 완료되었습니다. API 키만 발급받는다면 환경설정이 매우 간단한 편입니다.
랭체인에서 구현되는 기본 파이프라인은 크게 두 가지로 구성됩니다.
먼저, LLM 모델부터 실행해보면 다음과 같습니다.
from langchain_openai import ChatOpenAI
# model
llm = ChatOpenAI(model="gpt-4o-mini")
# chain 실행
llm.invoke("지구의 자전 주기는?")
AIMessage(content='지구의 자전 주기는 약 24시간, 즉 1일입니다. 그러나 정확히 말하면 지구의 자전 주기는 약 23시간 56분 4초로, 이를 항성일이라고 합니다. 일반적으로 우리가 사용하는 일(day)은 태양일(solar day)로, 태양이 같은 위치에 돌아오는 시간을 기준으로 하며, 대략 24시간입니다.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 87, 'prompt_tokens': 15, 'total_tokens': 102, 'com...
여기까지만 해도 랭체인으로 원하는 모델을 실행하는 것이 가능합니다. 그러나 우리가 원하는 것은 파이프라이닝입니다. 이를 위해 우선 ChatPromptTemplate를 이용해 프롬프트를 구성해보겠습니다.
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("You are an expert in astronomy. Answer the question. <Question>: {input}")
prompt
프롬프트와 LLM이 구성된 상태에서 우리는 하나의 체인을 만들 수 있게 됩니다.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# chain 연결 (LCEL)
chain = prompt | llm
# chain 호출
chain.invoke({"input": "지구의 자전 주기는?"})
여기까지만 보면 사실 하나의 LLM을 실행하는 것과 차이가 없는 것처럼 느껴질 것입니다. 그렇다면 체인이 어떻게 활용될 수 있는지 확인하기 위해 위키독스에 있던 멀티체인 예시를 들어보겠습니다. 먼저 한국어 단어를 영어로 번역하는 체인을 하나 만들어봅시다.
prompt1 = ChatPromptTemplate.from_template("translates {korean_word} to English, and answer just English word")
llm = ChatOpenAI(model="gpt-4o-mini")
chain1 = prompt1 | llm | StrOutputParser()
chain1.invoke({"korean_word":"미래"})
StrOutputParser()는 LLM으로부터 나온 output 중 우리가 필요한 부분, 즉 텍스트만 가져오는 부분입니다. 즉 위의 파이프라인에서 output은 미래를 영어로 번역한 future가 되어야 할 것입니다.
이제 두 번째 체인까지 추가해보겠습니다. 첫 번째 체인의 결과인 future를 english word에 집어넣은 프롬프트를 LLM에 넣는 체인입니다.
prompt2 = ChatPromptTemplate.from_template(
"explain {english_word} using oxford dictionary to me in Korean."
)
chain2 = (
{"english_word": chain1}
| prompt2
| llm
| StrOutputParser()
)
chain2.invoke({"korean_word":"미래"})
"Future"는 옥스포드 사전에서 "미래"를 의미합니다. 이는 아직 발생하지 않은 시간의 특정 시점이나 기간을 가리키며, 일반적으로 현재 시점 이후의 시간을 의미합니다. 예를 들어, 우리가 앞으로 어떤 일이 일어날지, 또는 어떤 계획이나 기대가 있는지를 이야기할 때 사용됩니다. "Future"는 또한 가능성이나 잠재력을 나타내기도 하며, 우리가 만들어 나갈 수 있는 여러 선택이나 기회를 포함합니다.
이해가 도움이 되었으면 좋겠습니다!
이렇게 랭체인을 이용하게 되면 여러 개의 체인을 연결시켜서 LLM을 활용할 수 있게 됩니다. 그것도 파이프라인을 이용해서 생각보다 매우 단순하게 활용할 수 있게 됩니다.
본 게시글은 위키독스의 내용을 바탕으로 랭체인을 처음 시작해볼 때 기본이 되는 몇 가지만 알려드렸습니다. 이외에도 Chat model을 활용할 때 사용할 수 있는 클래스, 프롬프트를 더 다양하게 사용하기 위한 클래스 등 랭체인에서 제공하는 기능은 굉장히 다양합니다. 또한 본문에서 언급한 OpenAI 외에도 anthropic, google에서 제공하는 모델도 활용할 수 있으며, 그 외의 모델들도 직접 커스터마이징해서 활용할 수도 있기 때문에 사용처는 무궁무진할 것이라고 생각됩니다. 저도 계속 스터디할 예정이지만, 랭체인을 알려주는 자료들이 굉장히 많기 때문에 랭체인을 공부해보는 것에 어려움은 없을 것이라 생각합니다.