반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- codedeploy
- Spring Error
- aws
- docker
- Kafka
- chartjs
- PostgreSQL
- VPN
- Jenkins
- node
- IntelliJ
- 도커
- SQL
- Python
- kubeflow
- Flux
- chart.js
- or some instances in your deployment group are experiencing problems.
- redis
- AWS CI/CD 구축하기
- COALESCE
- JavaScript
- aws cicd
- Airflow
- java bigdecimal
- codepipeline
- codebuild
- Spring
- codedeploy error
- bootstrap
Archives
- Today
- Total
Small Asteroid Blog
OpenAI Function Calls 설명 및 Python 예제 본문
728x90
OpenAI Function Calls 란
OpenAI 의 새로운 API 기능으로 모델이 특정 기능을 직접 호출할 수 있도록 지원하는 기능이다.
기존의 단순 텍스트 기반 응답 방식과는 달리 OpenAI 모델이 함수를 자동으로 호출하고 실행할 수 있도록 설계되어 있다.
기존 방식과 차이점
기존 API 방식 | OpenAI Function Calls |
모델이 텍스트 응답만 생성 | 모델이 직접 함수 호출 가능 |
API 응답을 받아 추가 처리 필요 | 모델이 필요한 함수 실행 후 결과 반환 |
단순한 Q&A 형태 | 동적 기능 추가 가능 (API 호출, 데이터 변환 등) |
Function Calls 처리 프로세스
- 프롬프트로 질문 입력 후 OpenAI API 호출
- OpenAI 모델이 사용자의 요청 분석
- Function Calls 를 사용해 적잘한 함수 호출 요청
- 함수 실행 및 결과 반환
- 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
반응형
'데이터 & 머신러닝' 카테고리의 다른 글
Hugging Face (1) | 2025.02.07 |
---|