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チャットの応答を生成することができます。プロンプトを設定して応答を生成することができます。第1引数は プロンプトの内容 であり、第2引数は 構成 です。構成はオプションであり、次のオプションを提供します:

  • 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チャットサービスからチャットメッセージをロードすることができます。第1引数はpromptメソッドで取得したセッションIDです。

応答としてチャットメッセージの配列を返します。各チャットメッセージには rolecontenttsが含まれています。

roleは現在3つの役割に分かれています:

  • system: システムの指示内容

  • assistant: AIの応答内容

  • user: ユーザーの入力内容

clear (AIチャットクリア)

サーバーに保存されている特定のセッションのチャットメッセージを消去するためにこのメソッドを使用することができます。第1引数は 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は、複数のチャットイベントをリッスンするためのメソッドです。イベントが発生した時に実行されるイベントリスナーを第1引数に渡します。

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