Skip to content

현대 AI 애플리케이션 개발에서 LangChain의 잠재력을 극대화하기

업데이트

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-cpu

LangGraph를 사용하는 경우:

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 애플리케이션을 설계하고 구현해 보세요.