LangChain을 활용한 커스텀 도구 제작 강의: 에이전트에 새로운 능력 부여하기

GoGoComputer·2024년 11월 12일
1

LangChain Basics

목록 보기
38/40
post-thumbnail

커스텀 도구 강연에 오신 것을 환영합니다! 이번 강의에서는 LangChain을 사용하여 간단한 장식을 통해 어떻게 기능적인 도구를 만들 수 있는지 자세히 알아보겠습니다. 에이전트-온(Agent-Own)의 가장 흥미로운 부분 중 하나로, 간단한 코드만으로도 강력한 도구를 만들어낼 수 있습니다.

소개

LangChain에서 에이전트는 도구를 사용하여 작업을 수행합니다. 도구는 API 호출, 데이터베이스 조회, 계산 등 다양한 작업을 처리할 수 있는 함수입니다. 이번 강의에서는 자신만의 기능을 가진 도구를 만들어 에이전트에 추가하는 방법을 배워보겠습니다.

커스텀 도구 만들기

1. 필요한 라이브러리 임포트

from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.agents.tools import tool

2. 간단한 예제: 우주에서 가장 멋진 사람은 누구일까요?

일반적인 대형 언어 모델은 "우주에서 가장 멋진 사람은 누구인가요?"라는 질문에 객관적인 답변을 할 것입니다. 하지만 우리는 에이전트가 특정한 답변을 하도록 도울 수 있습니다.

(1) 함수 정의 및 데코레이터 적용

@tool
def coolest_person(input: str) -> str:
    """우주에서 가장 멋진 사람의 이름을 반환합니다. 입력은 빈 문자열입니다."""
    return "홍길동"  # 원하는 이름으로 변경하세요
  • @tool 데코레이터를 사용하여 함수를 도구로 등록합니다.
  • Docstring은 매우 중요합니다. 에이전트가 어떤 도구를 사용할지 결정할 때 이 설명을 참고하기 때문입니다.

3. 에이전트 초기화 및 실행

(1) 언어 모델 초기화

import os
from dotenv import load_dotenv

load_dotenv()  # .env 파일에서 OPENAI_API_KEY를 로드합니다.

llm = OpenAI(temperature=0)

(2) 도구 목록 생성

tools = []
tools.append(coolest_person)

(3) 에이전트 초기화

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

(4) 에이전트 실행

result = agent.run("우주에서 가장 멋진 사람이 누구죠?")
print(result)
  • 에이전트는 질문을 받고, Docstring을 참고하여 적절한 도구를 선택하고 답변합니다.

실용적인 예제: 현재 시간 알려주기

이제 현재 시간을 알려주는 더 실용적인 도구를 만들어보겠습니다.

1. 현재 시간 함수 정의

from datetime import datetime

@tool
def get_current_time(input: str) -> str:
    """현재 시간을 반환합니다. 입력은 빈 문자열이며, 형식은 YYYY-MM-DD HH:MM:SS입니다."""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  • 이 함수는 현재 시간을 문자열 형식으로 반환합니다.
  • Docstring에 함수의 기능과 입력/출력에 대한 설명을 자세히 기재합니다.

2. 도구 목록에 추가 및 에이전트 재초기화

tools.append(get_current_time)

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

3. 에이전트 실행

result = agent.run("지금 몇 시인가요?")
print(result)
  • 에이전트는 현재 시간을 알려주는 도구를 사용하여 질문에 답변합니다.

전체 실습 코드

마지막으로, 모든 코드를 한곳에 모아보겠습니다. 이 코드는 OPENAI_API_KEY를 .env 파일에서 로드하며, 두 가지 커스텀 도구를 사용하여 에이전트를 실행합니다.

import os
from dotenv import load_dotenv
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.agents.tools import tool
from datetime import datetime

# .env 파일에서 OPENAI_API_KEY 로드
load_dotenv()

llm = OpenAI(temperature=0)

# 커스텀 도구 정의
@tool
def coolest_person(input: str) -> str:
    """우주에서 가장 멋진 사람의 이름을 반환합니다. 입력은 빈 문자열입니다."""
    return "홍길동"  # 원하는 이름으로 변경하세요

@tool
def get_current_time(input: str) -> str:
    """현재 시간을 반환합니다. 입력은 빈 문자열이며, 형식은 YYYY-MM-DD HH:MM:SS입니다."""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 도구 목록 생성
tools = [coolest_person, get_current_time]

# 에이전트 초기화
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 에이전트 실행 예시 1
result = agent.run("우주에서 가장 멋진 사람이 누구죠?")
print(result)

# 에이전트 실행 예시 2
result = agent.run("지금 몇 시인가요?")
print(result)

실행 방법

  1. Python 환경에 필요한 패키지를 설치합니다.
pip install langchain openai python-dotenv
  1. .env 파일을 생성하고, OPENAI API 키를 추가합니다.
OPENAI_API_KEY=your_openai_api_key_here
  1. 스크립트를 실행합니다.
python script_name.py

마무리

이렇게 LangChain을 사용하여 간단하게 커스텀 도구를 만들고 에이전트에 추가할 수 있습니다. 중요한 점은 다음과 같습니다:

  • 함수의 입력과 출력 타입을 명확히 정의합니다.
  • Docstring에 함수의 기능과 사용 방법을 상세히 설명합니다.
  • @tool 데코레이터를 사용하여 함수를 도구로 등록합니다.
  • 도구 목록에 커스텀 도구를 추가하고 에이전트를 초기화합니다.

이러한 방법을 통해 에이전트의 기능을 확장하고, 원하는 작업을 수행하도록 만들 수 있습니다. 이제 여러분만의 커스텀 도구를 만들어 에이전트에 새로운 능력을 부여해 보세요!

profile
IT를 좋아합니다.

0개의 댓글