Skip to content

Clova Studio로 단어 간의 연관성 파악하기

JIN edited this page Mar 14, 2025 · 1 revision
⚙️ Web BE
김진
2025.02.04. 작성

📖 Clova Studio

✅ 제시어와 인식된 테스트의 연관 여부 확인

기존 프로젝트에서 Clova Studio를 활용해 제시어를 생성하고 있다. 동일한 기능을 사용해 제시어와 인식된 테스트의 연관 여부를 확인해보자.

NCloud Clova Studio 또한 웹 사이트에서 간단하게 확인해볼 수 있다. 다음과 같이 초기 세팅을 하고 질문을 해보았다.

<시스템>
당신은 창의적인 드로잉 게임의 관리자입니다.
OCR API를 통해 만들어진 글자를 확인하고, 제시어를 연상할 수 있는지 여부를 판단해주세요.

답변은 부연 설명 없이 true 또는 false로만 응답해주세요.

<사용자>
다음 단어가 제시어 '○○'와 연관이 되어있는지 답변해주세요.
[□□]

image

인식에 실패한 당근(당농)깡총깡총(깡촌깡총) 의 결과에 주목해보자.

  • 당농 인식에 실패해 전혀 다른 글자가 되어 토끼와의 연관성을 찾지 못해 false 반환

    • 당근 으로 제대로 인식되었다면 true를 반환한다.

      image

  • 깡촌깡총 인식에 실패해 텍스트가 약간 다르지만, 깡총 글자의 존재로 인해 토끼와의 연관성이 있어 true 반환

    • 깡총 없이 깡촌 만 입력하면 false를 반환한다.

      image

일단은! OCR 인식 문제로 인해 false를 반환하는 경우를 제외하면 Clova Studio는 원하는 대로 잘 동작하는 것을 확인할 수 있다.

📖 Clova Studio로 단어 간의 연관성 파악하기

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import axios, { AxiosInstance } from 'axios';

@Injectable()
export class ClovaClient {
  private readonly client: AxiosInstance;

  constructor(private configService: ConfigService) {
    const apiKey = this.configService.get<string>('CLOVA_STUDIO_API_KEY');
    const requestId = this.configService.get<string>('CLOVA_STUDIO_REQUEST_ID');

    this.client = axios.create({
      baseURL: 'https://clovastudio.stream.ntruss.com/testapp/v1/chat-completions/HCX-003',
      headers: {
        Authorization: `Bearer ${apiKey}`,
        'X-NCP-CLOVASTUDIO-REQUEST-ID': requestId,
        'Content-Type': 'application/json; charset=utf-8',
        Accept: 'text/event-stream',
      },
    });
  }
  async isRelatedWord(suggestedWord: string, inferText: string) {
    const request = {
      messages: [
        {
          role: 'system',
          content: `
          당신은 창의적인 드로잉 게임의 관리자입니다.
          OCR API를 통해 만들어진 글자를 확인하고, 제시어를 연상할 수 있는지 여부를 판단해주세요.
          답변은 부연 설명 없이 true 또는 false로만 응답해주세요.
          `,
        },
        {
          role: 'user',
          content: `
          다음 단어가 제시어 '${suggestedWord}'와 연관이 되어있는지 답변해주세요.
          [${inferText}]
          `,
        },
      ],
      topP: 0.8,
      topK: 0,
      maxTokens: 256,
      temperature: 0.8,
      repeatPenalty: 5.0,
      stopBefore: [],
      includeAiFilters: true,
      seed: 0,
    };

    try {
      const response = await this.client.post('', request);
      return response.data.result.message.content.trim() === 'true';
    } catch (error) {
      throw new Error(`CLOVA API request failed: ${error.message}`);
    }
  }
}

🔗 참고 사이트

Clone this wiki locally