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 스타트업에서 사용하고 있습니다.