open api의 function call
반응형
최근에 chat gpt로 python을 공부하다가 function call이라는 기능이 나와서 정리할겸 포스팅.
function call은 어떤 기능인가?
사용자가 정의한 함수(function)를 GPT가 호출(call)하도록 하는 것.
이게 왜 필요할까?
걍 gpt에 문의하면 gpt가 답해주는거 아님?
이 기능의 핵심은. GPT에게 함수를 밀리 알려주면 필요할 때 함수를
GPT가 호출할 수 있도록 해 준다는거다.
즉, 내가 chat gpt를 통해 얻은 데이터를 내가 원하는 방식으로 원하는 포멧으로
저장하는 함수를 구현 한 다음 이를 chat gpt가 호출 해 줄 수 있다는 거.
예제는 뭐 구글링 해 보면 많이 나오니까. 개념만 이해하고 넘어가자.
https://platform.openai.com/docs/guides/text-generation/function-calling
import openai
import json
openai.api_key = 이건비밀
# from api_keys import openai_api_key # API key가 github에 올라가면 폐기되기 때문에 따로 import 했습니다.
# openai.api_key=openai_api_key # API key가 github에 올라가면 폐기되기 때문에 따로 import 했습니다.
# get_current_weather 함수를 실제로 구현한다면 실제 날씨 정보 API를 이용해야 하지만,
# 여기서는 예시를 위해 간단하게 하드 코딩된 함수를 제공합니다.
# minwoo : gpt에게 알려줄 함수.
def get_current_weather(location, unit="fahrenheit"):
"""location으로 받은 지역의 날씨를 알려 주는 기능"""
weather_info={
"location": location,
"temperature": "72",
"unit": unit,
"forecast": ["sunny", "windy"],
}
return json.dumps(weather_info)
def run_conversation():
# 1단계: messages뿐만 아니라 사용할 수 있는 함수에 대한 설명 추가하기
# leeminwoo : 펑션 정의는 이름(name)과 설명(description), 인자(parameters)를 포함해야하며 필수 파라미터는 "required"
messages=[{"role": "user", "content": "What's the weather like in Boston?"}]
functions=[
{
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
}
]
# leeminwoo : openai api에 대화와 함수정보를 전달하고 응답을 확인한다.
response=openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
functions=functions,
function_call="auto", # auto가 기본 설정입니다.
)
response_message=response["choices"][0]["message"]
# leeminwoo : 테스트용 출력
# print("첫번재 응답")
# print(response)
# 2단계: GPT의 응답이 function을 실행해야 한다고 판단했는지 확인하기
if response_message.get("function_call"):
# 3단계: 해당 함수 실행하기
available_functions = {
"get_current_weather": get_current_weather,
} # 이 예제에서는 사용할 수 있는 함수가 하나뿐이지만, 여러 개를 설정할 수 있습니다.
function_name = response_message["function_call"]["name"]
function_to_call = available_functions[function_name]
function_args = json.loads(response_message["function_call"]["arguments"])
function_response = function_to_call(
location=function_args.get("location"),
unit=function_args.get("unit"),
)
# 4단계: 함수를 실행한 결과를 GPT에게 보내 답을 받아오기 위한 부분
# leeminwoo : 위에서 받은 첫번째 응답값을 messages에 추가한다.
messages.append(response_message) # GPT의 지난 답변을 messages에 추가하기
messages.append( #leeminwoo : messages에 함수의 실행결과를추가한다.
{
"role": "function",
"name": function_name,
"content": function_response,
}
)
# 함수 실행 결과도 GPT messages에 추가하기
# leeminwoo : 두번째 openai api 요청
second_response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
) # 함수 실행 결과를 GPT에 보내 새로운 답변 받아오기
# leeminwoo : 두번째 응답 출력
# print("두번재 응답")
# print(second_response)
return second_response["choices"][0]["message"]["content"]
print(run_conversation())
'Study > Python' 카테고리의 다른 글
가상환경 관련 실수 (0) | 2024.09.30 |
---|---|
챗GPT&파이썬으로 AI 직원 만들기 (수정4) ffmpeg (0) | 2024.08.04 |
챗GPT&파이썬으로 AI 직원 만들기 (수정3) (0) | 2024.06.22 |
챗GPT&파이썬으로 AI 직원 만들기 (수정2) (0) | 2024.06.16 |
챗GPT&파이썬으로 AI 직원 만들기 (수정1) (0) | 2024.05.29 |
TAGS.