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 } }
});
이벤트는 type
과 payload
로 구성되며 다음과 같이 구분됩니다:
- comment: 챗 메시지가 추가될 때 이벤트가 발생합니다.
payload
는chatMessage
입니다. - clear: 챗 세션이 제거될 때 이벤트가 발생합니다.
payload
는sessionId
입니다. - reset: 현재 챗 세션이 재설정될 때 이벤트가 발생합니다.
payload
는null
입니다. - load: 챗 메시지가 로드될 때 이벤트가 발생합니다.
payload
는chatMessage
배열입니다.
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;
}
});