BYO 会話AI側 エンドポイント仕様書

Synapseは、感情や音声マークアップなどの処理だけでなく、お客様自身が準備した会話AIサービス(以下、BYO会話AIサービス)とデジタルヒューマンプラットフォームを接続する機能も備えています。

エンドユーザーがSynapseと連携したBYO会話AIサービスを利用するデジタルヒューマンと対話すると、Synapseはエンドユーザーの発話内容(音声認識して文字化された発話文)をBYO会話AIのエンドポイントにPOSTリクエストを送信し、応答を待ちます。BYO会話AIからの応答を受け取った後、Synapseは感情、アクション、および音声のマークアップを追加する後処理を行い、処理された応答をデジタルヒューマンによる表示のためにアニメーションエンジンへ送信します。

これにより、お客様はBYO会話AIサービスの運用に専念することが可能になります。

リクエスト仕様

Synapseは以下の仕様に従って、あなたのエンドポイントにリクエストを送信します。リクエストはすべてPOSTとして送信され、タイプはapplication/jsonで、以下の仕様に従ったペイロードが含まれます。

フィールド
タイプ
説明
sid
文字列
(SDKのみ) SDKを使用する際にトークンリクエスト中に設定される、会話セッションを識別するためのお客様が定義した値 (https://docs.uneeq.io/obtaining-an-access-token#BFiF_)。Hosted Experienceでは使用されません(SESSION-IDに設定されます)。
customData
オブジェクト
SDKを使用する場合はトークンリクエストに埋め込まれる (https://docs.uneeq.io/obtaining-an-access-token#BFiF_)、またはHosted Experienceを使用する場合はcustomDataフィールドで (カスタムデーター) 会話開始時に宣言するオブジェクトが含まれます。これにより、会話サービスで使用できる独自のキー:値ペアを渡すことができます(例:ユーザーやセッション識別子などの開始コンテキストを設定するため)。localeとlocationフィールドはSynapseで特別な意味を持ち、両方ともuserLocaleとuserLocationフィールドで返されます。
userInput
文字列
ユーザーがデジタルヒューマンに尋ねた質問。
conversationPayload
文字列
前回のレスポンスのconversationPayloadフィールドにあった値が含まれます(以下参照)。このフィールドは、会話中にセッション状態を維持するのに役立ちます(例:LLMを使用する際のコンテキストスタックや、サードパーティAPIを使用する際のセッション識別子など)。このフィールドにJSONオブジェクトが含まれている場合、文字列化されます。
type
文字列
'WELCOME'(playWelcome: trueでセッションを開始する場合)または'QUESTION'のいずれかが含まれます。会話セッションの最初のリクエストと、それ以降のリクエストを区別できます。
uneeqSessionId
文字列
デジタルヒューマンプラットフォーム側によって自動的に設定され、ユーザーのデジタルヒューマンとの会話セッションの一意の識別子です。この値は会話セッションごとに一意で不変であるため、アプリケーションで一意の識別子として使用できます。
userLocale
文字列
customDataのlocaleに設定された値。
userLocation
文字列
customDataのlocationに設定された値。

サンプル

{
  "sid": "SESSION-ID",
  "customData": {
    "locale": "en-US",
    "location": "38.9124, -77.0917",
    "myCustomField": "Value of myCustomField"
  },
  "userInput": "What is generative AI?",
  "conversationPayload": "",
  "type": "QUESTION",
  "uneeqSessionId": "18220511-b8bb-4164-9d43-dcf4e33e07b1",
  "userLocale": "en-US",
  "userLocation": "38.9124, -77.0917"
}

このJSONオブジェクトの各フィールドについて説明:

  1. sid: "SESSION-ID"という値が設定されています。これはHosted Experienceを使用していることを示しています。
  1. customData: カスタムデータを含むオブジェクトです。
      • locale: en-US(アメリカ英語)が設定されています。日本語の場合はja-JPです。
      • location: "38.9124, -77.0917"(緯度と経度)が設定されています。
      • myCustomField: カスタムフィールドの例で、"Value of myCustomField"という値が設定されています。
  1. userInput: ユーザーの質問で、"What is generative AI?"(生成AIとは何ですか?)という内容です。
  1. conversationPayload: 空の文字列になっています。これは会話の状態を保持するために使用できますが、この例では使用されていません。
  1. type: "QUESTION"となっており、これが通常の質問であることを示しています(最初の挨拶ではない)。
  1. uneeqSessionId: "18220511-b8bb-4164-9d43-dcf4e33e07b1"というユニークな識別子が設定されています。これは特定の会話セッションを識別するために使用されます。
  1. userLocale: "en-US"で、customDatalocaleフィールドと同じ値です。
  1. userLocation: "38.9124, -77.0917"で、customDatalocationフィールドと同じ値です。

このリクエストは、アメリカの英語を使用するユーザーが、生成AIについて質問していることを示しています。会話システムはこの情報を使用して、適切な応答を生成することができます。

レスポンス仕様

リクエストを受信して処理した後、アプリケーションは以下の形式でレスポンスを返す必要があります。

レスポンスタイプ

注意:アプリケーションは以下のタイプを返すことができますが、Synapseは常に「フレンドリーな」ユーザー向けメッセージを生成します。したがって、アプリケーション内でエラーを処理する際には、ユーザーエクスペリエンスを考慮する必要があります。エラーメッセージをエンドユーザーに直接表示するのではなく(Synapseがエラーメッセージではなく、デジタルヒューマンが応答するようにすることに注意してください)、アプリケーションを堅牢にして、情報提供のための対話レスポンスを送信することを検討してください。

コード
ステータス
レスポンス
200
OK
{ "answer": ANSWER, "instructions": {}, conversationPayload: "" }
400
Bad Request
{ "error": DESCRIPTION }
403
Forbidden
{ "error": DESCRIPTION }
500
Server Error
{ "error": DESCRIPTION }

ボディ

フィールド
タイプ
説明
answer
文字列
デジタルヒューマンに話させたい対話内容 - Synapseがマークアップを処理しますが、オプションで https://docs.uneeq.io/inline-tagging に従って独自のマークアップを主張することもできます。
instructions
オブジェクト
https://docs.uneeq.io/supported-commands に従って、customDataまたはdisplayHtmlのいずれかを指定します。
conversationPayload
文字列
オプション(空の文字列でなければなりません) - このフィールドに送信したものは、新しいリクエストのリクエストconversationPayloadフィールドでアプリケーションに送り返されます。これにより、セッションIDや会話コンテキストなどの状態情報を保存するためにconversationPayloadを使用できます。JSONを送信する場合は、文字列化する必要があります。

サンプル

{
  "answer": "Hello! I'm a digital human. How can I help you?",
  "instructions": {
    "displayHtml": {
      "html": "an html string"
    }
  },
  "conversationPayload": ""
}

このJSONオブジェクトは、BYO会話エンドポイントからのレスポンスの例を示しています。各フィールドについて説明します:

  1. answer: 値: "Hello! I'm a digital human. How can I help you?"(日本語訳: "こんにちは!私はデジタルヒューマンです。どのようにお手伝いできますか?")
    1. これはデジタルヒューマンが話す実際のテキストです。

  1. instructions: このオブジェクトには、デジタルヒューマンの動作や表示に関する追加の指示が含まれます。
    1. displayHtml: このサブオブジェクトは、ユーザーインターフェースに表示するHTMLを指定します。

      • html: "an html string"(HTMLの文字列) 実際の使用では、ここに有効なHTML文字列が入ります。これにより、テキスト、画像、リンクなどの追加情報をユーザーに表示できます。
  1. conversationPayload: 値: "" (空の文字列)
    1. この例では使用されていませんが、必要に応じてここに会話の状態や文脈に関する情報を含めることができます。

このレスポンスは、デジタルヒューマンが初期の挨拶を行い、同時にユーザーインターフェースに何らかのHTML内容を表示することを示しています。conversationPayloadは空のままで、この時点では会話の状態情報は保持されていません。

お役に立ちましたか?
😞
😐
🤩

最終更新日 August 30, 2024