LangChain에서 Tool Calling이란?

 

Tool Calling(도구 호출)은 LangChain에서 LLM이 단순한 텍스트 응답을 생성하는 것뿐만 아니라,

외부 API나 함수를 실행할 수 있도록 해주는 기능입니다.

즉, LLM이 자체적으로 해결하기 어려운 작업을 적절한 도구를 통해 실행할 수 있습니다.

쉽게 말해, “LLM이 적절한 툴을 골라서 실행할 수 있는 기능” 입니다.

 


✅ Tool Calling 개념과 필요성

1. LLM의 한계 극복

   • LLM 자체로는 최신 정보 검색, 계산, 데이터베이스 조회 등을 할 수 없음.

   • Tool을 사용하면 LLM이 직접 API 호출, 데이터베이스 조회, 계산 등을 수행할 수 있음.

2. 도구 자동 선택

   • LLM이 사용자가 입력한 질문을 분석하여 가장 적절한 Tool을 선택하여 실행할 수 있음.

3. 자동화된 실행

   • LLM이 직접 명령을 내리면, 해당 Tool이 실행되고 결과를 다시 LLM이 받아서 응답을 구성할 수 있음.

 


✅ LangChain에서 Tool Calling 사용하기

 

1️⃣ Tool 정의

 

먼저, 사용할 Tool을 정의해야 합니다. Tool은 보통 특정 기능(API 호출, 계산, 검색 등)을 수행하는 Python 함수로 구현됩니다.

from langchain.tools import tool

@tool
def get_current_weather(location: str) -> str:
    """사용자가 입력한 위치의 현재 날씨를 반환합니다."""
    return f"The weather in {location} is sunny with 25°C."

👉 위 코드에서 @tool 데코레이터를 사용하여 LLM이 직접 호출할 수 있는 툴을 정의했습니다.

 


2️⃣ LLM에 Tool 연결

 

이제 정의한 툴을 LLM이 사용할 수 있도록 연결합니다.

from langchain_community.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
from langchain.agents import AgentType

# 사용할 LLM 정의
llm = ChatOpenAI(model="gpt-4", temperature=0)

# Agent 생성 (Tool을 자동으로 선택해서 실행할 수 있도록 설정)
agent = initialize_agent(
    tools=[get_current_weather],  # 위에서 정의한 도구 추가
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 실행
response = agent.invoke("현재 서울 날씨가 어때?")
print(response)

🎯 설명

initialize_agent를 사용하여 Tool과 LLM을 연결함.

사용자가 "현재 서울 날씨가 어때?"라고 물어보면, LLM은 자동으로 get_current_weather 툴을 호출함.

툴의 실행 결과가 다시 LLM으로 전달되어 사용자에게 최종 응답을 반환함.

 


✅ Tool Calling 응용 예제

 

1️⃣ 계산 기능 추가

 

LLM은 기본적으로 복잡한 수학 계산을 잘 못하므로, calculator 툴을 추가하면 더 정확한 계산이 가능함.

from langchain.tools import tool
import math

@tool
def calculate_square_root(number: float) -> float:
    """주어진 숫자의 제곱근을 계산합니다."""
    return math.sqrt(number)

# 툴 목록에 추가
agent = initialize_agent(
    tools=[calculate_square_root],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

response = agent.invoke("16의 제곱근을 계산해줘.")
print(response)  # 4.0

 

 


2️⃣ 웹 검색 기능 추가

 

LLM이 실시간 정보를 검색할 수 있도록 Google 검색 기능을 추가할 수도 있음.

from langchain.tools import Tool
from langchain_community.tools.google_search import GoogleSearchAPIWrapper

# Google Search API 래퍼 생성
search = GoogleSearchAPIWrapper()

# 툴 정의
search_tool = Tool(
    name="Google Search",
    func=search.run,
    description="사용자의 질문을 Google에서 검색하여 최신 정보를 제공합니다."
)

# Agent 설정
agent = initialize_agent(
    tools=[search_tool],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 실행
response = agent.invoke("오늘의 비트코인 가격은 얼마야?")
print(response)

 

 


✅ Tool Calling을 활용한 주요 기능

1. 📡 실시간 웹 검색 (Google Search API)

2. 📊 데이터베이스 조회 (SQL Database)

3. 🔢 수학 및 통계 계산 (NumPy, SymPy 등 활용)

4. 📅 캘린더 이벤트 조회 (Google Calendar API)

5. 🛠 외부 API 호출 (Weather API, Stock API 등)

6. 📄 PDF, 문서 처리 (pdfplumber, PyMuPDF 등 활용)

 


✅ 결론

Tool Calling은 LLM이 외부 도구(API, 계산기, 데이터베이스)를 활용할 수 있도록 하는 기능.

LLM이 직접 툴을 선택하고 실행하여 응답을 생성.

검색, 계산, 데이터 조회 등 다양한 작업에 활용 가능.

LangChain에서 @tool을 사용하여 툴을 정의하고 initialize_agent로 연결하면 간단하게 구현 가능.

 

Tool Calling을 활용하면 단순한 텍스트 생성 AI를 넘어서 “실제 작업을 수행하는 AI 비서”를 만들 수 있습니다! 🚀

 

 

+ Recent posts