LangChain 완벽 가이드 | LLM 앱 개발·Chain·Agent·RAG·실전 활용
이 글의 핵심
LangChain으로 LLM 앱을 개발하는 완벽 가이드. Chain, Agent, Memory, RAG, Vector Store까지 실전 예제로 정리. LangChain·LLM·AI 중심으로 설명합니다. Start now.
이 글의 핵심
LangChain으로 LLM 앱을 개발하는 완벽 가이드입니다. Chain, Agent, Memory, RAG, Vector Store까지 실전 예제로 정리했습니다.
실무 경험 공유: 단순 GPT API 호출을 LangChain으로 전환하면서, 복잡한 워크플로우 구현이 가능해지고 응답 품질이 크게 향상된 경험을 공유합니다.
들어가며: “LLM 앱 개발이 어려워요”
실무에서 마주치는 문제들
Prompt 관리가 복잡해요
하드코딩은 유지보수가 어렵습니다. LangChain은 Template을 제공합니다. 문서 검색이 필요해요
단순 GPT는 제한적입니다. LangChain은 RAG를 지원합니다. 복잡한 워크플로우가 필요해요
순차 호출은 번거롭습니다. 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 스타트업에서 사용하고 있습니다.