RangChain Tool (260424)

WonTerry·2026년 4월 23일

LLM

목록 보기
52/62

실제 앱 개발에서 외부 시스템과 연결되거나, 상태를 바꾸거나, 사용자에게 실질적인 가치를 주는 Tool의 역할은 중요합니다. 아래는 실제 앱에서 바로 쓸 수 있는 수준의 예제들입니다.


1. 날씨 조회 Tool (외부 API 연동)

from langchain.tools import tool
import requests

@tool
def get_weather(city: str) -> str:
    """도시 이름을 입력받아 현재 날씨 정보를 반환합니다."""
    api_key = "YOUR_API_KEY"
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

    response = requests.get(url).json()

    if response.get("weather"):
        description = response["weather"][0]["description"]
        temp = response["main"]["temp"]
        return f"{city}의 현재 날씨는 {description}, 온도는 {temp}°C 입니다."
    else:
        return "날씨 정보를 가져오지 못했습니다."

👉 활용:

  • 여행 추천 챗봇
  • 일정 추천 AI

2. 이메일 발송 Tool (실무 핵심)

from langchain.tools import tool
import smtplib
from email.mime.text import MIMEText

@tool
def send_email(to: str, subject: str, body: str) -> str:
    """이메일을 전송합니다."""
    sender = "your_email@gmail.com"
    password = "your_app_password"

    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = sender
    msg["To"] = to

    try:
        with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
            server.login(sender, password)
            server.send_message(msg)
        return "이메일 전송 완료"
    except Exception as e:
        return f"전송 실패: {str(e)}"

👉 활용:

  • 업무 자동화 AI
  • 고객 응대 봇

3. DB 조회 Tool (RAG + 실시간 데이터)

from langchain.tools import tool
import sqlite3

@tool
def get_user_orders(user_id: int) -> str:
    """사용자의 주문 내역을 조회합니다."""
    conn = sqlite3.connect("shop.db")
    cursor = conn.cursor()

    cursor.execute("SELECT item, price FROM orders WHERE user_id=?", (user_id,))
    rows = cursor.fetchall()
    conn.close()

    if not rows:
        return "주문 내역이 없습니다."

    result = "\n".join([f"{item} - {price}원" for item, price in rows])
    return result

👉 활용:

  • 쇼핑몰 챗봇
  • 고객센터 자동화

4. 파일 저장 Tool (사용자 입력 기록)

from langchain.tools import tool

@tool
def save_note(filename: str, content: str) -> str:
    """텍스트 파일로 내용을 저장합니다."""
    with open(filename, "w", encoding="utf-8") as f:
        f.write(content)
    return f"{filename} 파일로 저장되었습니다."

👉 활용:

  • 개인 비서 AI
  • 회의 기록 자동화

5. 웹 검색 Tool (간단 버전)

from langchain.tools import tool
import requests

@tool
def simple_search(query: str) -> str:
    """검색어를 입력받아 간단한 결과를 반환합니다."""
    url = f"https://api.duckduckgo.com/?q={query}&format=json"
    data = requests.get(url).json()

    return data.get("AbstractText", "검색 결과 없음")

👉 활용:

  • 최신 정보 기반 답변
  • RAG 보완

6. Python 코드 실행 Tool (강력하지만 위험)

from langchain.tools import tool

@tool
def run_python(code: str) -> str:
    """Python 코드를 실행하고 결과를 반환합니다."""
    try:
        local_vars = {}
        exec(code, {}, local_vars)
        return str(local_vars)
    except Exception as e:
        return str(e)

👉 활용:

  • 데이터 분석 AI
  • 자동 계산 엔진

⚠️ 주의: 실제 서비스에서는 sandbox 필수


7. 일정 등록 Tool (캘린더 느낌)

from langchain.tools import tool

schedule = []

@tool
def add_schedule(date: str, event: str) -> str:
    """일정을 추가합니다."""
    schedule.append({"date": date, "event": event})
    return f"{date}에 '{event}' 일정이 추가되었습니다."

👉 활용:

  • 개인 비서 AI
  • 생산성 앱

핵심 정리

실전에서 좋은 Tool의 조건은 명확합니다:

  1. 외부 세계와 연결된다 (API, DB, 파일, 시스템)
  2. 행동을 수행한다 (읽기 + 쓰기)
  3. LLM이 판단해서 호출할 가치가 있다

*추가,
👉 “에이전트가 Tool을 언제 선택하는지”
👉 “Tool + RAG + Memory를 결합한 아키텍처”

profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글