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을 쓸지 선택권을 줌
}
이렇게 보내면 다음과 같은 정보를 메시지로 받을 수 있습니다.

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