Skip to content

Commit

Permalink
feat: clova studio api 연결 완료
Browse files Browse the repository at this point in the history
  • Loading branch information
HeoJiye committed Nov 16, 2023
1 parent e52f9bd commit 4fbdac3
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 6 deletions.
61 changes: 61 additions & 0 deletions backend/src/events/clova.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import {
X_NCP_APIGW_API_KEY,
X_NCP_CLOVASTUDIO_API_KEY,
} from './apiGatewayKey';

const CLOVA_URL =
'https://clovastudio.stream.ntruss.com/testapp/v1/chat-completions/HCX-002';

const messageContent = `
사용자가 말한 고민에 대해 친근한 반말로 타로 카드를 해설하시오.
500토큰 이하로 답변하시오
###
고민: 내일 수능인데 시험을 잘 볼 수 있을 지 고민이야.
타로 카드: 0번 바보 카드
0번 바보카드'''가 나왔어. 이 카드는 주로 새로운 시작, 모험, 도전, 무책임한 낙천주의를 상징해. 그림에서 보듯이, 바보는 가벼운 마음과 순수함을 가지고 있어. 이 카드는 마치 새로운 여정을 떠날 때의 처음 순간을 나타내기도 해.\r
수능을 앞두고 '''0번 바보 카드'''가 나온다면, 너에게 새로운 기회와 도전이 찾아온다는 긍정적인 메시지를 전할 수 있어. 지금까지의 노력과 공부를 떠나, 새로운 시작으로 향하는 자세와 긍정적인 에너지를 가질 필요가 있겠지.
다만, 이 카드는 무책임한 행동에 대한 경고로도 받아들여질 수 있어. 과거의 실수를 되풀이하지 않도록 주의하면서, 새로운 도전에 긍정적으로 임해봐. 기대감과 도전정신을 가지고 있으면서도 현실적인 계획과 준비를 함께 갖추면 좋은 결과를 이끌어낼 수 있을 거야. 희망과 긍정을 가져봐, 행운을 빌어!
###
고민: 내가 남자친구랑 헤어지게 될까?
타로 카드: 1번 마법사 카드
1번 마법사카드'''가 나왔어. 마법사는 자신의 능력과 지식을 활용하여 세상을 변화시키는 인물이야. 이 카드에는 창조력, 독창성, 상상력 등의 키워드가 포함되어 있어. 따라서 만약 연애 상황에서 이 카드가 나왔다면, 두 사람 사이에 새로운 가능성과 발전이 있다는 신호일 수 있어.\r
하지만 마법사가 지팡이를 들고 있는 모습에서는 약간의 불안정성이 느껴질 수도 있어. 그러니까 서로의 감정을 솔직하게 표현하고, 상대방의 의견을 존중하는 게 좋을 것 같아. 또한, 둘 사이의 갈등이나 문제가 생겼을 때는 적극적으로 대처해서 해결하도록 노력해봐.\r
이별이라는 불안한 생각보다는 앞으로의 관계를 더 좋게 만들어갈 수 있다고 믿어봐. 물론 쉽지 않겠지만, 조금씩 노력하면 분명 좋은 결과가 있을 거야.
###`;

export async function createTarotReading(tarotName: string, message: string) {
const response = await fetch(CLOVA_URL, {
method: 'POST',
headers: {
'X-NCP-CLOVASTUDIO-API-KEY': X_NCP_CLOVASTUDIO_API_KEY,
'X-NCP-APIGW-API-KEY': X_NCP_APIGW_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
topK: 0,
includeAiFilters: true,
maxTokens: 600,
temperature: 0.28,
messages: [
{
role: 'system',
content: messageContent,
},
{
role: 'user',
content: `고민: ${message}\n타로 카드: ${tarotName}`,
},
],
stopBefore: ['###', '고민: ', '타로 카드:'],
repeatPenalty: 3.0,
topP: 0.8,
}),
});
const data = await response.json();
if (data.error) throw new Error(data.error.message);
return data.result.message.content;
}
14 changes: 8 additions & 6 deletions backend/src/events/events.gateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { createTarotReading } from './clova';

@WebSocketGateway({
cors: { origin: 'http://localhost:5173' },
Expand All @@ -22,12 +23,6 @@ export class EventsGateway

private readonly logger: Logger = new Logger('EventsGateway');

@SubscribeMessage('message')
handleEvent(@MessageBody() data: string): string {
this.logger.log(`Client Message : ${data}`);
return data;
}

afterInit(server: Server) {
this.logger.log('웹소켓 서버 초기화 ✅');
}
Expand All @@ -49,5 +44,12 @@ export class EventsGateway
setTimeout(() => {
sendMessage(welcomeMessage);
}, 1000);

client.on('message', async (message) => {
this.logger.log(`Client Message : ${message}`);
const result = await createTarotReading(message, '0번 바보 카드');
this.logger.log(`Tarot Reading : ${result}`);
client.emit('message', result);
});
}
}

0 comments on commit 4fbdac3

Please sign in to comment.