LangChain 완벽 가이드 | LLM 앱 개발·Chain·Agent·RAG·실전 활용

LangChain 완벽 가이드 | LLM 앱 개발·Chain·Agent·RAG·실전 활용

이 글의 핵심

LangChain으로 LLM 앱을 개발하는 완벽 가이드입니다. Chain, Agent, Memory, RAG, Vector Store까지 실전 예제로 정리했습니다.

실무 경험 공유: 단순 GPT API 호출을 LangChain으로 전환하면서, 복잡한 워크플로우 구현이 가능해지고 응답 품질이 크게 향상된 경험을 공유합니다.

들어가며: “LLM 앱 개발이 어려워요”

실무 문제 시나리오

시나리오 1: Prompt 관리가 복잡해요
하드코딩은 유지보수가 어렵습니다. LangChain은 Template을 제공합니다.

시나리오 2: 문서 검색이 필요해요
단순 GPT는 제한적입니다. LangChain은 RAG를 지원합니다.

시나리오 3: 복잡한 워크플로우가 필요해요
순차 호출은 번거롭습니다. LangChain은 Chain과 Agent를 제공합니다.


1. LangChain이란?

핵심 특징

LangChain은 LLM 앱 개발 프레임워크입니다.

주요 기능:

  • Chain: 여러 단계 연결
  • Agent: 자율적 의사결정
  • Memory: 대화 기억
  • RAG: 문서 기반 응답
  • Vector Store: 임베딩 저장

2. 설치 및 기본 사용

설치

pip install langchain langchain-openai

기본 LLM 호출

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-4",
    temperature=0.7,
    api_key="your-api-key"
)

response = llm.invoke("Hello, how are you?")
print(response.content)

3. Prompt Template

from langchain.prompts import ChatPromptTemplate

template = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant that translates {input_language} to {output_language}."),
    ("human", "{text}")
])

prompt = template.format_messages(
    input_language="English",
    output_language="Korean",
    text="Hello, how are you?"
)

response = llm.invoke(prompt)
print(response.content)

4. Chain

Simple Chain

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=template)

result = chain.invoke({
    "input_language": "English",
    "output_language": "Korean",
    "text": "Hello"
})

print(result[text])

Sequential Chain

from langchain.chains import SequentialChain

# 첫 번째 Chain: 요약
summary_chain = LLMChain(llm=llm, prompt=summary_template, output_key="summary")

# 두 번째 Chain: 번역
translate_chain = LLMChain(llm=llm, prompt=translate_template, output_key="translation")

# 연결
overall_chain = SequentialChain(
    chains=[summary_chain, translate_chain],
    input_variables=[text],
    output_variables=["summary", "translation"]
)

result = overall_chain.invoke({"text": "Long article..."})

5. Agent

Tool 정의

from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun

search = DuckDuckGoSearchRun()

tools = [
    Tool(
        name="Search",
        func=search.run,
        description="Useful for searching the internet"
    ),
    Tool(
        name="Calculator",
        func=lambda x: eval(x),
        description="Useful for math calculations"
    )
]

Agent 실행

from langchain.agents import initialize_agent, AgentType

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

result = agent.invoke("What is the population of Seoul in 2024?")
print(result[output])

6. Memory

Conversation Buffer

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

memory = ConversationBufferMemory()

conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

conversation.invoke("Hi, I'm John")
conversation.invoke("What's my name?")
# "Your name is John"

7. RAG (Retrieval-Augmented Generation)

문서 로드

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = TextLoader("document.txt")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
splits = text_splitter.split_documents(documents)

Vector Store

from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings()

vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=embeddings
)

Retrieval QA

from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

result = qa_chain.invoke("What is the main topic of the document?")
print(result[result])

8. 실전 예제: 챗봇

from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.prompts import ChatPromptTemplate

llm = ChatOpenAI(model="gpt-4", temperature=0.7)

template = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful customer service assistant."),
    ("human", "{input}")
])

memory = ConversationBufferMemory()

conversation = ConversationChain(
    llm=llm,
    memory=memory,
    prompt=template,
    verbose=True
)

def chat(message: str) -> str:
    response = conversation.invoke({"input": message})
    return response[response]

# 사용
print(chat("Hi, I need help with my order"))
print(chat("My order number is 12345"))
print(chat("When will it arrive?"))

정리 및 체크리스트

핵심 요약

  • LangChain: LLM 앱 개발 프레임워크
  • Chain: 여러 단계 연결
  • Agent: 자율적 의사결정
  • Memory: 대화 기억
  • RAG: 문서 기반 응답
  • Vector Store: 임베딩 저장

구현 체크리스트

  • LangChain 설치
  • Prompt Template 작성
  • Chain 구현
  • Agent 구현
  • Memory 추가
  • RAG 구현
  • 챗봇 구현

같이 보면 좋은 글

  • FastAPI 완벽 가이드
  • OpenAI API 가이드
  • Vector Database 가이드

이 글에서 다루는 키워드

LangChain, LLM, AI, GPT, RAG, Agent, Python

자주 묻는 질문 (FAQ)

Q. OpenAI API만으로는 안 되나요?

A. 단순 호출은 가능하지만, 복잡한 워크플로우는 LangChain이 훨씬 편합니다.

Q. 다른 LLM도 사용할 수 있나요?

A. 네, Claude, Gemini, Llama 등 다양한 LLM을 지원합니다.

Q. 비용은 얼마나 드나요?

A. LangChain은 무료이고, LLM API 비용만 발생합니다.

Q. 프로덕션에서 사용해도 되나요?

A. 네, 많은 AI 스타트업에서 사용하고 있습니다.

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3