OpenAI API Function이 뭘까?

Jang990·2023년 12월 13일

Function?

OpenAI API에서는 23년 6월부터 지원해주는 Function 기능이 있습니다.
Function 기능의 목적은 다음 사진을 확인해봅시다.

출처 : https://www.datacamp.com/tutorial/open-ai-function-calling-tutorial
해당 문서에서는 외부 API를 연동하는 예시를 설명하고 있지만, 현재 글에서는 GPT를 통해 특정 인자를 받는 방법을 예시로 들고 있습니다.


예를 들어 내가 GPT에 질문할 때 나의 질문의 수준을 0~100 사이의 숫자로 평가받고 싶다고 해봅시다.
이런 사전 설정은 API에서 system role을 통해 사용할 수 있습니다.
일반적인 프롬프트를 통해서 질문을 한다면 이렇게 답변을 받을 수 있을 것입니다.
가장 위에 규칙으로 설정한 system 메시지에 주목해주세요

이런 경우 하나의 문자열에 score가 섞여있기 때문에 우리가 원하는 score라는 특정한 값을 파싱하기 힘듭니다.


다음 사진과 같이 score를 따로 반환받을 수 있는 기능이 function입니다.
답은 2가 되었고 score는 100이 반환됐습니다.

어떻게 쓸까?

Function은 다음과 같이 사용하면 됩니다.
messages 등등 여러 값들은 생략하고 tools를 중심으로 봐주시길 바랍니다.

{
  "model": "Function은 모델명 3.5 이상만 지원. ex) gpt-3.5-turbo",
  "messages": [
		{"role": "user", "content": "1+1은 뭐에요?"}
    ],
  "tools": [ // function을 사용하기 위한 설정 부분
    {
      "type": "현재는 예시인 function만 지원 ex) function",
      "function": {
        "name": "함수명 - tool_choice에서 씀 ex) myFunction",
        "description": "함수의 동작 정의 ex) 질문하면 대답을 해주고, 질문 점수를 0~ 100로 평가해줘",
        "parameters": {
          "type": "object", // response로 받을 타입
          "properties": { // json 스키마를 따름 - response에 arguments의 구조
            "answer": {"type": "string"},
			"score": {"type": "number"}
          }
        },
        "required": ["answer", "score"] // answer, score를 필수적으로 반환하도록 권유.(강제가 아님을 주의.)
      }
    }
  ],
// 이렇게 명시하면 항상 myFunction이라는 함수를 사용하도록 만듦
  "tool_choice": {"type": "function", "function": {"name": "myFunction"}}  
//   "tool_choice": "auto" // auto는 GPT에게 Function을 쓸지 선택권을 줌
}

이렇게 보내면 다음과 같은 정보를 메시지로 받을 수 있습니다.


주의 - function의 결과인 arguments 형식 오류

required를 사용해도 항상 형식을 유지하며 반환하지 않습니다.
function에 parameters에 형식을 정의해도 사용자의 응답에 따라 parameters를 무시하고 string 값을 반환하기도 합니다.
required를 설정해도 마찬가지 입니다.

프롬프트를 설정해서 이 문제를 해결하는 방법이 있지만 완전한 해결방법은 아닌 것 같습니다.

이 글을 참고해주세요.
https://community.openai.com/t/problem-with-required-property-when-function-calling/273635/15

참고

https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools
https://www.datacamp.com/tutorial/open-ai-function-calling-tutorial
https://wikidocs.net/204338

profile
개발 기록 아카이브

0개의 댓글