데이터 & 머신러닝

OpenAI Function Calls 설명 및 Python 예제

작은소행성☄️ 2025. 2. 22. 14:36
728x90

OpenAI Function Calls 란

OpenAI 의 새로운 API 기능으로 모델이 특정 기능을 직접 호출할 수 있도록 지원하는 기능이다. 

기존의 단순 텍스트 기반 응답 방식과는 달리 OpenAI 모델이 함수를 자동으로 호출하고 실행할 수 있도록 설계되어 있다. 

 

기존 방식과 차이점 

기존 API 방식 OpenAI Function Calls
모델이 텍스트 응답만 생성 모델이 직접 함수 호출 가능
API 응답을 받아 추가 처리 필요 모델이 필요한 함수 실행 후 결과 반환
단순한 Q&A 형태 동적 기능 추가 가능 (API 호출, 데이터 변환 등)

 

Function Calls 처리 프로세스

  1. 프롬프트로 질문 입력 후 OpenAI API 호출 
  2. OpenAI 모델이 사용자의 요청 분석 
  3. Function Calls 를 사용해 적잘한 함수 호출 요청
  4. 함수 실행 및 결과 반환 
  5. OpenAI 모델이 응답 완성 후 결과 제공

 

실습

OpenAI 계정 생성 후 API 키 발급 받기

라이브러리 설치 

pip install openai

 

기본 예제

"현재 서울의 날씨를 알려줘" 라는 질문을 받고 get_weather 함수를 실행하는 예제

import openai
import json
import os

# OpenAI API Key 설정
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")  # 환경 변수에서 API Key 불러오기

# OpenAI API 클라이언트 설정
client = openai.OpenAI(api_key=OPENAI_API_KEY)

# Function Calls 예제 함수 정의
def get_weather(city: str):
    """도시 이름을 입력하면 날씨 정보를 반환하는 예제 함수."""
    return {
        "city": city,
        "temperature": "20°C",
        "condition": "Clear"
    }

# Function Calls 정의
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Returns the current weather for a given city.",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "The name of the city."
                    }
                },
                "required": ["city"]
            }
        }
    }
]

# OpenAI API 호출
response = client.chat.completions.create(
    model="gpt-4-mini",
    messages=[{"role": "user", "content": "What is the weather like in Seoul?"}],
    tools=tools
)

# 응답 출력
print(json.dumps(response, indent=2))

 

 

응답 구조

json 형식으로 응답을 반환함

{
  "id": "chatcmpl-abc123", // API 요청의 고유 ID
  "object": "chat.completion", // 반환된 객체 타입
  "created": 1700000000,
  "model": "gpt-4-mini", // 사용한 OpenAI 모델
  "choices": [ // 응답 목록 (여러 응답이 있을 수 있음)
    {
      "index": 0,
      "message": {
        "role": "assistant", // 모델의 역할
        "tool_calls": [ // 모델이 실행해야 하는 함수 목록
          {
            "function": {
              "name": "get_weather", // 호출할 함수 이름
              "arguments": { // 함수에 전달할 인자
                "city": "Paris"
              }
            }
          }
        ]
      },
      "finish_reason": "tool_calls" // 모델이 응답을 종료한 이유 (tool_calls: 함수 호출 필요)
    }
  ],
  "usage": {
    "prompt_tokens": 20, // 사용자가 입력한 토큰 개수
    "completion_tokens": 15, // 모델이 생성한 응답 토큰 개수
    "total_tokens": 35 // 전체 토큰 개수
  }
}

 

 

응답 처리 및 함수 실행

Function Calls  응답 추출 

tool_response = response["choices"][0]["message"]["tool_calls"]

 

OpenAI 응답을 파싱해 적절한 함수 실행

# 함수 실행을 위한 매핑
function_map = {
    "get_weather": get_weather
}

# 함수 실행 및 결과 출력
for tool_call in tool_response:
    function_name = tool_call["function"]["name"]
    arguments = tool_call["function"]["arguments"]
    
    if function_name in function_map:
        result = function_map[function_name](**arguments)
        print(f"Function executed: {function_name}, Result: {result}")

 

 

고려할 사항 

비용 및 성능 최적화 

  • API 호출을 최소화 하도록 설계해야 함
  • 캐싱을 이용하여 동일한 요청을 반복 처리하지 않도록 구현해야 함 

 

에러 핸들링

  • try-except 을 활용해 에러 발생에 대한 적절한 처리 수행 
  • OpenAI API 함수 호출 실패에 대비 
try:
    response = client.chat.completions.create(
        model="gpt-4-mini",
        messages=[{"role": "user", "content": "What is the weather like in Seoul?"}],
        tools=tools
    )
except Exception as e:
    print(f"API 호출 중 오류 발생: {e}")

 

보안 및 데이터 보호 

  • API Key 는 환경변수에서 관리 
  • 민감한 데이터를 직접 전달하지 않도록 주의

 


활용 사례 

  • 데이터 변환 및 처리 자동화 
    • csv, json 등의 데이터를 특정 형식으로 변환
  • 외부 API 연동 
    • 날씨, 환율, 주식 가격 조회 API 등 OpenAI Function Calls 를 사용해 응답 자동화
  • 챗봇 내 동적 기능 추가 
    • 사용자의 요청에 따라 이메일 발송, 일정 조율, 문서 요약 등을 수행하는 챗봇

 

https://platform.openai.com/docs/assistants/tools/function-calling

728x90
반응형