Programming/AI

[Naver CLOVA] clova studio 환경 실행, 테스트 앱 생성하기

아이바 2024. 8. 1. 14:04

공식 사이트 개요 

 

https://api.ncloud-docs.com/docs/ai-naver-clovastudio-summary

 

CLOVA Studio 개요

 

api.ncloud-docs.com

 

1. 개념 

 

naver clova studio 자료조사


  1. NAVER CLOVA – X
  • 1. 1 NAVER CLOVA - X의 개발 도구의 구성
 
네이버의 AI 서비스에는 다양한 서비스들이 있는데 이 중 AI 컨텐츠에 대한 개발을 하기 위해선 비즈니스에 최적화 되어 있는 CLOVA Studio 를 통한 구성을 해야함.
 
CLOVA studio 의 예제는 사투리변환, 챗봇, 이메일 작성, 마케팅 문구생성 등등
 
1.2 NAVER CLOVA – X STUDIO 의 운영
 
CLOVA Studio는 기업 고객 대상으로 Closed Bata 운영중이며, 심사 결과가 평균 1주 이내에 이메일을 통해 안내됨.
 

  • 1.3 튜닝 가능한 AI
 
기업의 데이터 셋을 HyperClOVA와 결합하여 특화 AI 언어 모델 구축 후 AI 서비스 개발 가능
 

  • 1.4 토큰 가격
 
플레이 그라운드 - AI studio (프롬프트, 서비스앱, 테스트앱)
구분
엔진/도구
기준
요금
기본
LK-B
토큰
0.0025
기본
LK-C
토큰
0.015
기본
LK-D
토큰
0.04
기본
LK-D2
토큰
0.04
기본
LE-C
토큰
0.015
기본
HCX-002
토큰
0.02 → 0.005
기본
HCX-003
토큰
0.005
튜닝
LK-B
토큰
0.0075
튜닝
LK-C
토큰
0.045
튜닝
LK-D
토큰
0.12
튜닝
LK-D2
토큰
0.12
튜닝
HCX-002
토큰
0.06 → 0.03
튜닝
HCX-003
토큰
0.03
스킬셋
HCX-002
토큰
0.02 → 0.005
스킬셋
HCX-003
토큰
0.005
스킬셋
HCX-002 학습모델
토큰
0.06 → 0.03
스킬셋
HCX-003 학습모델
토큰
0.03
익스플로러
요약
토큰
0.0225
익스플로러
임베딩
토큰
0.0001
익스플로러
문단 나누기
토큰
0.0004
튜닝 학습 시 선택한 엔진에 따라 이용 요금이 부과됩니다.
 
학습 시 가격
구분
엔진/도구
기준
이용 요금
튜닝
LK-B
토큰
0.02
튜닝
LK-C
토큰
0.03
튜닝
LK-D
토큰
0.04
튜닝
LK-D2
토큰
0.04
튜닝
HCX-002
토큰
0.03 → 0.015
튜닝
HCX-003
토큰
0.015
스킬셋
HCX-002
토큰
0.03 → 0.015
스킬셋
HCX-003
토큰
0.015
 
CLOVA Studio 제공하는 기능
 

  • 문장 생성: 몇 가지 키워드만 입력하면 해당 키워드를 기반으로 시나리오 창작, 자기소개서 작성, 이메일 생성, 마케팅 문구 창작 등 다양한 분야의 문장 생성
  • 요약: 줄거리, 보고서, 이메일과 같이 긴 글에서 주요 요소를 파악하여 설정한 요약문 길이에 따라 글 요약
  • 분류: 문장의 유형, 문서 색인, 감정, 의도와 같은 특징을 분류하거나 문단에서 주요 키워드 추출 가능
 

  • 대화: 예제 입력을 통해 고유의 페르소나를 가진 AI를 생성하여 지식백과형 챗봇, 커스텀 챗봇 등 대화 인터페이스 제작 가능
  • 문장 변환: 입력한 예제와 유사한 스타일의 문장으로 문장 형태 변환 가능
  • AI Filter: 민감하거나 안전하지 않은 결과물이 생성되는 것을 감지하여 알리는 AI Filter 기능 제공
  1. 토큰 세는 방법
  • 토큰은 자연어 처리를 위해 하나의 단어를 세분화한 단어 조각을 의미합니다. 대개 한국어 단어는 형태소 단위의 1~2 토큰으로 나뉩니다. HyperCLOVA 언어 모델이 학습한 내용에 맞춰 토큰을 나누기 때문에 동일한 표현이 항상 같은 토큰으로 이루어져 있지는 않습니다

 

- 테스트 앱 생성 

 

1.  플레이 그라운드 접속 

-> 시스템 탭에서 원하는 응답을 받기위한 다양한 조건을 걸어줄 수 있다. 

 

 

2.  테스트 앱 생성 

-> 테스트 앱을 생성하면 다양한 헤더값 및 응답 형식에 대해 파악 가능 

 

 

3. 

 

- 소스코드 예제 작성 

 

개발환경 spring boot 

 

-> spring boot 로 api 호출

@RestController
public class ApiController {


    @GetMapping("/index")
    public String index() {
        return "index";
    }

    @PostMapping("/chat")
    public String chat(@RequestBody String message) {
        // Clova Studio API 호출을 위한 헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.set("X-NCP-CLOVASTUDIO-API-KEY", "값 입력");//테스트 앱이나 서비스 앱 생성 시 발급 받은 API KEY
        headers.set("X-NCP-APIGW-API-KEY", "값 입력");// 테스트 앱이나 서비스 앱 생성 시 발급 받은 API Gateway KEY
        headers.setContentType(MediaType.APPLICATION_JSON);

        // API 호출을 위한 요청 본문 설정
        Map<String, Object> requestBody = new HashMap<>();
        List<Map<String, Object>> messages = new ArrayList<>();
        Map<String, Object> messageMap = new HashMap<>();
        messageMap.put("role", "user");
        messageMap.put("content", message);
        messages.add(messageMap);
        requestBody.put("messages", messages);
//        requestBody.put("messages", List.of(new HashMap<String, Object>() {{
//            put("role", "user");
//            put("content", message);
//        }}));

        /// role
        //        system: 역할을 규정하는 지시문
        //        user: 사용자의 발화/질문
        //        assistant: 사용자의 발화/질문에 대한 답변

        // content
        // 대화 메시지 내용

        requestBody.put("topP", 0.8); // 생성 토큰 후보군을 누적 확률을 기반으로 샘플링 0 < topP ≤ 1 (기본값: 0.8)
        requestBody.put("topK", 0); //생성 토큰 후보군에서 확률이 높은 k개를 후보로 지정하여 샘플링 0<=topK<=128
        requestBody.put("maxTokens", 500); // 최대 글자 수
        requestBody.put("temperature", 0.5); //생성 토큰에 대한 다양성 정도(설정값이 높을수록 다양한 문장 생성) 0.00 < temperature ≤ 1 (기본값: 0.50)
        requestBody.put("repeatPenalty", 5.0); // 같은 토큰을 생성하는 것에 대한 패널티 정도
        requestBody.put("stopBefore", new ArrayList<>()); // 토큰 생성 중단 문자[](기본값)
        requestBody.put("includeAiFilters", true); // 생성된 결괏값에 대해 욕설, 비하/차별/혐오, 성희롱 /음란 등 카테고리별로 해당하는 정도 false(기본값) true
        requestBody.put("seed", 0); //모델 반복 실행 시 결괏값의 일관성 수준 조정 0: 일관성 수준 랜덤 적용 (기본값) 1 ≤ seed ≤ 4294967295: 일관되게 생성하고자 하는 결괏값의 seed 값 또는 사용자가 지정하고자 하는 seed 값

        // API 호출
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<Map> response = restTemplate.postForEntity("https://clovastudio.stream.ntruss.com/testapp/v1/chat-completions/HCX-DASH-001", requestEntity, Map.class);
        Map<String, Object> responseBody = response.getBody();
        Map<String, Object> responseResult = (Map<String, Object>) responseBody.get("result");
        Map<String, Object> responseMessage = (Map<String, Object>) responseResult.get("message");
        // 응답 결과 반환
        return (String) responseMessage.get("content");
    }
}

 

 

 

소스코드 샘플 작성
postman으로 naver clova api 호출

 

728x90