먼저 요청/응답을 어떤 형식으로 받을 것인지 생각해보았습니다.
도큐먼트를 읽어보니 사용하는 모델에 따라 요청해야하는 형식이 다른 것을 확인하였습니다.
# Text 응답 요청
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
# Audio 응답 요청
curl https://api.openai.com/v1/audio/speech \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "The quick brown fox jumped over the lazy dog.",
"voice": "alloy"
}' \
--output speech.mp3
....
특히, 오디오 / 사진 / 파일 / 텍스트 등에 따라 모두 EndPoint도 달랐기 때문에 제 API 서버에서도 용도에 따라 각자 다른 Request와 EndPoint를 가지는 것으로 정하였습니다.
그래서 먼저 텍스트 요청에 대한 처리만을 처리하기 위한 RequsetDto와 Controller 를 생성하였습니다.
@RestController
@RequiredArgsConstructor
public class GptApiController {
private final GptApiService gptApiService;
@PostMapping("/text")
@ResponseBody
public String getAnswerForQuestion(@RequestBody TextReq req) {
return gptApiService.getAnswerForQuestion(req).toString();
}
}
@Data
public class TextReq {
private String question;
}
위의 Text 응답 요청 curl을 보면, system과 user 2가지의 role이 있고 각각의 content가 있는 것을 볼 수 있습니다.
시스템에게 assistant, poetic assistant 등으로 설정하고 역할을 부여 할 수 있는 것 같은데 몇몇 테스트를 해보고 여러 포스팅들을 찾아보니 별다른 차이점을 느끼기 어렵다는 이야기가 많아 저는 system 역할을 제외하였습니다.
그리고, 이제 openai 에게 질문할 question을 Post 형식으로 받아 서비스에게 전달하도록 작성하였습니다.
'Web > GPT 응답 API 서버' 카테고리의 다른 글
04. 마무리! (0) | 2024.01.20 |
---|---|
03. Service를 구현해보자! (1) | 2024.01.20 |
01. API 구조를 설계해보자! (0) | 2024.01.20 |
00. Chat GPT 응답을 반환해주는 API 서버를 만들어보자! (0) | 2024.01.20 |