7.2 예제: 계산기, 날씨 API, DB 조회기
Function Calling 기능을 통해 GPT 모델에게 구조화된 도구를 사용하게 하여 다양한 외부 기능과의 연동 기반 작업을 수행할 수 있습니다. 본 절에서는 대표적인 세 가지 연동 예제를 중심으로 Function Calling의 실전 활용을 보여드립니다.
계산기 (산술 연산 API)
날씨 조회 (외부 API 호출)
데이터베이스 조회기 (DB 쿼리 실행)
이 예제들은 GPT의 인공지능 능력과 구조화된 프로그래밍 호출 방식의 결합을 보여 주는 훌륭한 데모입니다.
7.2.1 계산기 함수 예제
가장 기본적이면서도 GPT로 수행하기에는 부정확할 수 있는 대표적인 작업이 바로 산술 연산입니다. “3.87 곱하기 12.5는 얼마야?”와 같은 질문은 언뜻 단순해 보이지만, AI 모델은 종종 부정확한 결과를 출력합니다.
함수 정의
계산을 위한 간단한 함수는 다음과 같이 구성됩니다:
def calculate(operator: str, a: float, b: float) -> float:
if operator == "add":
return a + b
elif operator == "subtract":
return a - b
elif operator == "multiply":
return a * b
elif operator == "divide" and b != 0:
return a / b
else:
raise ValueError("잘못된 연산자 또는 0으로 나누기")
Function Schema 정의
OpenAI API에 이 함수를 사용할 수 있도록 명세합니다.
function_def = {
"name": "calculate",
"description": "두 숫자에 대해 지정된 사칙연산을 수행합니다.",
"parameters": {
"type": "object",
"properties": {
"operator": {
"type": "string",
"enum": ["add", "subtract", "multiply", "divide"],
"description": "수행할 연산: add, subtract, multiply, divide"
},
"a": {
"type": "number",
"description": "첫 번째 숫자"
},
"b": {
"type": "number",
"description": "두 번째 숫자"
}
},
"required": ["operator", "a", "b"]
}
}
GPT 호출 예시
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "user", "content": "128 나누기 4는 얼마야?"},
],
functions=[function_def],
function_call="auto"
)
GPT는 사용자의 질문을 이해하고 calculate
함수를 호출하도록 응답할 수 있습니다:
{
"function_call": {
"name": "calculate",
"arguments": "{\"operator\":\"divide\",\"a\":128,\"b\":4}"
}
}
이후 해당 함수 호출 결과를 가지고 GPT에게 다시 전달하면 최종 응답이 생성됩니다.
7.2.2 날씨 API 연동
GPT가 실시간 정보를 알 수 없다는 가장 큰 제약을 극복하는 방법 중 하나가 Function Calling입니다. 여기서는 외부 날씨 API(OpenWeatherMap 등)를 연동해 GPT가 실시간 날씨 정보를 사용자에게 전달하도록 해보겠습니다.
예시: OpenWeatherMap API 호출 함수
import requests
def get_weather(city: str) -> str:
API_KEY = "YOUR_OPENWEATHERMAP_API_KEY"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
weather = data["weather"][0]["description"]
temp = data["main"]["temp"]
return f"{city}의 현재 날씨는 {weather}이며 기온은 {temp}°C입니다."
Function Schema 정의
weather_function = {
"name": "get_weather",
"description": "지정한 도시의 현재 날씨를 조회합니다.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "조회할 도시 이름 (예: Seoul, New York)"
}
},
"required": ["city"]
}
}
GPT 호출 및 함수 실행 흐름
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "user", "content": "서울의 날씨 알려줘"}
],
functions=[weather_function],
function_call="auto"
)
GPT의 응답이 다음과 같다면:
{
"function_call": {
"name": "get_weather",
"arguments": "{\"city\":\"Seoul\"}"
}
}
해당 함수 결과:
weather_info = get_weather("Seoul")
결과 메시지를 GPT에게 전달:
[
{"role": "assistant", "content": None, "function_call": {...}},
{"role": "function", "name": "get_weather", "content": weather_info}
]
7.2.3 데이터베이스 조회기 (DB 조회)
기업 내 시스템, 예컨대 고객 정보, 재고 현황, 직원 데이터 등을 GPT를 통해 조회하도록 만들 수 있습니다.
SQLite를 활용한 예시: 사용자 이메일 조회
데이터베이스 구성 예시:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
);
샘플 데이터:
INSERT INTO users (name, email)
VALUES ('홍길동', 'hong@example.com'), ('김영희', 'kim@example.com');
파이썬 함수:
import sqlite3
def get_user_email(name: str) -> str:
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("SELECT email FROM users WHERE name=?", (name,))
result = cursor.fetchone()
conn.close()
if result:
return f"{name}님의 이메일은 {result[0]}입니다."
else:
return f"{name}님을 찾을 수 없습니다."
Function Schema 정의
db_function = {
"name": "get_user_email",
"description": "사용자의 이름을 기반으로 이메일 주소를 조회합니다.",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "이메일을 조회할 사람의 이름"
}
},
"required": ["name"]
}
}
GPT 호출 및 워크플로우
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "user", "content": "김영희님의 이메일 주소가 뭐야?"}
],
functions=[db_function],
function_call="auto"
)
GPT가 다음과 같이 응답하면:
{
"function_call": {
"name": "get_user_email",
"arguments": "{\"name\":\"김영희\"}"
}
}
이를 함수로 처리:
email = get_user_email("김영희")
이후 메시지 흐름에 결과 연결:
[
{"role": "assistant", "content": None, "function_call": {...}},
{"role": "function", "name": "get_user_email", "content": email}
]
마무리 및 확장 아이디어
Function Calling은 GPT가 내부 “지식 기반”이 아닌 “외부 도구나 데이터”와 실시간으로 상호작용하는 인터페이스를 제공합니다.
계산기
내부 정의된 연산 함수
정확성 높이기
날씨
외부 API(OpenWeatherMap)
실시간 외부 정보 연동
데이터베이스 조회
SQLite, SQLAlchemy 등
기업 전산시스템 통합
추가적으로 Function Calling은 다음과 같은 방향으로 확장될 수 있습니다:
검색 엔진과 연동하여 최신 정보 전달
ERP, CRM 시스템과 연결
금융 데이터 실시간 조회기 구현
사용자 맞춤형 추천 시스템
이 기능은 AI를 하나의 ‘스마트 허브’로 진화시키는 강력한 통로입니다.
다음 절에서는 이 Function Calling 기술과 JSON Mode를 결합하여 구조화된 응답을 강제하는 방법에 대해 설명하겠습니다.
Last updated