Langchain 기초, 그리고 생성형 AI 활용의 패러다임
Langchain은 OpenAI의 ChatGPT를 비롯해 여러 대형 언어모델(LLM, Large Language Model)을 파이썬 환경에서 쉽고 강력하게 활용할 수 있게 해주는 프레임워크다. 단순히 텍스트 입력과 출력에 그치지 않고, 여러 단계의 프롬프트(지시문), 사용자 입력, 외부 도구와의 연동, 다중 모델 체이닝까지 구현할 수 있다.
실제 프로덕트에서 “챗봇처럼 자연어 대화형 인터페이스를 만들고 싶다”, “문서 자동화, Q&A 서비스, 데이터 분석 결과를 자연어로 요약하고 싶다” 같은 요구가 있을 때, Langchain은 가장 쉽고 유연한 도구 중 하나다.
Langchain은 세 가지 핵심 컴포넌트를 기반으로 동작한다.
바로 ChatOpenAI(대화형 모델 인터페이스), LLMChain(모델과 프롬프트 연결·로직 관리), PromptTemplate(프롬프트 설계·파라미터화)다.
이 세 가지의 ‘기본기’를 다져두면, 어떤 복잡한 서비스라도 “언어모델 기반 자동화”로 구현할 수 있다.
ChatOpenAI: 대화형 언어모델의 첫걸음
ChatOpenAI란 무엇인가?
ChatOpenAI는 Langchain에서 OpenAI의 ChatGPT(또는 최신 GPT-4 등)의 API를 쉽고 직관적으로 다룰 수 있는 클래스다.
일반적으로 OpenAI API를 파이썬에서 바로 쓰려면, REST API를 직접 호출하고, 파라미터를 세팅하고, 결과를 파싱하는 번거로운 과정을 거쳐야 한다.
하지만 Langchain의 ChatOpenAI는 파이썬 객체 하나로 이 모든 과정을 깔끔하게 감싸준다.
ChatOpenAI의 핵심 개념
ChatOpenAI 객체는 대화형 언어모델(GPT-3.5, GPT-4 등)의 입력값과 출력값을 쉽게 연결할 수 있게 한다.
일반 LLM과 달리, “역할(role)”을 구분한 메시지 구조(예: 시스템, 유저, 어시스턴트)도 손쉽게 관리한다.
여기에 파라미터(온도, 최대 토큰 수, 스트림 출력 등)도 코드에서 직관적으로 세팅할 수 있다.
실제 코드 예시와 원리
아래는 ChatOpenAI의 기본적인 생성 과정이다.
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(
openai_api_key="sk-***", # OpenAI API키
temperature=0.8, # 창의성(온도)
max_tokens=512 # 최대 출력 토큰 수
)
response = llm.predict("Langchain의 기본 원리를 설명해줘.")
print(response)
위 코드는 한 줄짜리 질문에 대해 자연어로 답변을 받는 가장 간단한 형태다.
프롬프트에 시스템 메시지(“너는 전문가야”)나, 사용자 역할을 따로 넣고 싶다면 llm.predict_messages
를 쓴다.
ChatOpenAI에서 시스템/유저/어시스턴트 역할 분리
Langchain의 ChatOpenAI는 메시지 단위로 역할을 구분한다.
이 기능을 활용하면, 좀 더 고급 챗봇 흐름을 쉽게 만들 수 있다.
from langchain.schema import SystemMessage, HumanMessage
messages = [
SystemMessage(content="넌 엄청 친절한 튜터야."),
HumanMessage(content="파이썬 클래스와 인스턴스 차이가 뭐야?")
]
result = llm(messages)
print(result.content)
이렇게 역할 기반 메시지 관리가 쉬우면, “대화 흐름 유지”, “컨텍스트 기반 답변”, “다단계 프로세스” 등 복잡한 로직도 유연하게 구현할 수 있다.
주요 파라미터와 옵션
- temperature: 0(정확함)~1(창의성) 범위의 값. 아이디어 도출, 요약, 코드 생성 등 목적에 따라 조절
- max_tokens: 출력 길이 제한. 비용과 응답 품질 모두에 영향
- streaming: True로 하면, 답변이 한글자씩 실시간 출력(스트림 처리 지원)
- model_name: “gpt-3.5-turbo”, “gpt-4”, “gpt-4o” 등 다양한 모델 버전 선택
ChatOpenAI를 쓰면, “GPT API와 대화하는 파이썬 객체”로 모든 기능을 한 번에 제어할 수 있다.
PromptTemplate: 언어모델 활용의 정수, 프롬프트 설계와 파라미터화
PromptTemplate이란 무엇인가?
PromptTemplate은 Langchain에서 “프롬프트(지시문)”를 구조적으로 설계하고,
필요한 입력값만 바꿔서 반복적으로 쓸 수 있게 해주는 템플릿 클래스다.
언어모델을 쓰는 핵심은 ‘프롬프트를 어떻게 짜느냐’에 달려 있다.
하지만 매번 프롬프트 문자열을 복붙하거나, 직접 문자열 포매팅으로 관리하면 실수도 많고, 코드 유지보수도 어렵다.
PromptTemplate을 쓰면, 프롬프트 안에 {변수}
를 넣고, 필요할 때마다 변수값만 교체해 쓸 수 있다.
PromptTemplate의 구조와 특징
PromptTemplate은 다음과 같은 속성을 가진다.
- template: 실제 지시문 문자열(예: “{topic}에 대해 초등학생 눈높이로 설명해줘.”)
- input_variables: 프롬프트에서 사용할 변수명 리스트(예: [“topic”])
PromptTemplate은 사용자가 입력한 값으로 자동 포맷팅되어,
매번 새로운 질문·지시문·상황에 따라 유연하게 프롬프트를 생성한다.
기본 사용법과 코드 예시
가장 단순한 PromptTemplate 예시는 다음과 같다.
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
input_variables=["topic"],
template="{topic}에 대해 초등학생 눈높이로 설명해줘."
)
question = prompt.format(topic="블록체인")
print(question)
이 코드는 “블록체인에 대해 초등학생 눈높이로 설명해줘.”라는 프롬프트를 자동 생성한다.
복잡한 프롬프트 설계와 다중 변수 활용
여러 개의 변수, 조건, 상황에 따라 프롬프트를 다르게 설계할 수도 있다.
template = """
너는 {role}야. 아래 질문에 대해 친절하게 답변해줘.
질문: {question}
"""
prompt = PromptTemplate(
input_variables=["role", "question"],
template=template
)
final_prompt = prompt.format(
role="수학 선생님",
question="함수의 극한 개념을 쉽게 알려줘."
)
print(final_prompt)
PromptTemplate 덕분에, “변수 기반 프롬프트 자동 생성”, “유지보수 및 재사용성”, “다단계 프로세스 프롬프트 연결”이 모두 쉬워진다.
PromptTemplate이 중요한 이유
PromptTemplate은 단순한 문자열 포매팅을 넘어서
- 다양한 입력값을 가진 대규모 챗봇/문서 생성/분류/요약 등에 동일한 구조의 프롬프트를 반복적으로 활용
- 코드에서 프롬프트를 별도로 관리해, 비즈니스 로직과 완전히 분리
- “사용자 질문에 맞는 다양한 프롬프트 구조”를 한 번에 설계할 수 있다.
프롬프트 최적화는 언어모델 응답 품질에 가장 큰 영향을 준다.
PromptTemplate으로 프롬프트를 구조화하면, 이후 “A/B 테스트”나, “프롬프트 자동 최적화”에도 유리하다.
LLMChain: 프롬프트와 모델, 그리고 응답을 잇는 핵심 로직
LLMChain이란 무엇인가?
LLMChain은 Langchain의 ‘엔진’ 역할을 한다.
ChatOpenAI(모델)과 PromptTemplate(프롬프트), 사용자 입력을 연결해
입력값 → 프롬프트 → 모델 실행 → 응답 반환
이 모든 과정을 하나의 객체로 관리한다.
즉, LLMChain은 “프롬프트 템플릿에 입력값을 채워서, LLM에 넘기고, 결과를 받아오는 자동화 파이프라인”이라고 이해하면 쉽다.
LLMChain의 기본 구조
LLMChain 객체는 세 가지 구성요소를 가진다.
- llm: 사용할 언어모델(ChatOpenAI 등)
- prompt: 프롬프트 템플릿(PromptTemplate)
- output_key: 반환값 키(여러 체인을 연결할 때 쓰임, 기본값은 “text”)
입력값을 넘기면,
- 프롬프트 템플릿에 입력값이 포맷팅되어
- 모델에 전달되고
- 모델이 자연어 응답을 반환한다.
코드로 이해하는 LLMChain
아래는 가장 기본적인 LLMChain 사용 예시다.
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
llm = OpenAI(openai_api_key="sk-***")
prompt = PromptTemplate(
input_variables=["animal"],
template="{animal}의 특징을 세 문장으로 알려줘."
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(animal="고양이")
print(result)
이 코드는 “고양이의 특징을 세 문장으로 알려줘.”라는 프롬프트를 LLM에 넘기고,
자동으로 결과를 받아와 출력한다.
LLMChain이 중요한 이유
LLMChain의 진짜 장점은
- “프롬프트 설계 → 입력값 자동 적용 → 응답 수집”까지 일련의 과정을 코드 한 줄로 자동화
- 여러 개의 LLMChain을 체인처럼 연결해, 단계별 대화, 복잡한 워크플로우, 다단계 분석 등도 쉽게 확장
- “입력→가공→응답” 흐름을 캡슐화해, 재사용성과 유지보수성 모두 극대화
즉, 실전 서비스에서 “사용자 입력 → 챗봇/문서/분류/요약 등 자동화”의 기본 단위가 바로 LLMChain이다.
세 가지 컴포넌트의 유기적 연결: 실제 예시와 원리
기본 구조 한눈에 보기
Langchain의 강점은 세 가지 컴포넌트를
- 프롬프트 설계(PromptTemplate)
- 모델 연결(ChatOpenAI)
- 로직 관리(LLMChain)
이렇게 분리해, 유지보수성과 확장성을 한 번에 잡는 데 있다.
실제 실무에서 자주 쓰이는 구조는 아래와 같다.
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
llm = ChatOpenAI(openai_api_key="sk-***", temperature=0.7)
prompt = PromptTemplate(
input_variables=["name"],
template="{name}에게 용기를 주는 한마디를 남겨줘."
)
chain = LLMChain(llm=llm, prompt=prompt)
output = chain.run(name="지현")
print(output)
여기서
PromptTemplate이 프롬프트를 설계하고
ChatOpenAI가 모델 응답을 관리하며
LLMChain이 입력값을 받아, 프롬프트에 채우고, 응답을 받아온다.
이런 구조를 쌓아올리면,
- 다단계 Q&A
- 조건에 따른 프롬프트 분기
- 외부 데이터와 연동
- 멀티 모델/멀티 프롬프트 연결
모두 간단히 확장할 수 있다.
여러 단계 체인, 외부 API 연동, 사용자 컨텍스트 관리
여러 LLMChain의 연결(멀티 스텝 프로세스)
Langchain의 또 다른 강점은 “여러 LLMChain을 단계별로 연결”해
복잡한 자동화, Q&A, 요약, 문서 생성까지 구현할 수 있다는 점이다.
예를 들어,
1단계: 사용자의 질문을 받는다
2단계: 질문 내용을 분석해 카테고리를 분류
3단계: 카테고리에 따라 최적화된 프롬프트로 답변
아래는 이런 구조의 간단한 예시다.
from langchain.chains import SimpleSequentialChain
# 1. 카테고리 분류 프롬프트
prompt1 = PromptTemplate(
input_variables=["question"],
template="다음 질문을 적절한 카테고리로 분류해줘: {question}"
)
chain1 = LLMChain(llm=llm, prompt=prompt1)
# 2. 카테고리 기반 답변 프롬프트
prompt2 = PromptTemplate(
input_variables=["category"],
template="{category}에 대해 친절하게 설명해줘."
)
chain2 = LLMChain(llm=llm, prompt=prompt2)
# 체인 연결
overall_chain = SimpleSequentialChain(chains=[chain1, chain2], verbose=True)
result = overall_chain.run("블록체인은 어떻게 작동하나요?")
print(result)
이렇게 여러 체인을 연결하면,
“분류→설명→요약” 등 다단계 파이프라인을 효율적으로 만들 수 있다.
외부 API와의 연동
Langchain은 외부 데이터(문서, 웹 검색, DB, API 등)와도 쉽게 연결된다.
예를 들어, 검색 결과나 데이터베이스 질의 결과를 프롬프트에 삽입해
최신 정보 기반 답변을 만들 수 있다.
data = "오늘 서울의 미세먼지 농도는 55μg/m3입니다."
prompt = PromptTemplate(
input_variables=["info"],
template="다음 정보로 날씨를 요약해줘: {info}"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(info=data)
print(result)
실제 서비스에서는
- DB에서 정보 불러오기
- 크롤러로 뉴스 기사 요약
- 사용자 로그/이력 기반 개인화
등 다양한 연동이 이 구조에 그대로 적용된다.
사용자 컨텍스트(기억) 관리
Langchain은 기본적으로 stateless(무상태)이지만,
메시지 히스토리 관리로 “대화 맥락”을 기억시킬 수 있다.
ChatOpenAI에 여러 메시지를 순서대로 넘기면,
이전 대화 흐름을 바탕으로 자연스러운 응답을 끌어낼 수 있다.
from langchain.schema import SystemMessage, HumanMessage
messages = [
SystemMessage(content="넌 IT 전문가야."),
HumanMessage(content="요즘 핫한 언어가 뭐야?"),
HumanMessage(content="그 언어로 할 수 있는 실전 프로젝트는?")
]
output = llm(messages)
print(output.content)
이처럼 대화 흐름을 그대로 메시지로 넘기면,
기억을 가진 챗봇, FAQ, 멀티턴 Q&A까지 쉽게 확장된다.
실무에서의 Langchain, 확장
챗봇, 문서 자동화, Q&A, 요약 등 실전 적용
Langchain과 세 가지 컴포넌트의 기본만 익히면
- 자연스러운 대화형 챗봇
- 대용량 문서 요약, 번역, 내용 추출
- 특정 입력→맞춤형 프롬프트로 텍스트 자동 생성
- 멀티턴 Q&A, 조건별 분기 응답
- 외부 DB/API 연동 자동화
등 실제 현업에서 바로 활용할 수 있다.
예를 들어,
고객 문의를 자동 답변하는 챗봇이라면
- PromptTemplate으로 다양한 질문 시나리오 프롬프트 설계
- ChatOpenAI로 맥락에 맞는 자연스러운 답변
- LLMChain으로 입력값 처리, 히스토리 관리
이렇게 3단계만으로 서비스가 완성된다.
복잡한 워크플로우와 파이프라인 관리
Langchain은 기본 컴포넌트 조합으로
- 멀티 프롬프트
- 조건부 분기
- 다단계 체인(체인 오브 체인)
- 각 단계별 출력값을 다음 입력값으로 자동 넘김
이런 복잡한 워크플로우도 단 몇 줄로 관리할 수 있다.
예를 들어,
AI 리서치 자동화 서비스라면
- 1단계: 질문 요약
- 2단계: 키워드 추출
- 3단계: 각키워드별로 문서 검색
- 4단계: 검색 결과 요약
- 5단계: 최종 요약문 생성
모두 LLMChain과 PromptTemplate의 반복적 결합으로 구성된다.
정리, Langchain의 기본기가 중요한 이유
Langchain의 ChatOpenAI, LLMChain, PromptTemplate
이 세 가지를 제대로 이해하고 활용하면
생성형 AI(LLM) 기반 서비스, 챗봇, 자동화, 자연어 처리 등
어떤 실전 요구도 유연하게 해결할 수 있다.
프롬프트 설계(PromptTemplate)로 언어모델 응답 품질을 컨트롤하고
ChatOpenAI로 모델 연결과 역할·파라미터 관리
LLMChain으로 전체 로직, 자동화, 멀티 단계 흐름까지
한 번에 통합해서 관리할 수 있다.
이 글에서 다룬 원리와 예제 코드를 한 번씩 실습해 보면
- GPT API와 챗봇 만들기
- 다양한 업무 자동화
- 문서 요약, 번역, Q&A
까지 Langchain의 핵심을 내 것으로 만들 수 있다.
기초를 탄탄히 다지면, 그 어떤 복잡한 AI 서비스도
Langchain 위에서 빠르고 쉽게 구현할 수 있다.
이것이 바로 오늘의 핵심,
Langchain의 ChatOpenAI, LLMChain, PromptTemplate
세 가지 기본기를 반드시 익혀야 하는 이유다.