티스토리 뷰

Chat API란?

https://platform.openai.com/docs/api-reference/chat

 

정확히는 OPEN API에서 제공하는 GPT 모델과 chat을 할 수 있게끔 요청하는 API다.

 

얼마전만해도 completion만을 이용해서 GPT에게 질문하고 결과를 받아올 수 있었는데, 조금 더 다양한 기능을 제공하는 API가 생겼다.

 

기존에 제공하던 completion보다 더 많은 파라미터를 전달 받고, 조금 더 다양한 데이터를 response에 담아준다.

 


 

이전에는 GPT와 메시지를 주고 받는 API로는 Completion만 제공했었다.

 

그런데 Completion API는 간단한 질답은 가능하지만, 바로 직전의 대화도 기억하지 못한다는 단점이 있었다.

 

웹에서 제공하는 ChatGPT는 이전 대화를 기억해 답변을 주기 때문에, API만으로 대화를 주고 받을 때 여러 불편함이 있었다.

 

하지만 Chat은 Post방식으로 이전 대화를 리스트로 전달 받아, 이전 대화를 기억하며 대화 할 수 있다.

 

아마도 2023년 3월 1일 쯤부터 제공한 것 같다.

 

사용법

CURL을 이용한 간단하게 요청 테스트를 해보면,

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": "user", "content": "Hello!"}]
  }'

아래와 같은 응답이 온다.

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

요청 정보를 조금 뜯어보면, 일단 gpt로 보내는 message가 배열이다.

 

role은 메시지의 작성자를 말하는데, system, user, assistant가 있다.


content는 gpt로 보내는 메시지를 의미하고, 추가적으로 name을 선책할 수 있다.

 

model은 어떤 모델에게 질문할까를 지정한다.

chat용 모델은 gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301 와 같은 모델들이 존재한다. 다른 용도의 봇들을 확인하려면 여기서 확인할 수 있다.

 

이 중에 GPT-4는 제한된 사용자에게만 지원이 가능하고, 화이트리스트에 지원 요청을 해야 사용이 가능하다고 한다.

 

개인적으로는 GPT-3.5-turbo가 속도면에서 빨라서 가장 사용할만 했다.

(GPT-4는 정확도가 빠를지는 몰라도 답변 생성속도가 너무 느렸음)

 

이 외에는 completion과 동일하게 temperature, top_p, max_tokens 등이 존재한다.

 

코드(2023.5.13 수정)

endpoint가 completions와 동일하고 중간에 chat이 추가되었다. 
https://api.openai.com/v1/chat/completions

@Value("${apikey}")
private String API_KEY;
private static final String ENDPOINT = "https://api.openai.com/v1/chat/completions";

public String editText(String prompt, float temperature, int maxTokens) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Bearer " + API_KEY);

    List<ChatMessage> messages = new ArrayList<>();

    messages.add(new ChatMessage("user", prompt));

    Map<String, Object> requestBody = new HashMap<>();
    requestBody.put("messages", messages);
    requestBody.put("model","gpt-3.5-turbo");
    requestBody.put("temperature", 0.0f);
    requestBody.put("max_tokens", 50);

    HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Map> response = restTemplate.postForEntity(EDIT_ENDPOINT, requestEntity, Map.class);
    Map<String, Object> responseBody = response.getBody();

    return responseBody.toString();
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessage {
    private String role;
    private String content;
}

 

마치며

써보면서 다양한 테스트를 해보고 싶었는데, 내 openAI API 토큰이 사용량 초과로 만료되었다. 어떻게 다시 구해서 추가 테스트를 해볼 것 같다. 

 

2023.5.13 수정 : 실제로 써봤는데, 기존 코드가 너무 오류가 많았어서 싹 고치고 제대된 답변이 나오는지도 확인함

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함