-
CLOVA Studio 스킬 사용방법 2탄AI/HyperCLOVAX 2024. 3. 31. 16:00
이전 포스팅에서 한국진흥원에서 제공하는 영화순위 API와 CLOVA Studio의 스킬 트레이너 기능을 활용하면 HyperCLOVA X가 바로 어제 일어난 일에 대해서도 답변하도록 만들 수 있다는 것을 확인해 보았는데요. 혹시 생성형 AI로 미래에 일어날 일도 예측하게 만들 수 있을까요? 이번 포스팅에서는 기상청에서 제공하는 단기예보조회 API를 이용해서 사용자가 오늘 날씨에 대해 물어보는 경우에도 답변이 가능한지 알아보도록 하겠습니다.
다만, 기상청의 단기예보조회 API는 앞선 포스팅에서 소개한 영화순위 API에 비해 요청 파라미터를 만들기가 조금 까다로운데요. 그 이유는 nx, ny라는 예보지점 X, Y 좌표를 제공해야 하고 기상청의 예보날짜와 시간을 계산해서 API를 호출해야 합니다. 즉, 쉽게 말해서 사용자로부터 시간과 장소를 전달받은 후 기상청의 요구사항에 알맞게 데이터를 변환하여 제공해야 하죠.
일반적으로 Rulebase 챗봇을 만들 때는 이러한 로직을 직접 백엔드 코드로 구현하였지만 CLOVA Studio의 스킬트레이너를 활용하면 과연 프롬프트 만으로도 이러한 복잡한 로직들을 한 번에 처리할 수 있을지 한번 확인해 보도록 하겠습니다.
⛅ 날씨 API 스킬 생성하기
먼저 CLOVA Studio에 접속하신 뒤에 상단의 [스킬 트레이너] 탭을 클릭하시면 이전 포스팅에서 만들어 놓았던 일상대화 도우미라는 스킬셋이 나타나게 됩니다. 저는 이 스킬셋을 이용하여 스킬을 하나 추가하도록 하겠습니다.
스킬셋의 [목록] 버튼을 클릭하시면 해당 스킬셋에 등록해 놓은 스킬들을 확인하실 수 있습니다. 만약 생성해 놓은 스킬셋이 없다면 오른쪽 상단의 [+ 스킬셋 생성] 버튼을 클릭하여 스킬셋을 먼저 등록해 주시면 됩니다.
다음은 선택한 스킬셋의 스킬 목록을 확인하고 필요한 스킬을 등록합니다 위 이미지와 같이 오른쪽 상단 [+ 스킬 생성] 버튼을 클릭하여 생성할 수 있습니다.
저는 미리 만들어놓은 일상대화 도우미 스킬셋에 단기예보라는 스킬을 등록하였습니다. API Spec은 공공데이터플랫폼에서 제공하고 있는 기상청 단기예보 API 스펙 정보를 토대로 구축하였습니다. 아래는 단기예보 API에 대한 스펙정보입니다.
스킬을 생성할 때 기본적으로 스킬 정보를 입력하고 API Spec을 작성하는 단계가 있지만 자세한 내용은 이전 포스팅에서 다뤄보았으므로 생략하도록 하고 위 API 정보를 토대로 다음 챕터에서는 Manifest에서 작성할 프롬프트에 대해서 고민해 보도록 하겠습니다.
☔ 날씨 API 프롬프트 만들기
앞서 살펴본 API 명세를 토대로 프롬프트에 사용할 파라미터를 선정해 보도록 하겠습니다. 이전 포스팅을 보고 오신 분들이라면 스킬 트레이너 시나리오 기능의 호출 옵션을 통해서 파라미터로 사용할 고정 값들을 지정할 수 있다는 사실을 기억하실 겁니다.
저희는 이 호출 옵션이라는 개념을 알고 있으므로 기상청 단기예보 API를 분석하여 사용자로부터 전달받을 파라미터, 고정 파라미터들을 구분하여 사용할 수 있습니다. 저는 다음과 같이 구분할 수 있을 것 같습니다.
상황에 따라 API 키를 입력받도록 만들 수도 있겠지만 저는 사용자 편의성을 위해서 zero-turn 답변이 가능하도록 제 API키를 고정값으로 사용하려고 다음과 같이 구분하였습니다.
그리고 사용자로부터 전달받아야 하는 파라미터는 위에서 구분한 것과 같이 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표입니다. 모델을 학습시키기 위한 프롬프트에 사용할 데이터들 이므로 주의 깊게 살펴볼 필요가 있습니다.
우선 base_date는 yyyymmdd의 날짜 포맷을 갖고 있고 base_time은 mmss의 날짜 포맷을 사용합니다. 그리고 여기서 주의할 점은 base_date와 base_time은 현재 날짜와 시간이 아닌 예보 발표일자와 시각을 의미합니다.
API Spce 문서에 따르면 예보시간은 3시간 단위를 기준으로 갱신됩니다. 따라서 현재 시간이 08시 32분이라면 base_time은 0800, 16시 17분이라면 base_time은 1400이 됩니다. 따라서 이 점을 주의해서 프롬프트를 작성해야 합니다. 저는 다음과 같이 프롬프트를 작성하였습니다.
✍🏻예보시간에 대한 프롬프트 작성예시
base_time은 [2, 5, 8, 11, 14, 17, 20, 23] 이 값들 중에서 현재 시간과 가까운 작은 값을 사용해서 mmss 포맷으로 변환하여 사용합니다. 예를 들어, 현재 시간이 18시 22분이라면 basetime은 1700이 됩니다.
예보 날짜와 시간을 위한 프롬프트를 작성했다면 이제는 예보지점 X좌표와 Y좌표를 지정해줘야 하는데요. 이 X, Y 좌표 역시 일반적인 위도, 경도가 아닌 기상청에서 제공하는 X, Y 좌표를 기준으로 작성해야 합니다. 예를 들어 “오늘 강남 날씨 알려줘”라고 질문하는 경우 강남의 X, Y 좌표를 찾아서 지정해 줘야 됩니다.
다음과 같이 기상청에서 엑셀 데이터를 제공하고 있지만 이 데이터들을 전부 일일이 지정시키거나 학습시켜 주기에는 너무 많은 공수가 들어가므로 고정값을 시나리오 호출 옵션으로 지정하는 방안도 고려해 볼 수 있을 것 같습니다. 저는 X, Y 좌표에 대한 프롬프트를 다음과 같이 작성하였습니다.
✍🏻 지역 X, Y 좌표에 대한 프롬프트 예시
nx, ny값은 공공데이터 플랫폼의 기상청_단기예보 API에서 사용하는 좌표값으로 만약 사용자가 지역에 대한 날씨를 물어보는 경우 해당 지역을 x, y좌표로 변환하여 사용합니다. 예를 들어 "오늘 강남 날씨 알려줘"라고 물어보는 경우 강남의 x, y 좌표는 61, 126이므로 nx, ny을 각각 61,126으로 지정합니다. 만약 지역에 대한 언급이 없으면 기본값으로 각각 61, 126 값을 사용합니다.
만약 HyperCLOVA X가 기상청에서 제공하는 지역에 대한 X, Y 좌표값을 이미 학습해서 알고 있다면 운이 좋아 답변을 할 수도 있을 것 같습니다. 하지만 그럴 가능성을 배제하고 안전하게 기본값으로 강남 지역 X, Y 좌표값인 61, 126을 지정해 주었습니다.
사실 사용자의 위치를 알아내서 전달하면 가장 좋겠지만 이는 위치정보 보호법에 따라 사용자의 동의가 필요하므로 더 복잡한 로직이 동반되므로 프롬프트는 이 정도로 작업하고 제가 작성한 최종 프롬프트를 한번 확인해 보도록 하겠습니다.
✍🏻 최종 프롬프트 예시
날씨 예보를 조회하는 API입니다. 이 API를 호출하면 응답으로 오늘의 기온, 비가 오는지, 하늘이 맑은지에 대한 여부가 제공됩니다. /getVilageFcst을 사용하세요. /getVilageFcst은 오늘 날짜를 yyyymmdd 형식으로 변환되어 base_date 값으로 사용합니다. 단, 사용자가 00시 ~ 02시 사이에 날씨를 물어본다면 base_date를 어제 날짜로 사용합니다. base_time은 [2, 5, 8, 11, 14, 17, 20, 23] 이 값들 중에서 현재 시간과 가까운 값 중 작은 값을 사용해서 mmss 포멧으로 변환하여 사용합니다. 예를들어, 현재 시간이 18시 22분이라면 base_time 값은 1700이 됩니다. serviceKey값은 {API KEY}를 사용하세요. nx, ny값은 공공데이터 플랫폼의 기상청_단기예보 API에서 사용하는 좌표값으로 만약 사용자가 지역에 대한 날씨를 물어보는 경우 해당 지역을 x, y좌표로 변환하여 사용합니다. 예를들어 "오늘 강남 날씨 알려줘"라고 물어보는 경우 강남의 x, y 좌표는 61, 126이므로 nx, ny을 각각 61,126으로 지정합니다. 만약 지역에 대한 언급이 없으면 기본값으로 각각 61, 126 값을 사용합니다.
{API KEY} 부분에 공공데이터 플랫폼에서 발급받은 API KEY를 입력하시면 됩니다. 사실 시나리오의 호출 옵션으로 등록해도 되지만 간헐적으로 API KEY를 못 찾는 경우가 생겨서 저는 직접 프롬프트에 삽입하였습니다.
최종적으로 작성 완료된 프롬프트는 Manifest의 Description for model 부분에 넣어주시고 [저장하기] 버튼을 클릭하여 스킬 생성을 완료합니다.
☀️ 날씨 API 프롬프트 테스트
이제 프롬프트까지 완성했으므로 실제 테스트를 진행해 보도록 하겠습니다. 다음과 같이 [스킬 트레이너] 탭을 클릭하고 [시나리오 수집] 버튼을 클릭합니다.
시나리오에서는 스킬셋을 선택하시고 스킬 셋의 버전을 지정하면 됩니다. 스킬셋의 버전은 스킬을 수정할 때마다 버전이 올라가게 됩니다. 호출 옵션에는 위에서 언급했던 필수 파라미터들을 등록해 주시면 됩니다. 자세한 내용은 이전 포스팅에서 다뤄봤으므로 생략하도록 하겠습니다.
호출 옵션까지 등록하셨다면 유저쿼리에 “오늘 날씨 알려줘”라는 질문을 등록하고 [실행] 버튼을 클릭합니다.
Step 1 단계에서 유저 쿼리를 잘 분석해서 스킬 호출에 대한 플래닝을 잘 세워놓은 것을 확인했습니다. [다음] 버튼을 클릭하도록 하겠습니다.
Step 2 단계를 확인해 보니 날씨 정보를 찾을 수 없다고 답변합니다. 뭔가 프롬프트에 문제가 생긴 것 같아 보이네요. Step 2-2 단계로 되돌아가서 실제로 파라미터를 어떻게 보내고 있는지 확인해 보도록 하겠습니다.
확인해 보니까 base_time이 mmss 포맷이 아닌 이상한 형태의 값으로 들어가 있습니다. 이 부분을 알맞게 수정하여 다시 한번 호출해 보도록 하겠습니다. 현재 저의 시간으로 base_time을 계산해 보면 1100이 알맞겠네요.
base_time을 올바르게 변경해 주었더니 답변이 잘 나오는 것 같습니다. 답변이 제대로 나오는 것을 확인했으니 [다음] 버튼을 클릭하여 넘어가도록 하겠습니다.
이로써 최종 답변이 잘 나오는 것을 확인했으니 오른쪽 하단의 [작업 완료] 버튼을 클릭합니다. 작업이 완료된 시나리오들은 왼쪽 하단의 [불러오기] 버튼을 통해 확인하실 수 있습니다.
이제 시나리오들이 준비되었으므로 모델을 학습하여서 실제로 사용자들이 사용할 수 있게 만들어보도록 하겠습니다. 스킬 트레이너의 [작업] 탭으로 이동하셔서 오른쪽 상단의 [+ 학습 시작] 버튼을 클릭하시고 스킬셋을 선택한 다음 [학습] 버튼을 클릭하시면 사용할 수 있게 됩니다.
학습은 최대 6시간이 소요될 수 있다고 합니다. 저는 토큰 수가 많지 않았기 때문에 대략 30분 정도 소요되었습니다. 학습이 완료되면 다음과 같이 목록에 나타나게 됩니다.
[버전 관리] 버튼을 클릭하시면 학습이 완료된 스킬셋 버전을 확인하실 수 있습니다. 지금까지 작업한 시나리오가 반영된 모델이므로 [테스트 앱] 버튼을 통해 API를 만들어서 나만의 서비스에 적용해 보시면 원하시는 답변을 얻을 수 있게 될 겁니다.
🌠 정리하기
일상생활에 쓰일 수 있는 다양한 API들을 CLOVA Studio의 스킬 기능을 통해 모델에게 학습시켜 보는 과정을 진행해 보았는데요. 날씨 같은 복잡한 API도 추가적인 개발 없이 프롬프트로만 처리해 내는 게 가능할지 의문이었는데 완벽한 답변을 제공해 주는 모습을 보여서 저도 신기하네요. HyperCLOVA X의 기술력이 돋보이는 것 같습니다. CLOVA Studio의 스킬 트레이너 기능을 잘 활용하면 앞으로도 무궁무진한 서비스 앱들이 탄생할 수 있을 것 같아 앞으로도 기대가 많이 되는 것 같습니다. 😊
'AI > HyperCLOVAX' 카테고리의 다른 글
랭체인v0.3 하이퍼클로바x 연동하기 (5) 2024.10.13 HyperCLOVA X로 나만의 캐릭터 챗봇 만들기: LLM 활용부터 데이터셋 자동화까지 (21) 2024.07.17 CLOVA Studio 스킬 사용방법 (33) 2024.03.17 HyperCLOVA X를 활용한 공부앱 만들기 (37) 2024.03.03 포텐데이 X 클로바 스튜디오 해커톤 참여 후기 및 HyperCLOVA X 모델 적용 수상작 소개 (26) 2023.12.26