IT/NAVER Cloud Platform

[CLOVA Studio - 2] 스킬 트레이너 활용하기

Primes 2024. 4. 14. 17:44
728x90

프로젝트를 진행하며 활용 중인 스킬 트레이너에 대해 작성한다.

사실 이 기능은 네이버 쪽 가이드만 봐서는 긴가만가한 부분이 많다.

 

그래도 먼저 사용 가이드를 쭉 보는 것을 추천한다. 

 

스킬 트레이너 화면 (ncloud-docs.com)

 

스킬 트레이너 화면

 

guide.ncloud-docs.com

 

스킬 트레이너는 단적으로 말하면, 외부 API 를 가져와 LLM 에게 학습시켜 해당 데이터를 활용해 답변할 수 있도록 하는 것이다.

 

즉, 데이터를 제공할 수 있는 API 를 사용해야만 한다. AI 특화 학습을 할 때 흔히들 알고 있는 파인튜닝(Fine-tuning)과는 조금 다른 개념이다. 파인 튜닝은 CLOVA Studio 에서는 [튜닝] 기능으로 활용하면 된다.

 

튜닝의 경우에는 다량의 학습 데이터셋을 직접 주입시키는 것이고, 스킬 트레이너는 데이터셋을 API 에 맞춰 특화시킨 뒤 추가로 조정할 수 있도록 한다. 어느 게 더 도입에 적합할 지는 서비스의 구성에 따라 고민해보는 것이 좋을 것이다.

 

튜닝 : 단순 대화 데이터를 다량으로 가지고 있고, 이후에도 지속 가능한 수준으로 데이터를 공급할 수 있을 경우

스킬 트레이너 : DB 구조화된 데이터를 학습시키기에 적합

 

개인적으로 나는 위와 같이 요구사항을 고려할 수 있다고 생각한다.

 

본격적으로 스킬 트레이너를 활용해보자.

 


리소스 생성

CLOVA Studio 의 스킬 트레이너 콘솔에 접속하여, 스킬셋 부터 생성한다.

여기서, 스킬셋 이름은 모든 유저와 공유한다. ID 와 같은 고유한 값으로 적어야 한다.

답변 형식을 어떻게 정의하느냐에 따라, 모델이 내놓는 답변이 달라진다. 이 부분은 나중에도 조정할 수 있다.

 

스킬셋을 생성하였으면, 해당 스킬셋으로 들어가 다음으로 스킬을 생성한다.

스킬셋은 여러 개의 스킬을 가질 수 있다. 활용하는 방법으로는 예를 들어 아래와 같다.

비행기 목록 스킬셋 - 국내선 스킬, 국외선 스킬

스킬 생성 버튼을 눌러 들어오면, 위와 같이 작성하는 페이지가 나온다.

여기서도 답변 형식을 작성할 수 있다.

 

스킬 트레이너에서 가장 중요한 부분이다.

불러올 API Spec 을 작성하고, 모델에게 API 를 어떻게 사용하는지 가르쳐주는 부분이다.

 

API Spec은 openapi 3.0 을 따른다. 이 부분은 ChatGPT나 네이버의 CLOVA X 에게 물어보면 꽤나 잘 작성해준다.

여기서 나는 개인적으로 활용 중인 서버 내의 일부 파일 내용을 가져오는 API 를 작성했다.

 

여기서 내가 만드려는 모델은 해당 파일을 활용하는 답변 봇이다.

 

{
  "info": {
    "title": "파일 검색 API",
    "version": "1.0.0"
  },
  "paths": {
    "/": {
      "get": {
        "summary": "파일 내 제목과 내용을 검색하는 API",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string",
                            "description": "제목"
                          },
                          "content": {
                            "type": "string",
                            "description": "내용"
                          }
                        }
                      }
                    },
                    "category": {
                      "type": "string",
                      "description": "검색 카테고리"
                    }
                  }
                }
              }
            },
            "description": "성공"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "description": "에러 코드"
                          },
                          "message": {
                            "type": "string",
                            "description": "에러 메시지"
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "description": "카테고리를 찾지 못했습니다"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "category",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "검색 카테고리"
          }
        ],
        "operationId": "searchByCategory"
      }
    }
  },
  "openapi": "3.0.0",
  "servers": [
    {
      "url": ""
    }
  ]
}

 

서버 url 은 개인적으로 사용 중이므로 삭제했다. 서버 내의 파일을 가져오는 코드를 따로 작성해두었고, 이 API 는 해당 코드의 JSON 리턴값을 가져와 카테고리에 따라 검색한 뒤 제목과 내용을 최종적으로 모델이 가져오도록 하였다.

 

참고로, API Spec을 자세히 작성하는 것이 중요하다. 이후 직접 테스트를 진행해보면 알 수 있는 부분이지만 description 부분도 모델이 읽어가며 이해하고 활용한다. description 꼭 작성해보길 바란다. 하고 안하고 차이가 상당하다.

 

추가로 작성해야될 중요한 부분은 Description for model 이다.

이 부분은 모델에게 이 API 의 역할이 무엇이고, 어떻게 활용하면 되는지를 알려주는 항목이다.

 

대략 이렇게 작성하면 된다.

Description for model

category 를 검색하여 제목과 내용을 리턴하는 API 입니다.
category 는 검색할 카테고리입니다.
title 은 항목의 제목 입니다.
content 는 내용입니다.

최종 답변은 content 내용을 활용하여 답변합니다.

 

모델에게는 직관적으로 가르쳐주는 것이 좋다. 모호한 말은 되도록 넣지 않도록 한다. (최고, 핵심, 중요 등)

애매한 말을 넣어봐야 무시하고 답변하는 케이스가 많기 때문에, 어떻게 해라! 라고 딱 정해줘야 한다.

 

이렇게 스킬셋 작성해주고 나면 시나리오 수집을 할 수 있다.

 

[작성중]

반응형