Langchain 기초 – ChatOpenAI, LLMChain, PromptTemplate 마스터 첫걸음(LLM)

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”)

입력값을 넘기면,

  1. 프롬프트 템플릿에 입력값이 포맷팅되어
  2. 모델에 전달되고
  3. 모델이 자연어 응답을 반환한다.

코드로 이해하는 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 연동 자동화
    실제 현업에서 바로 활용할 수 있다.

예를 들어,
고객 문의를 자동 답변하는 챗봇이라면

  1. PromptTemplate으로 다양한 질문 시나리오 프롬프트 설계
  2. ChatOpenAI로 맥락에 맞는 자연스러운 답변
  3. 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
세 가지 기본기를 반드시 익혀야 하는 이유다.

Leave a Comment