현대 AI 애플리케이션 개발에서 LangChain의 잠재력을 극대화하기
Updated on
LangChain은 2023년 이후 극적으로 발전했습니다. 단순히 LLM을 감싸는 래퍼 수준에서 시작했지만, 이제는 다음을 지원하는 완전한 AI 애플리케이션 프레임워크가 되었습니다:
- LCEL (LangChain Expression Language)
- Runnables
- LangGraph (stateful, reliable agent workflows)
- OpenAI function calling
- Tool calling
- 고급 메모리 시스템
- 현대적인 RAG용 문서 파이프라인
이 최신 가이드는 LangChain에 대한 2025년 기준 이해를 제공하고, 최신 OpenAI API와 함께 실제 LLM 애플리케이션을 구축하는 방법을 다룹니다.
LangChain의 기본 개념
🌟 오늘날의 LangChain: 현대적인 AI 앱 프레임워크
현대 LLM 앱에는 단순한 텍스트 생성만으로는 부족합니다:
- tools
- memory
- document retrieval
- state management
- multi-step workflows
- error handling
- determinism
LangChain은 Runnables, LCEL, LangGraph를 통해 이러한 프리미티브를 제공하여, 개발자가 신뢰할 수 있는 agent 및 workflow 시스템을 구축할 수 있게 해줍니다.
🔗 LCEL을 활용한 순차 워크플로우 (업데이트된 방식)
LCEL을 사용하면 LLM 파이프라인을 함수처럼 구성할 수 있습니다:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
model = ChatOpenAI(model="gpt-4.1")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{question}")
])
chain = prompt | model
chain.invoke({"question": "Explain LangChain LCEL in one paragraph."})이는 예전의 “SequentialChain” API를 대체합니다.
LangChain 시작하기
📦 설치
pip install langchain langchain-openai langgraph faiss-cpuLangGraph를 사용하는 경우:
pip install langgraph💬 LLM과 Prompt Template (현대적인 API)
LangChain은 이제 ChatModel 인터페이스를 사용합니다:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4.1", temperature=0)Prompt Template은 여전히 강력합니다:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"Summarize the following text:\n\n{text}"
)⛓️ LCEL로 만드는 체인 (구식 “Chains API” 대신)
LCEL로 체인을 구성합니다:
chain = prompt | llm⚙️ Tools & Agents (2025년 권장 베스트 프랙티스)
예전의 initialize_agent, “ReAct agent”, MiniChain 스타일은 더 이상 권장되지 않습니다.
권장되는 접근법은 다음과 같습니다:
Agent 워크플로우에는 LangGraph를 사용하세요
LangGraph는 다음을 제공합니다:
- state management
- retry policies
- deterministic edges
- tool calling
- persistence
Agent node 예시:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4.1",
temperature=0,
streaming=False
)Tool calling 예시:
from langchain_core.tools import tool
@tool
def search_wiki(query: str):
"""Search Wikipedia topics."""
import wikipedia
return wikipedia.summary(query)
tools = [search_wiki]LLM과 연결:
result = llm.invoke({
"messages": [
{"role": "user", "content": "Find me information about LangChain."}
],
"tools": tools
})🧠 Memory
LangChain의 memory는 이제 다음을 지원합니다:
- BufferMemory
- ConversationSummaryMemory
- SQL / Redis 기반 memory
- Graph-state memory (LangGraph)
예시:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context(
{"input": "Hello"},
{"output": "Hi, how can I help?"}
)
memory.load_memory_variables({})📄 데이터 로딩, Text Splitter & Retrieval (현대적인 RAG)
FAISS + OpenAI embeddings를 사용하는 업데이트된 예시:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
loader = TextLoader("./state_of_the_union.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
chunks = splitter.split_documents(docs)
emb = OpenAIEmbeddings()
db = FAISS.from_documents(chunks, emb)
query = "What policies did the president highlight?"
results = db.similarity_search(query)🚀 End-to-End 예제
아래는 LCEL, 최신 OpenAI API, retrieval을 사용하는 완전한 LangChain 파이프라인 예시입니다.
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
# 1. Load LLM
llm = ChatOpenAI(model="gpt-4.1", temperature=0)
# 2. Load + split documents
loader = TextLoader("./state_of_the_union.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800)
chunks = splitter.split_documents(docs)
# 3. Build vectorstore
db = FAISS.from_documents(chunks, OpenAIEmbeddings())
# 4. Retrieval chain
prompt = ChatPromptTemplate.from_messages([
("system", "Answer based on the provided context."),
("user", "{question}\n\nContext: {context}")
])
def retriever(q):
results = db.similarity_search(q, k=3)
return "\n".join([r.page_content for r in results])
chain = (
{
"question": lambda x: x,
"context": lambda x: retriever(x)
}
| prompt
| llm
)
# 5. Run end-to-end
response = chain.invoke("What economic topics were mentioned?")
print(response.content)결론
2025년의 LangChain은 더 이상 단순한 툴킷이 아니라, 다음을 위한 완전한 AI 애플리케이션 프레임워크입니다:
- agents
- workflows
- retrieval systems
- tool integrations
- memory 기반의 대화형 애플리케이션
LCEL, Runnables, LangGraph를 활용하면, 깨끗하고 유지 보수 가능하며 확장성 있는 아키텍처로 프로덕션급 AI 앱을 구축할 수 있습니다.
이 가이드를 기반으로 강력하고 경쟁력 있는 AI 애플리케이션을 설계하고 구현해 보세요.