LangChain 챗봇1장 · 과정 소개와 LLM 의 이해12 / 21← 이전목차다음 →MetaContents

1장. 과정 소개와 LLM 의 이해

LangChain 생태계와 쓰임새

멀티탭을 떠올려 보세요. 콘센트 구멍의 규격이 정해져 있어서, 어느 회사의 전기 제품이든 같은 멀티탭에 꽂을 수 있습니다. LangChain 이 하는 일이 이것입니다. 프롬프트, 모델, 문서 검색 같은 부품의 "꽂는 모양"을 같게 맞춰 두어서, 부품을 바꿔 끼워도 나머지 코드는 그대로 둘 수 있습니다.

langchain-core, langchain, 연결 꾸러미, 곁 도구의 네 묶음을 나란히 놓은 LangChain 생태계 비교 그림

네 상자가 LangChain 을 이루는 묶음입니다. 맨 왼쪽 langchain-core 가 콘센트 규격에 해당하는 공통 부품이고, langchain 은 그 위에 자주 쓰는 기능을 모은 본체입니다. 연결 꾸러미는 OpenAI 같은 회사의 모델을 규격에 맞게 꽂아 주는 어댑터이고, 곁 도구는 여러 단계의 일을 그래프로 짜는 LangGraph 와 실행 기록을 살펴보는 LangSmith 입니다. 비유와 다른 점은, 멀티탭은 한 번 사면 그대로지만 LangChain 은 판(버전)이 자주 바뀌어 예전 글의 코드가 그대로 돌지 않을 때가 있다는 것입니다.

묶음과 패키지

묶음설치하는 이름하는 일이 과정에서
공통 부품langchain-core메시지, 프롬프트, | 로 잇는 규격모든 장
본체langchain체인, 에이전트 같은 자주 쓰는 기능3장부터
연결 꾸러미langchain-openaiOpenAI 모델과 임베딩을 꽂아 쓰기2장부터
커뮤니티langchain-community여러 문서 로더, 벡터DB 연결6장
곁 도구langgraph, langsmith여러 단계의 흐름, 실행 기록 보기필요할 때 소개

LangChain 으로 만드는 것들

아래는 LLM 챗봇이 흔히 쓰이는 갈래입니다. 특정 회사의 사례가 아니라 이 과정의 기술로 만들 수 있는 일의 종류를 모은 것입니다.

갈래하는 일이 과정의 기술
고객 상담자주 묻는 질문에 답하고 어려운 것은 사람에게 넘긴다프롬프트, 메모리
사내 문서 질의응답규정이나 매뉴얼에서 근거를 찾아 답한다RAG
여행·예약 비서대화를 기억하며 일정을 짜 준다메모리, 구조화된 출력
학습 도우미교재 내용으로 문제를 내고 풀이를 설명한다RAG, 프롬프트
업무 자동화파일을 읽고 계산해 보고서를 만든다도구 호출, MCP

짧은 예시

API 키 없이 LangChain 의 모양을 미리 봅니다. FakeListChatModel 은 정해 둔 답을 차례로 돌려주는 가짜 모델입니다. 진짜 모델로 바꿔 끼워도 아래 코드의 모양은 그대로입니다.

Python
from langchain_core.language_models.fake_chat_models import FakeListChatModel
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

# 프롬프트 틀: {place} 자리에 나중에 값을 넣는다
prompt = ChatPromptTemplate.from_messages([("system", "너는 여행 비서다."), ("human", "{place} 여행지를 하나 추천해 줘.")])
# 가짜 모델: 질문과 상관없이 정해 둔 답을 돌려준다
model = FakeListChatModel(responses=["성산일출봉을 추천합니다."])
# StrOutputParser: 모델의 답(AIMessage)에서 글만 꺼낸다. Str 은 string(글자열)의 줄임말
chain = prompt | model | StrOutputParser()

print(chain.invoke({"place": "제주도"}))
출력
성산일출봉을 추천합니다.

prompt | model | StrOutputParser() 는 "프롬프트를 채우고, 모델에 보내고, 답에서 글만 꺼낸다"를 한 줄로 이은 것입니다. | 는 앞 부품의 결과를 뒤 부품에 넘기는 파이프입니다. 이렇게 잇는 방식이 LCEL 이고, 3장에서 진짜 모델로 다시 만듭니다. 가짜 모델이라 "제주도" 대신 "부산"을 넣어도 같은 답이 나옵니다.

코드가 의미하는 것

이 코드는 멀티탭에 부품 세 개를 차례로 꽂은 것입니다. 주문서 틀(프롬프트), 요리사(모델), 접시에 담기(파서)를 | 로 이어 하나의 줄(체인)로 만들고, 빈칸에 "제주도"를 넣어 한 번 돌립니다.

코드하는 일챗봇에서 뜻하는 것
ChatPromptTemplate.from_messages([...])시스템 메시지와 {place} 빈칸이 있는 질문 틀을 만든다앞 절의 메시지 목록을 틀로 만든 것입니다. 빈칸만 바꿔 같은 틀을 여러 번 씁니다
FakeListChatModel(responses=[...])정해 둔 답을 돌려주는 가짜 모델을 만든다진짜 모델 자리를 잠시 채운 것입니다. 키 없이 체인의 모양을 시험할 수 있습니다
StrOutputParser()모델의 답에서 글만 꺼낸다모델은 답을 AIMessage 객체로 돌려줍니다. 화면에 보여 줄 글만 필요하므로 꺼냅니다
prompt | model | StrOutputParser()세 부품을 차례로 잇는다앞 부품의 결과가 뒤 부품의 입력이 됩니다. 이 한 줄이 챗봇 로직의 뼈대입니다
chain.invoke({"place": "제주도"})빈칸에 값을 넣어 체인을 한 번 돌린다invoke 는 "불러서 실행한다"는 뜻입니다. 손님 질문 하나를 처리하는 것과 같습니다

결과에서 읽을 것은 두 가지입니다.

  • 부품을 바꿔 끼워도 줄은 그대로입니다. 2장부터 FakeListChatModel 자리에 진짜 모델(ChatOpenAI)을 넣어도 prompt | model | parser 와 invoke 는 바뀌지 않습니다. 멀티탭의 구멍 모양이 같기 때문입니다.
  • 가짜 모델은 질문을 읽지 않습니다. 출력 "성산일출봉을 추천합니다."는 미리 적어 둔 답입니다. 이 출력으로 확인한 것은 답의 내용이 아니라 "체인이 끝까지 이어져 글 하나가 나온다"는 것입니다.

주의할 점

  • 인터넷의 LangChain 예제는 옛 판의 코드가 많습니다. from langchain.chat_models import ChatOpenAI 처럼 옛 경로로 부르는 코드는 지금 판에서 오류가 납니다. 이 교안은 langchain 1.4, langchain-core 1.7 판으로 확인했습니다.
  • 가짜 모델은 연습과 시험용입니다. 질문을 읽지 않으므로 답이 질문과 맞지 않아도 이상한 것이 아닙니다.
← 이전 절1장 · LLM 챗봇의 짜임다음 절 →1장 · 실습 지도