프로젝트
Open AI 를 활용한 면접 문제 생성 프로그램-5. 키워드 추출
dlxortmd123
2023. 5. 1. 02:23
개요
원래 Kakao 에 있는 키워드 추출을 이용하려고 했지만, 기업용으로 확인되어 다음 사이트의 api 로 바꿨다..
원래 면접 질문을 가져올 때 키워드를 포함해서 가져오려고 했지만, 결과에 따라 키워드 분리 방법이 달라질 것 같아서 그만두었다. (이 방법으로 다시 변경)
맡김 서비스 분석 (초기)
일단 해당 api 는 월 100 건까지는 무료고, OpenAI 처럼 헤더에 키를 넣고 바디에 분석할 글을 넣으면 된다.
결론: 아래와 같이 보내면 된다.
curl -X POST \
https://api.matgim.ai/54edkvw2hn/api-keyword \
-H 'content-type: application/json' \
-H 'x-auth-token: [your-api-key]' \
-d '{
"document": "키워드 추출 API 입니다. 문장을 분리하고 명사룰 추출하여 빈도와 함께 반환합니다."
}'
응답으로는 문장으로 분리된 리스트가 나오고 해당 리스트 안에 키워드 리스트가 존재하는 형태이다. document 에 여러 문장을 넣으면 여러 개의 리스트가 나오는 것 같다.
구현
기본적으로 OpenAI 와 구현이 상당히 비슷하다. OpenFeign 연동 코드를 짜고 호출하는 방식이다. (자세한 것은 깃헙 참고)
변경점
기존 OpenAI 코드에서 OpenFeign 인터페이스가 도메인 패키지에 있는 인터페이스를 상속받는 식으로 구현했다.
하지만, 도메인 패키지의 인터페이스의 추상메서드에서 파라미터나 리턴값으로 나오는 DTO 가 OpenAI 의 스펙에 종속적인 문제가 생겼다.
따라서 중간에 클래스를 하나 더 두어서 공용으로 쓸 DTO 로 변환하도록 바꾸었다.
키워드 추출을 구현할 때도 이와 같이 구현하였다.
기존
OpenFeign 연동 코드 <(상속)- 도메인 인터페이스
변경
OpenFeign 연동 코드 <(호출)- OpenFeign 연동 코드 호출(공용 DTO 변환) <(구현)- 도메인 인터페이스
다시 OpenAI 이용... (최종)
알고보니 형식을 지정해서 받을 수 있었다... 다음과 같이 형식을 지정해서 보내니 해당 형식에 맡게 지정해서 보내주었다.
따라서 json 형식으로 받은 다음 ObjectMapper 를 통해 역직렬화하면 된다!
형식 지정
[
"Category": "Category Name",
"Questions":
[
{
"Question": 질문1,
"Keywords":
[
]
},
{
"Question": 질문2,
"Keywords":
[
]
},
]
]
결과
[
{
"Category": "DB",
"Questions": [
{
"Question": "데이터베이스 정규화에 대해 설명해보세요.",
"Keywords": ["정규화"]
},
{
"Question": "인덱스를 사용하는 이유는 무엇인가요?",
"Keywords": ["인덱스"]
},
{
"Question": "트랜잭션이란 무엇인가요? ACID 특성에 대해 설명해주세요.",
"Keywords": ["트랜잭션", "ACID"]
}
]
},
{
"Category": "NETWORK",
"Questions": [
{
"Question": "TCP와 UDP의 차이점은 무엇인가요?",
"Keywords": ["TCP", "UDP"]
},
{
"Question": "HTTP와 HTTPS의 차이점은 무엇인가요?",
"Keywords": ["HTTP", "HTTPS"]
},
{
"Question": "로드밸런싱의 개념과 사용 이유에 대해 설명해주세요.",
"Keywords": ["로드밸런싱"]
}
]
},
...
]