ai.chat (AI 챗)

ai.chat는 AI 챗 서비스와 상호 작용하기 위한 여러 메서드와 속성을 제공하는 객체입니다.

1. 메서드

prompt (AI 챗 프롬프트)

import { eliceContents } from 'src/constants';

eliceContents.ai.chat.prompt('초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', { systemInstruction: '...' })
// { session: '550e8400-e29b-41d4-a716-446655440000', contentResponse: '초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...'  }

이 메서드를 사용하여 AI 채팅 응답을 생성할 수 있습니다. 프롬프트를 설정하여 응답을 생성할 수 있습니다. 첫 번째 인자는 프롬프트 내용이고, 두 번째 인자는 구성입니다. 구성은 선택 사항이며 다음과 같은 옵션을 제공합니다:

  • systemInstruction: 시스템 지시사항을 설정할 수 있으며, 이 인자를 전달하면 시스템 지시사항을 항상 재정의합니다.

⚠️ 응답의 경우 세션 ID와 AI 콘텐츠 응답을 반환합니다. 사용자가 페이지를 새로 고침해도 채팅 메시지를 다시 로드하려면 이 세션 ID를 KV 스토어 또는 로컬 스토리지에 저장해야 합니다.

load (AI 챗 로드)

import { eliceContents } from 'src/constants';

const initChat = async () => {
    const sessions = await eliceContents.getKeyValue({ key: 'sessions' });
    const firstSession = sessions[0];

    if(firstSession) {
        eliceContents.ai.chat.load(firstSession); // [{ role: 'system', content: '초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', ts: 1634025600000 }, ...]
    }
}

이 메서드를 사용하여 AI 채팅 서비스에서 채팅 메시지를 로드할 수 있습니다. 첫 번째 인자는 prompt 메서드에서 얻은 세션 ID입니다.

응답으로 챗 메시지 배열을 반환합니다. 각 챗 메시지에는 role, content, ts가 포함됩니다.

role은 현재 3가지로 구분됩니다:

  • system: 시스템 지침 내용

  • assistant: AI 응답 내용

  • user: 사용자 입력 내용

clear (AI 챗 지우기)

서버에 저장된 특정 세션의 챗 메시지를 지우려면 이 메서드를 사용할 수 있습니다. 첫 번째 인자는 prompt 메서드에서 얻은 세션 ID입니다.

import { eliceContents } from 'src/constants';

const clearChat = async () => {
    await eliceContents.ai.chat.clear('550e8400-e29b-41d4-a716-446655440000');
};

reset (AI 챗 리셋)

이 메서드는 현재 세션의 챗 메시지를 재설정하는데 사용됩니다. 현재 sessionId와 메시지의 로컬 데이터를 초기화합니다.

import { eliceContents } from 'src/constants';

const startNewChat = () => {
    eliceContents.ai.chat.reset();
    eliceContents.ai.chat.prompt('초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', { systemInstruction: '...' });
}

subscribes (AI 챗 구독)

subscribe는 여러 챗 이벤트를 청취할 수 있게 하는 메서드입니다. 이벤트가 발생할 때 실행될 이벤트 리스너를 첫 번째 인자로 전달합니다.

import { eliceContents } from 'src/constants';

eliceContents.ai.chat.subscribe((event) => {
    console.log(event); // { type: 'comment', payload: { role: 'assistant', content: '초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', ts: 1634025600000 } }
});

이벤트는 typepayload로 구성되며 다음과 같이 구분됩니다:

  • comment: 챗 메시지가 추가될 때 이벤트가 발생합니다. payloadchatMessage입니다.

  • clear: 챗 세션이 제거될 때 이벤트가 발생합니다. payloadsessionId입니다.

  • reset: 현재 챗 세션이 재설정될 때 이벤트가 발생합니다. payloadnull입니다.

  • load: 챗 메시지가 로드될 때 이벤트가 발생합니다. payloadchatMessage 배열입니다.

import { eliceContents } from 'src/constants';

const { unsubscribe } = eliceContents.ai.chat.subscribe(/* 이벤트 리스너 */);

unsubscribe(); // 이벤트 리스너 구독 취소

이 메서드는 unsubscribe 메서드를 포함하는 객체를 반환합니다. 이 메서드를 사용하여 이벤트 리스너 구독을 취소할 수 있습니다.

2. 속성

sessionId (세션 ID)

이 속성은 AI 채팅의 고유 식별자입니다. 초기에는 null입니다. prompt 또는 load 메서드를 호출하여 채팅 메시지를 불러오면 세션 ID가 생성됩니다.

import { eliceContents } from 'src/constants';

eliceContents.subscribe((event) => {
    switch(event.type) {
        case 'prompt':
            console.log(eliceContents.ai.chat.sessionId); // '550e8400-e29b-41d4-a716-446655440000'
            break;

        case 'reset':
            console.log(eliceContents.ai.chat.sessionId); // null
            break;
    }
});

chatMessages (챗 메시지)

이 속성은 채팅 메시지 배열입니다. 현재 세션의 채팅 메시지를 포함하고 있습니다. 초기에는 빈 배열입니다. load 또는 prompt 메서드를 호출하면 채팅 메시지로 채워집니다. reset 메서드를 호출하면 비워집니다.

import { eliceContents } from 'src/constants';

eliceContents.subscribe((event) => {
    switch(event.type) {
        case 'load':
            console.log(eliceContents.ai.chat.chatMessages); // [{ role: 'system', content: '초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', ts: 1634025600000 }, ...]
            break;
        case 'comment':
            console.log(eliceContents.ai.chat.chatMessages); // [{ role: 'system', content: '초등학생이 쉽게 풀 수 있는 문제를 만들겠습니다...', ts: 1634025600000 }, ...]
            break;
        case 'clear':
            console.log(eliceContents.ai.chat.chatMessages); // []
            break;
        case 'reset':
            console.log(eliceContents.ai.chat.chatMessages); // []
            break;
    }
});

Last updated