List
지난 글에서는 RAG(Retrieval-Augmented Generation)을 통해 LLM이 가진 최신성이나 전문성 같은 한계를 극복하는 방법을 살펴봤습니다. RAG은 필요한 정보를 문서에서 찾아 참고하는 방식으로, 모델 자체의 한계를 효과적으로 해결할 수 있었죠.
그런데 단순히 정보를 참조하는 방식을 넘어, 실제로 LLM이 다양한 외부 기능이나 도구를 직접 활용하여 더 많은 작업을 수행할 수 있다면 어떨까요?
이번 글에서는 Tool(도구)이라는 개념이 무엇이고, LLM이 왜 이런 Tool을 직접 활용할 수 있어야 하는지에 대해서 구체적으로 살펴보고, 이런 Tool을 LLM이 실제로 사용할 수 있게 해주는 OpenAI의 함수 호출(Function Calling) 기능까지 자연스럽게 설명해 보겠습니다.
1. Tool(도구)이란 무엇인가?
•
Tool(도구)은 쉽게 말해, LLM이 스스로 처리하기 어려운 작업을 대신 처리하거나, LLM의 능력을 보완하기 위해 사용하는 외부 기능을 의미합니다.
기본적으로 LLM은 언어 모델이기 때문에 아래와 같은 작업에서 명확한 한계가 있습니다.
•
최신의 실시간 정보를 얻는 것
•
정확한 계산이나 복잡한 분석 작업
•
사용자 개인의 데이터를 바탕으로 개인화된 정보를 제공하는 작업
•
사용자의 요청을 실제 행동으로 수행하는 작업
이런 한계를 극복하기 위해 LLM이 직접 사용할 수 있는 다양한 Tool이 필요합니다.
2. LLM이 활용할 수 있는 Tool의 종류와 그 필요성
실제로 LLM이 활용할 수 있는 대표적인 Tool과, 그 Tool이 필요한 이유를 자세히 살펴봅시다.
1. 최신 정보 및 실시간 데이터 제공 Tool
•
날씨 API (OpenWeatherMap 등)
LLM은 현재 시점의 날씨 정보를 알 수 없기 때문에, 날씨 API를 이용하면 사용자의 위치나 특정 지역의 최신 날씨 정보를 정확히 전달할 수 있습니다.
•
웹 검색 API (Google, Bing)
최신 뉴스나 최근 정보는 LLM이 자체적으로 학습하지 못한 정보이기 때문에 웹 검색을 통해 실시간으로 조회해야만 정확한 최신 정보를 제공할 수 있습니다.
최신 정보가 중요한 서비스라면, LLM이 직접 최신 데이터를 가져와야 정확한 답변이 가능합니다. 예를 들어, 오늘의 뉴스나 최신 주가 정보를 사용자가 요청했을 때 모델이 자체적으로 답변할 수 없으므로, 이런 Tool이 필수적입니다.
2. 정확한 계산 및 전문 분석을 위한 Tool
•
계산기
복잡한 수식이나 정밀한 계산 작업에서 LLM의 자체 계산 결과는 오류 가능성이 큽니다. 계산기를 활용하면 정확한 값을 얻을 수 있습니다.
•
Wolfram Alpha API
수학, 물리, 화학, 통계 등의 전문적인 데이터 분석이 필요한 질문을 처리할 때 Wolfram Alpha API를 사용하면 정밀한 결과를 제공할 수 있습니다.
LLM은 텍스트 기반 모델이기 때문에 수치적 정확성이 필요한 분야에서는 외부 Tool의 지원이 필수입니다. 금융 서비스, 공학 계산 등 정확한 분석이 필수적인 경우 매우 유용합니다.
3. 개인화된 데이터 조회를 위한 Tool
•
관계형 데이터베이스 (PostgreSQL/MySQL)
특정 기업이나 사용자의 개인 데이터를 조회하고, 그 데이터를 기반으로 개인화된 응답을 제공할 수 있습니다.
•
NoSQL 데이터베이스 (MongoDB, DynamoDB, Firebase)
실시간으로 변하는 사용자의 활동 데이터나, 유연한 데이터 구조가 필요한 상황에서 신속한 개인 맞춤형 응답을 제공할 수 있습니다.
사용자가 자신의 개인 정보나 맞춤형 정보를 요청했을 때 LLM이 이를 직접 알 수 없기 때문에, 데이터베이스 조회 Tool이 필수적으로 필요합니다.
4. 외부 작업 자동화를 위한 Tool
•
이메일 발송 API (SendGrid 등)
사용자가 "회의 결과를 메일로 보내줘"와 같은 요청을 했을 때, 실제 메일을 발송하는 작업을 처리합니다.
•
예약 관리 API (Calendly, Google Calendar)
실제로 사용자 요청을 캘린더 예약이나 일정으로 연결하여 작업을 처리할 수 있게 합니다.
단순히 텍스트 답변을 제공하는 것을 넘어 실제 사용자의 요청을 수행하는 서비스를 구축할 때 외부 작업 처리 도구가 필요합니다. 이런 도구들을 활용하면 더 많은 작업을 자동화하고 편리한 서비스를 제공할 수 있습니다.
3. LLM이 직접 Tool을 사용하는 방법: OpenAI의 함수 호출(Function Calling)
이렇게 다양한 Tool을 실제로 LLM이 사용할 수 있게 하는 기술이 바로 OpenAI에서 제공하는 함수 호출(Function Calling) 기능입니다.
이 기능은 사용자의 질문을 분석하고 필요한 경우 외부 함수를 직접 호출하도록 LLM이 스스로 결정할 수 있게 만들어 줍니다.
작동 과정은 다음과 같습니다:
(1) 사용자 질문
(2) LLM이 함수 호출 판단
(3) 외부 함수 실행
(4) 함수 결과를 다시 LLM에 전달
(5) LLM의 최종 답변 생성
Plain Text
복사
실제 구현 과정에서 중요한 요소는 다음과 같습니다:
•
함수 정의(Functions Definition)
어떤 외부 기능을 사용할 수 있는지 미리 정의하여 모델에 알려줍니다.
•
함수 호출 옵션 설정
모델이 함수 호출이 필요하다고 판단하면 자동으로 함수를 호출하도록 설정할 수 있습니다.
•
함수 호출 결과 재전달
호출된 함수의 결과를 다시 LLM에 전달하여 최종 답변을 생성하게 합니다.
이 방식이 중요한 이유는, LLM이 필요할 때 스스로 외부 작업을 판단하고 호출할 수 있도록 만들어주기 때문입니다. 결국 이를 통해 더 강력하고 능동적인 서비스를 구축할 수 있습니다.
4. 실제로 Tool을 활용하는 구체적인 예시: 계산기 함수 호출하기
이제 앞서 살펴본 함수 호출 방식을 더 쉽게 이해할 수 있도록,
간단한 계산기 도구를 실제로 LLM이 호출하여 사용하는 예시를 만들어 보겠습니다.
아래는 기본적인 수학 연산을 처리하는 간단한 계산기 함수의 예시입니다.
1. 계산기 Tool(함수) 정의하기
먼저, LLM에게 제공할 계산기 함수를 정의합니다.
calculator_function = {
"name": "calculator",
"description": "두 숫자 사이의 간단한 계산을 처리합니다.",
"parameters": {
"type": "object",
"properties": {
"num1": {
"type": "number",
"description": "첫 번째 숫자"
},
"num2": {
"type": "number",
"description": "두 번째 숫자"
},
"operation": {
"type": "string",
"enum": ["add", "subtract", "multiply", "divide"],
"description": "수행할 연산의 종류 (add, subtract, multiply, divide 중 하나)"
}
},
"required": ["num1", "num2", "operation"]
}
}
Python
복사
이렇게 하면 LLM이 어떤 인자들을 이용해서 계산기 Tool을 호출해야 하는지 명확히 알 수 있습니다.
2. LLM이 계산기 함수를 호출하는 과정
사용자가 아래와 같은 질문을 했다고 가정해 봅시다.
사용자 질문:
"512 곱하기 24는 얼마야?"
이 질문을 받은 LLM은 다음처럼 동작합니다.
(1) 질문을 분석하여 함수 호출 여부 결정
LLM은 이 질문이 정확한 계산을 요구하는 작업이라고 판단하여, 앞에서 정의한 calculator 함수를 호출하기로 결정합니다.
(2) 함수 호출 요청 (LLM이 생성한 요청)
LLM은 다음과 같은 형태로 요청을 생성합니다.
{
"name": "calculator",
"arguments": {
"num1": 512,
"num2": 24,
"operation": "multiply"
}
}
JSON
복사
(3) 실제 계산 수행 (외부에서 처리)
실제로 위 함수를 기반으로 외부에서 다음과 같은 작업이 수행됩니다.
# 실제 계산 수행 함수 (예시)
def calculator(num1, num2, operation):
if operation == "add":
return num1 + num2
elif operation == "subtract":
return num1 - num2
elif operation == "multiply":
return num1 * num2
elif operation == "divide":
return num1 / num2
else:
return "지원하지 않는 연산입니다."
# 호출된 예시의 실제 처리
result = calculator(512, 24, "multiply")
# 결과: 12288
Python
복사
이렇게 계산이 정확히 수행된 결과인 12288을 다시 LLM에 전달합니다.
(4) 최종적으로 사용자에게 제공되는 답변
최종적으로 LLM은 전달받은 함수의 결과를 토대로 자연스러운 답변을 생성합니다.
LLM의 최종 답변:
"512 곱하기 24는 12,288입니다."
마무리
지금까지 살펴본 Tool과 함수 호출 기능은 LLM의 능력을 한 단계 더 높여주는 중요한 기술입니다. 그리고 이런 기술들을 적극적으로 활용해 더욱 복잡하고 다양한 작업을 처리할 수 있게 만들어 주는 것이 바로 에이전트(Agent) 개념입니다.
Agent는 LLM이 하나 이상의 Tool을 스스로 선택하고, 복합적인 작업을 수행하여 사용자의 요청을 더 지능적으로 처리하는 개념인데, 이에 대해서는 다음 글에서 더 자세히 알아볼 예정입니다.