이번 프로젝트에서 가장 중요했던 부분이다.
해당 질문에 대하여 학습된 답변을 가져와야 하는 데, 이 부분은 처음하는 거라 스케줄을 많이 빼고 충분히 볼 수 있도록 계획했었다.
일단 당연히 GCP의 dialogFlow가 필요하다.
기본적으로 질문: 안녕 -> 답변: 안녕하세요! 가 나오기 때문에 해당 답변을 얻어낼 수 있도록 해보자.
우선 설정에서 나오는 Project ID를 가져와야 한다.
해당 ID를 복사해서 application.yml에 넣어두자.
나중에 value로 사용해야 한다.
그러고 그 아이디를 클릭하면 GCP 콘솔로 넘어가게 된다.
여기서
라이브러리에 들어가서
여기의 Dialogflow API에 들어간 후 사용할 수 있도록 설정을 해준다.
사실 굳이 안해도 이미 설정이 되어 있긴 하더라...
그리고 권한 설정을 위해
여기로 들어간다.
그러면 이렇게 계정들이 나올거다.
그러면 사용할 계정의 역할에 Dialogflow API 관리자를 추가해준다.
서비스 계정으로 넘어와서
나와있는 이메일을 클릭한 후
키를 생성해준다.
해당 키는 json 파일로 생성이 될 거고, 해당 키는 스프링부트에서 사용해야 하기 때문에 잘 저장해두도록 한다.
스프링부트로 넘어오자.
일단 다운받은 키를 설정해주어야 하는 데, 환경변수로
GOOGLE_APPLICATION_CREDENTIALS={키의 주소(.json 포함해서)}
키의 주소를 설정해주고 간다.
그리고 build.gradle에 해당 의존성을 추가 해준 후
implementation 'com.google.cloud:google-cloud-dialogflow:4.18.0'
private static int sessionId = 0;
@Value("${dialogFlow.projectId}")
private String projectId;
@Override
public ResponseEntity<String> getChat(String question) {
try(SessionsClient sessionsClient = SessionsClient.create()){
SessionName sessionName = SessionName.of(projectId, String.valueOf(sessionId++));
TextInput.Builder textInput =
TextInput.newBuilder().setText(question).setLanguageCode("ko");
QueryInput queryInput = QueryInput.newBuilder().setText(textInput).build();
DetectIntentResponse response = sessionsClient.detectIntent(sessionName, queryInput);
return new ResponseEntity<>(response.getQueryResult().getFulfillmentText(), HttpStatus.OK);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
나는 응답코드를 이렇게 작성했다.
요청받은 질문에 따라, 세션을 만들고 요청하는 방식이다.
이미 인증키가 있기 때문에 인증에도 문제가 생기지 않는다.
response.getQueryResult().getFulfillmentText()로 응답 중에서 답변을 가져올 수 있다.
간단하게 만든 API를 테스트 해보자면
이렇게 안녕을 입력했을 때 정상적인 답변이 나오게 된다.
하지만 좀 치명적인 문제가 많이 느리다는 것이다.
DetectIntentResponse response = sessionsClient.detectIntent(sessionName, queryInput);
세션의 아이디가 계속 바뀌기 때문에 다른 세션에서 동작을 하는 것으로 확인했고, 1개를 요청하던 2개를 요청하던 똑같은 시간으로 그냥 오래 걸린다.
당분간은 시간 줄일 수 있도록 해보고, 너무 느리다면 웹훅으로도 해보도록 해야겠다.
'크무톡톡 프로젝트' 카테고리의 다른 글
Nginx로 Swagger Proxy_pass (1) | 2024.07.22 |
---|---|
CompletableFuture 적용으로 성능 튜닝 (0) | 2024.03.09 |
SMTP 서버 구축 (0) | 2024.01.04 |
EC2에 Java 17 설치 (1) | 2023.12.29 |
EC2 memory swap (0) | 2023.12.29 |