[AI Agent 구현하기] LangChain에 대해서 알아보자

앞 글에서 MCP를 통해 외부 시스템을 연결하는 방법을 살펴봤습니다. MCP는 어디까지나 외부 시스템과의 “연결”을 정의하는 표준일 뿐, LLM이 이러한 도구를 언제, 어떻게 사용할지에 대한 로직까지는 제공하지 않습니다.

즉, AI Agent를 구현하기 위해서는 LLM이 사용자의 요청을 이해한 뒤, 필요한 도구를 선택하고, 실행 결과를 바탕으로 다음 행동을 결정하는 일련의 워크플로우가 필요합니다. LangChainLangGraph는 이러한 워크플로우를 설계하고, 필요한 기능을 구현하여 실제 AI Agent를 구현할 수 있도록 돕는 프레임워크 입니다.

Langchain에 대해서 먼저 알아본 이후에 LangGraph에 대해서 소개해보도록 하겠습니다.

Langchain이란?

대규모 언어 모델(LLM)을 외부 데이터, API, 데이터베이스 및 다른 애플리케이션 구성 요소들과 연결하여 복잡한 AI 애플리케이션을 쉽게 개발할 수 있도록 지원하는 오픈 소스 프레임워크입니다.

기본적인 LLM은 단순한 질문답변은 가능하지만, 여러 단계의 작업을 수행하거나 외부 시스템(DB, API 등)에 직접 접근하는 데 한계가 있습니다. 예를 들어 “문서 읽기 → 내용 요약 → 질문에 답변 → 결과 저장”과 같은 과정을 자동화하거나, 여러 시스템들을 연결하려면 추가적인 제어 로직이 필요합니다.

LangChain은 이러한 워크플로우를 구성할 수 있도록 도와주고, 외부 API 연동, Tool 호출, 에러 처리 등 실제 서비스에 필요한 기능들을 쉽게 구현할 수 있습니다.

Langchain의 목표

https://docs.langchain.com/oss/python/langchain/philosophy

1. 최신 AI 모델을 쉽게 활용할 수 있도록 지원 (의역)

LangChain은 개발자가 동일한 인터페이스로 다양한 AI 모델을 사용할 수 있도록 지원합니다.

OpenAI, Anthropic, Google과 같은 AI Provider들은 각각 다른 API 형식, 파라미터, 메시지 포맷을 제공합니다. 만약 특정 모델의 API에 맞춰 어플리케이션을 개발한다면 다른 모델로 교체할 때 많은 코드 수정이 필요합니다.
LangChain은 모델의 입,출력을 표준화하여 특정 AI 모델에 종속되지 않고, 최신 AI 모델 또는 다른 회사의 AI 모델로 교체하더라도 애플리케이션 구조를 크게 변경하지 않고 사용할 수 있습니다.

2. AI 모델이 외부 도구와 데이터를 활용하도록 지원 (의역)

실제 서비스에서는 데이터베이스 조회, API 호출, 문서 검색, 계산 수행 등 다양한 외부 시스템과 상호작용해야 합니다. LangChain은 이러한 작업을 수행할 수 있도록 사용할 수 있는 도구(Tool)를 쉽게 정의하고 연결할 수 있도록 지원합니다. 또한 비정형 데이터의 로딩, 검색, 파싱 기능을 제공하여 모델이 외부 데이터와 연계된 워크플로우를 구성할 수 있습니다.

LangChain의 핵심 Component

1. Model

Model은 LangChain 애플리케이션의 핵심 구성 요소로, 사용자의 요청을 이해하고 응답을 생성하는 AI 모델을 의미합니다. 일반적으로 LangChain에서는 LLM(Large Language Model)을 사용하며, LLM사람처럼 텍스트를 이해하고 생성할 수 있는 AI 도구로 번역, 요약, 질의응답 등 다양한 작업을 수행할 수 있습니다. 텍스트 생성 이외에도 아래와 같은 기능들을 지원합니다.

  • Tool Calling : API 호출, 데이터베이스 조회 등 외부 도구를 호출하고 결과를 응답에 활용.
  • Structured Output : Model의 응답이 정해진 형식을 따르도록 제한.
  • Multimodality : 텍스트뿐만 아니라 이미지, 음성, 영상 등 다양한 데이터 처리
  • Reasoning : 복잡한 문제를 해결하기 위한 다단계 추론 수행

특히 AI Agent에서 Model은 추론 엔진으로,  에이전트의 의사 결정 과정을 주도하여 어떤 도구를 호출할지, 결과를 어떻게 해석할지, 최종 답변을 언제 제공할지 결정합니다.

2. Message

메시지LangChain 모델의 기본 컨텍스트 단위입니다. 메시지는 모델의 입력과 출력을 나타내며, LLM과 상호 작용할 때 대화 상태를 나타내는 데 필요한 콘텐츠와 메타데이터를 모두 전달합니다. 이를 통해 모델이 대화의 흐름을 이해하고 적절한 응답을 생성할 수 있습니다.

LangChain에서 사용하는 주요 Message 유형은 아래와 같습니다.

  • System message : 모델의 동작 방식과 역할을 정의 (AI 시스템의 헌법 같은 느낌)
  • Human message : 사용자가 입력한 질문이나 요청
  • AI message : 모델이 생성한 응답
  • Tool message : 외부 도구(API, 데이터베이스, 검색 엔진 등)의 실행 결과

 3. Tool

Tool LLM이 직접 수행할 수 없는 작업을 처리하기 위해 사용되는 호출 가능한 함수로, LangChain에서 Tool은 명확한 입,출력을 가진 호출 가능한 함수로 정의됩니다. 모델은 대화 맥락과 어떤 입력 인수를 제공할지에 따라 도구를 호출할 시기를 결정합니다.

LangChain에서는 @tool 데코레이터를 사용하여 일반 Python 함수를 Tool로 등록할 수 있습니다. 이때 도구를 정의할 때 타입 힌트DocString이 필요합니다.

타입 힌트(Type Hints)

  • 함수 파라미터의 타입 힌트는 Tool의 입력 스키마로 사용됩니다.
    LangChain은 이를 기반으로 모델이 어떤 형식의 값을 전달해야 하는지 판단합니다.

Docstring

  • 함수의 Docstring은 Tool의 설명(Description)으로 사용됩니다.
    모델은 해당 설명을 참고하여 어떤 Tool을 사용할지 결정하므로, 명확하고 구체적으로 작성하는 것이 중요합니다.
from langchain.tools import tool

@tool
def add(a: int, b: int) -> int:
    """두 수를 더합니다."""
    return a + b

LangChain으로 AI Agent 구현하기 (create_agent)

LangChain v1.0에서는 create_agent() 함수를 통해 AI Agent를 비교적 간단하게 구현할 수 있습니다. 개발자는 @tool 데코레이터를 사용해 Tool을 등록하고, create_agent()에 모델과 Tool 목록을 전달하면 Tool Calling 기반의 Agent를 생성할 수 있습니다.  

from langchain.tools import tool
from langchain.agents import create_agent

@tool
def add(a: int, b: int) -> int:
    """두 수를 더합니다."""
    return a + b

@tool
def multiply(a: int, b: int) -> int:
    """두 수를 곱합니다."""
    return a * b

# Agent 정의
agent = create_agent(
    model="google_genai:gemini-3.5-flash",
    tools=[add, multiply],
    system_prompt="당신은 수학 선생님입니다.",
)


# Agent 실행
result = agent.invoke(
    {"messages": [{"role": "user", "content": "5와 7을 곱한 다음 34를 더하세요."}]},
    config=lf_config,
)
print("에이전트 응답:", result["messages"][-1].content)

위와 같이 AI Agent에 사용할 model과 tools을 정의하고, system_prompt를 통해서 역할을 부여할 수 있습니다.
이후 AI Agent는 사용자의 요청을 분석하여 필요한 도구를 스스로 선택하고 실행합니다. 또한 도구 실행 결과를 바탕으로 추가 작업이 필요한지 판단한 뒤, 최종적으로 사용자에게 응답을 생성합니다.

LangChain vs LangGraph

https://docs.langchain.com/oss/python/langchain/overview

LangChain create_agent는 모델과 도구만 정의하면 Agent를 빠르게 구축할 수 있어 프로토타입 개발이나 간단한 업무 자동화에 적합하지만, 복잡한 워크플로우 로직이나 세밀한 제어가 필요한 경우에는 LangGraph를 활용하는 것이 일반적입니다.
몰론 LangChain에서도 bind_tools()를 이용한 Tool Calling 구조 구현이나 LCEL(LangChain Expression Language)을 활용한 워크플로우 구성이 가능하지만 Agent의 동작 흐름을 제어해야 하는 경우에는 LangGraph를 사용하는 것이 일반적입니다. 그래서 다음번에는 LangGraph를 통해 Agent 워크플로우를 정의해보는걸 공부해보도록 하겠습니다.