GPT function calling
OpenAI의 GPT API에서 얼마전부터 새롭게 제공하는 function calling 기능에 대한 설명입니다.
GPT function calling은 게임 체이저(Game changer)라고 블릴 만큼 굉장히 편하고 유용한 기능입니다. 이 기능을 이용하면 괜찮은 GPT 응용 애플리케이션을 매우 간단하게 만들 수 있습니다.
GPT function calling 설명
GPT function calling을 GPT에게 프롬프트와 함께 함수의 정의 목록을 함께 전달하면 GPT가 프롬프트를 보고 전달된 함수 중 하나를 호출해야 한다고 판단하면 그 중 하나를 호출해서 결과를 자신에게 전달해 달라고 하고 그 전달된 결과를 입력 받아 최종 메세지를 만드는 것을 말 합니다.
간단하게 플로우를 그려 보면 다음과 같습니다.
- GPT에게 프롬프트(질문)과 함께 함수 목록을 전달
- GPT가 프롬프트를 보고 함수를 실행 안해도 되면 그대로 메세지를 답변
- 만약 함수를 실행해서 그 결과가 필요하다면 함수를 실행해달라는 결과를 리턴
- GPT가 호출해달라고 한 함수를 사용자가 호출해서 결과값을 GPT에게 주고 다시 호출
- GPT가 이전의 프롬프트와 함수의 결과를 다 합쳐서 메세지를 만들어서 전달
- 만약 5에서 다시 다른 함수를 호출해야 한다면 3번으로 가게 됨
GPT function calling 예제 코드
아래 Python 코드를 살펴보시면 됩니다. 무척 쉽습니다.
중요한 점은 콘텍스트를 계속 유지해줘야 한다는 것입니다.
그래서 과거의 대화내역 뒤에 함수의 결과값을 다시 붙여줘야 제대로 대답합니다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
import openai openai.api_key = "***** openai api key *****" chat_completion: openai.ChatCompletion = openai.ChatCompletion.create( model="gpt-4", messages=[ { "role": "system", "content": "your name is Ironman. you anser in Korean", }, { "role": "user", "content": """What is the weather like today?""", } ], functions=[ { "name": "get_wether", "description": "get wether information", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "city or nation name", } }, "required": ["location"], }, }], function_call="auto", ) if chat_completion.choices[0].finish_reason == "function_call": function_name = chat_completion.choices[0].message.function_call.name functoin_arguments = chat_completion.choices[0].message.function_call.arguments # 함수 실행 부분을 추가 # function_result에는 함수를 실행하고 난 결과값을 넣어준다. function_result = "function result" messages = [ { "role": "system", "content": "your name is Ironman. you anser in Korean", }, { "role": "user", "content": """What is the weather like today?""", }, { "role": "function", "name": function_name, "content": function_result } ] second_chat_completion: openai.ChatCompletion = openai.ChatCompletion.create( model="gpt-4", messages=messages, ) result_message = second_chat_completion.choices[0].message.content else: result_message = chat_completion.choices[0].message.content print(result_message) |