Skip to content
LangChain: Quickly Build Apps with OpenAI API

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