会話インサイトの実装
会話データをXDM エクスペリエンスイベントとして生成し、これらの会話エクスペリエンスイベントがデータセットとしてAdobe Experience Platformに格納されるようにするには、エージェントアプリケーションまたはサービスにConversation Insightsを使用するようにインストルメントします。
この記事では、必要な実装ステップについて説明します。
- データを収集するには、Experience Platform環境(組織とサンドボックス)が使用可能である必要があります。
- エージェント型フィールドグループと会話フィールドグループに対して、Adobe組織を有効にする必要があります。
スキーマとデータセット
主な会話イベントのデータセット(プロンプト、応答、フィードバック)を設定します。 プロンプト、応答、フィードバックのデータセットは、会話イベント フィールドグループ を使用してXDM エクスペリエンスイベントの基本スキーマを拡張する必要があり、オプションで エージェント情報フィールドグループ とその他の追加フィールドグループ を含めることができます。
プロンプト、レスポンス、フィードバックに対して個別のデータセットを定義したり、データセットにデータを組み合わせたりできます。 例えば、プロンプトや回答にデータセットを、フィードバックにデータセットを使用できます。 または、仕組みに示すように、会話イベントのタイプごとに個別のデータセットを使用します。
説明するには、次を使用します。
-
個別データセット実装。 プロンプト、レスポンス、フィードバックのイベント用にデータセットを分離します。 次の場合は、この実装アプローチに従ってください。
- クライアント実装の状態を維持することが少ない。
- 応答の遅延や非存在に関わらず、プロンプトデータを送信します。
-
データセットの実装を組み合わせて。 たとえば、プロンプトと応答のイベントデータセットを組み合わせたもの、フィードバックイベントデータセットを個別に作成するというものです。 次の場合は、この実装アプローチに従ってください。
- 実装で完全なターンをサポートするため、コールを減らしたい場合。
- 応答が届くのを待つ際に、待ち時間は気にしないでください。
データセットのレイアウトと、これらのデータセットへの会話イベントの配信は、別々の懸念事項です。 データが利用可能になればすぐに各会話イベントを送信し、安定した会話識別子とターン識別子を確保します。 安定したIDは、データセット間でConversation Blender サービス による適切な相関関係を促進します。
会話イベントフィールドグループ
会話イベント フィールドグループは必須フィールドグループであり、conversation オブジェクトを使用します。
会話オブジェクトは、次のデータをキャプチャします。
会話
一意のconversationIDが会話を識別します。 例:conversationID = "conv-001"。 conversationIDを使用すると、関連するすべてのturns イベントを同じ会話型エクスペリエンスにグループ化できます。
スキーマはconversationNameもサポートしています。 会話の全体的なコンテキストを説明する、人間が読み取れる名前(例:France Geography Q&A)。 会話名は自動生成されますが、生成された名前を更新できます。 会話名もsignals[].nameに入力されます。 Adobeは、signals[].name = "title"信号と同じ値をconversationNameに入力します。 入力した任意のデータセットにconversation.conversationNameを設定し、Adobeが提供する値を上書きできます。
ターン
ターンとは、会話内のひとつのインタラクションサイクルのことです。
turnID一意のturnIDはターンを識別します。 次に例を示します。
conversationID = "conv-001"turnID = "turn-001"
同じconversationIDとturnIDを使用して、そのターンに関連付けられたプロンプト、応答、フィードバックを関連付けます。 この相関関係は、別々に配信されるか、異なるデータセットに格納されるレコードをまたいで機能します。 turnIdは、同じ会話内で一意である必要があるだけで、会話間で再利用できます。 例えば、conversationID conv-001とconv-002の会話では、turn-001をturnIDとして使用できます。
プロンプト
プロンプトは、エージェントに送信された入力です。 ほとんどの顧客シナリオでは、この入力はユーザーの質問、リクエスト、命令、またはメッセージです。
プロンプトは次の表現を使用します:conversation.prompt
重要なプロンプトフィールドは次のとおりです。
prompt.sourceprompt.raw[]prompt.raw[].textprompt.raw[].purpose1つのプロンプトに複数の生セグメントを含めることができます。 例えば、ユーザーがテキストを入力し、URLを含めるとします。
-
Prompt"What is the capital of France""https://example.com/france"
応答
応答とは、エージェントまたは他の応答者から返されるコンテンツです。
conversation.response一意のresponseIDは応答を表します。
重要な応答フィールドは次のとおりです。
response.sourceresponse.raw[]response.raw[].textresponse.raw[].purpose文書化されたソースタイプには、次のものが含まれます。
botcannedconciergeend-userフィードバック
フィードバックとは、インタラクションに対するユーザーの明示的な評価または反応を指します。
フィードバック構造に含まれるもの:conversation.feedback。
例:
feedback.raw[].text: "Great help"feedback.rating.score:1feedback.rating.classification:"Thumbs Up"feedback.rating.reasons[]: ["Accurate", "Quick response"]
文書化された評価スコアの範囲は-1.0から1.0です。
フィードバックイベントは、eventType = "conversation.feedback"を使用してフィードバック専用イベントとして表すことができます。
フィードバックが特定のターンに適用される場合は、会話ブレンダーがフィードバックを関連するインタラクションに関連付けられるように、適切なconversationIDとturnIDを保持します。
シグナル
シグナルとは、会話コンテンツに関する体系化された分析観察のことです。 信号抽出サービス は、標準装備の信号を提供します。 シグナルを提供するためにアクションは必要ありませんが、統合の一部としてシグナルを追加できます。
信号には次のフィールドがあります。
scopenametypevalues[]stringValuenumberValuebooleanValueconfidencequalifiers[]metadata[]信号抽出サービスは、信号データセットのsignals オブジェクトにデータを入力します。
以前のsignals[].attributes.{subjects,intents,tones,sentiment} コンテナは非推奨です。
ソースタイプ
イベント内の各prompt、responseまたはfeedback オブジェクトにsourceの値を設定する必要があります。 どんな値でも構いません。 データの出所を把握するのに役立つ値を使用します。 次に例を示します。
end-useragentbotcanned-promptconcierge目的の種類(生テキスト)
purpose属性の値は、prompt、response、またはfeedback オブジェクト内のraw オブジェクトの任意の要素に設定する必要があります。 任意の文字列値を使用できます。 このフィールドは、生のテキストに保存されている内容を区別するために使用されます。 有用な値は次のとおりです。他の値も同様に有効です。
free-form-textscreenshotattachmentlinkurlimage-linkcitationmedia会話
会話オブジェクトの詳細については、以下を参照してください。
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 36-row-4 37-row-4 38-row-4 39-row-4 40-row-4 | |||
|---|---|---|---|
| フィールドパス(ドット表記法) | タイプ | 値の例 | メモ |
conversationID |
string | "conv-001" |
複数のターンを一緒にグループ化します。 |
conversationName |
string | "France Geography Q&A" |
新規。 全体のコンテキストを表す会話に付けられた名前。 |
turnID |
string | "turn-001" |
このターンの一意のID。 |
prompt.source |
string | "end-user" |
プロンプトのSource、その他のオプションには、キャッシュ値、定型値などが含まれます。 |
prompt.raw[] |
配列 | 以下のRaw オブジェクトを参照してください | 生のプロンプトデータ: |
prompt.raw[].text |
string | "What is the capital of France?" |
実際のテキストコンテンツ: |
prompt.raw[].purpose |
string | "User Input" |
このテキストセグメントの目的。 |
response.source |
string | "bot" |
応答のSource。 |
response.raw[] |
配列 | 以下のRaw オブジェクトを参照してください | 生の応答データ: |
response.raw[].text |
string | "The capital of France is Paris." |
応答テキストコンテンツ: |
response.raw[].purpose |
string | "main" |
レスポンスセグメントの目的。その他のオプションには、リンク、写真などが含まれます。 |
feedback.source |
string | "end-user" |
Source of feedback。 |
feedback.raw[] |
配列 | 以下のRaw オブジェクトを参照してください | 生のフィードバックデータ : |
feedback.raw[].text |
string | "Great help" |
フィードバックテキスト: |
feedback.raw[].purpose |
string | "free-form text" |
フィードバックセグメントの目的。スクリーンショットやメディアなど、他のオプションも考えられます |
feedback.rating.score |
number | 1 |
-1.0から1.0までの数値の評価スコア。 |
feedback.rating.classification |
string | "Thumbs Up" |
レーティング分類: |
feedback.rating.reasons[] |
配列 | ["Accurate", "Quick response"] |
評価理由の配列。 |
signals[] |
配列 | 以下の信号オブジェクトを参照してください | このイベントとこれまでの会話にもとづいて導き出されたシグナルです。 各エントリは、独自のスコープを持つ単一の名前付き信号です。 |
signals[].scope |
string | "turn" |
この一連のシグナルが導き出される入力の範囲(ターン、会話の最新、最後のN ターン、フィードバック)。 |
signals[].attributes |
オブジェクト | 以下の属性を参照してください | 非推奨です。 信号属性のコンテナ。 各属性は、値または値を含むオブジェクトです。 これは、シグナルを生成するために使用されるマシンラーニング/エージェント情報の母集団をサポートする予想されるニーズに対応するためです。 |
signals[].attributes.subjects |
オブジェクト | 以下の被写体を参照 | 非推奨です。 サブジェクト コンテナ。 |
signals[].attributes.subjects.values[] |
配列 | 以下の件名の値を参照 | 非推奨です。 件名の値の配列。 |
signals[].attributes.subjects.values[].phrase |
string | "product pricing" |
非推奨です。 スコープ付き入力から抽出されたフレーズまたはキーワード。 |
signals[].attributes.subjects.values[].qualifiers[] |
配列 | ["important", "urgent"] |
非推奨です。 フレーズの修飾子のリスト |
signals[].attributes.intents |
オブジェクト | 以下のインテントを参照 | 非推奨です。 インテントコンテナ: |
signals[].attributes.intents.values[] |
配列 | ["make a purchase", "learn more"] |
非推奨です。 スコープ付き入力から派生したインテント。 |
signals[].attributes.tones |
オブジェクト | 以下のトーンを参照してください | 非推奨です。 トーンコンテナ: |
signals[].attributes.tones.values[] |
配列 | ["thrilled", "contemplative"] |
非推奨です。 範囲を指定した入力から派生したトーン。 |
signals[].attributes.sentiment |
オブジェクト | 以下のセンチメントを参照してください | 非推奨です。 センチメントコンテナ: |
signals[].attributes.sentiment.value |
number | 0.71 |
非推奨です。 センチメントを示す-1 (負)から1 (正)までのスコア。 |
signals[].name |
string | "sentiment" |
New (非推奨のattributes コンテナに置き換わります)。 このシグナルの識別子(例:「被写体」、「インテント」、「トーン」、「センチメント」、またはプロデューサー定義の名前)。 プロデューサーは、スキーマを変更することなく新しい信号タイプを追加できます。 |
signals[].type |
string | "number" |
新規。 このシグナルの値のデータ型(string、numberまたはboolean)。 values[]の各エントリに入力される入力値フィールドを消費者に示します。 |
signals[].values[] |
配列 | 以下のvalues オブジェクトを参照してください | この信号の1つ以上の値。 |
signals[].values[].stringValue |
string | "curious" |
typeが文字列の場合に入力されます。 意図、トーン、抽出されたフレーズなどのカテゴリ値/ |
signals[].values[].numberValue |
number | 0.71 |
typeが数値の場合に入力されます。 例えば、-1から1までのセンチメントスコア、または適用度/ |
signals[].values[].booleanValue |
ブール型 | true |
typeがブール値の場合に入力されます。 true / false フラグ |
signals[].values[].confidence |
number | 0.9 |
新規。 プロデューサーがこの値に割り当てる信頼度(0から1まで)。 |
signals[].values[].qualifiers[] |
配列 | ["important", "urgent"] |
この値の追加の記述子。キーワードと同様ですが、より意味のある/ |
signals[].values[].metadata[] |
配列 | 以下のパラメーターを参照してください | 新規。 この値に対するプロデューサー定義のメタデータをキーと値のペアとして使用します(例:signal/を生成したML/agentに関するコンテキスト)。 |
エージェント情報フィールドグループ
エージェント情報 フィールドグループは、オプションのフィールドグループであり、agenticExperience オブジェクトを使用します。 エージェント情報を追跡する場合は、このフィールドグループの使用を検討してください。
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 | |||
|---|---|---|---|
| フィールドパス(ドット表記法) | タイプ | 値の例 | メモ |
conciergeID |
string | "concierge-abc123" |
新規。 Concierge の一意の ID |
name |
string | "Brand Concierge" |
エージェントのセットを組み合わせた Concierge の名前 |
version |
string | "1.0.0" |
エージェントのセットを組み合わせた Concierge のバージョン |
environment |
string | "prod" |
このイベントの発生元の環境(開発、ステージ、製品) |
mode |
string | "release" |
エージェントのモード(テスト、プレビュー、リリース) |
agents[] |
配列 | 以下のエージェントオブジェクトを参照してください | 使用されるエージェントの配列 |
agents[].agentID |
string | "agent-001" |
新規。 エージェントの一意の識別子(以下skills[].agentIDが参照) |
agents[].name |
string | "Chatbot Assistant" |
エージェント名 |
agents[].version |
string | "2.1.3" |
エージェントバージョン |
agents[].score |
number | 0.92 |
返された値のエージェント信頼スコア |
agents[].skills[] |
配列 | 以下のスキルオブジェクトを参照してください | 非推奨。 代わりに、以下のトップレベル skills[]配列を使用します。この配列は、スキル呼び出しの完全な順序付きリストを所有し、agentIDを介して各自をそのエージェントにリンクします |
agents[].skills[].name |
string | "Intent Recognition" |
スキル名(非推奨の配列) |
agents[].skills[].version |
string | "1.0.0" |
スキルバージョン(非推奨の配列) |
agents[].skills[].score |
number | 0.95 |
スキルの信頼性スコア (0-1) (非推奨の配列) |
agents[].skills[].parameters[] |
配列 | 以下のパラメーターを参照してください | スキルに送信されるパラメーター(キーと値のペア)(非推奨の配列) |
agents[].skills[].parameters[].key |
string | "language" |
パラメーターキー |
agents[].skills[].parameters[].value |
string | "en-US" |
パラメーター値 |
skills[] |
配列 | 以下のスキル呼び出しオブジェクトを参照してください | 新規、実験的。 このエクスペリエンスに対するスキルの呼び出しを、すべてのエージェントをまたいで完全に順序付けしたリストです。 非推奨のエージェントごとのagents[].skills[]配列を置き換えます |
skills[].skillID |
string | "skill-intent-recognition" |
呼び出されたスキル定義の識別子 |
skills[].skillInvocationID |
string | "inv-9f2a-001" |
再配信でも一貫性のある、個々のスキルの呼び出しに対する一意のID。 スキルアレイをダウンストリームに結合する際の重複排除キー |
skills[].name |
string | "Intent Recognition" |
呼ばれたスキルの名前 |
skills[].version |
string | "1.0.0" |
呼び出されたスキルのバージョン |
skills[].agentID |
string | "agent-001" |
agents[].agentIDに関連するこのスキルを呼び出したエージェントの識別子。 サブエージェントが並行して実行されるため、主要な消費者がエージェント内でスキルを注文するために使用するグループ化 |
skills[].invocationSource |
string | "main" |
メイン エージェンティック ループ (main)によって呼び出されたか、サブエージェント (subagent)によって呼び出されたか |
skills[].score |
number | 0.95 |
スキルのマッチング結果のスコア |
skills[].failed |
ブール型 | false |
スキルの実行に失敗したことを示すフラグ |
skills[].errorReason |
string | "timeout" |
failedがtrueの場合、スキルが失敗した理由 |
skills[].sequenceNumber |
整数 | 1 |
単一のエージェント実行内のこのスキルコールのインデックスを単調に増加させます。 サブエージェントが並行して実行されるので、このインデックスはターン・グローバルではありません。 消費者はagentID、次いでsequenceNumber、timestampをタイブレークとして注文します。 オプション |
skills[].timestamp |
string (date-time) | "2026-09-11T00:03:15Z" |
スキルが呼び出された時間(ISO 8601 UTC)。 sequenceNumberの後にキーを注文しています。 プロデューサーは必ずこれを入力する必要があります |
skills[].skillSource |
string | "inline" |
スキル定義がランタイムに配信された方法:inline (コンテキストにインラインで読み込まれた)またはdeferred (オンデマンドで読み込まれた) |
skills[].executionContext |
string | "inline" |
スキルが呼び出し元エージェントに対して実行される場所:inlineまたはforked (分岐されたサブエージェントコンテキストで実行) |
skills[].reasoning.narration |
string | "Recognized an intent to verify a geography fact" |
なぜこのスキルが呼ばれたのかを自然言語で説明 |
skills[].parameters[] |
配列 | 以下のパラメーターを参照してください | スキルに渡されるパラメーター |
skills[].parameters[].key |
string | "language" |
パラメーターキー |
skills[].parameters[].value |
string | "en-US" |
パラメーター値 |
エージェント情報フィールドグループをデータで伝播するイベントを実装するには、次のことを確認する必要があります。
-
エージェント設定
- 各エージェントには、一意のエージェント ID、名前、バージョンの組み合わせがあります。
- エージェントスコアは
0.0から1.0の間で正規化されます。 agentIDを使用して、スキル呼び出しでエージェントを参照します。
-
スキル呼び出し
- 各エージェントの下にスキルをネストするのではなく、すべてのエージェントをまたいで、スキル呼び出しごとに1つのエントリのみを出力します。
- skillInvocationIDを設定して、ダウンストリームブレンドで重複する再配信イベントを削除できるようにします。
- 消費者に適切な注文を行う:
agentIDでグループ化し、sequenceNumberで並べ替えて、timestampにフォールバックします。 サブエージェントは並行して実行できるため、注文が必要です invocationSourceとexecutionContextを使用して、プライマリとサブエージェントのスキルを区別し、インラインとフォークされた実行を区別します。- 非推奨の
agents[].skills[]配列を使用しないでください。 過去に配列を使用したことがある場合は、その配列を読み取り専用オブジェクトとして扱います。
-
スキルのパラメーター
- パラメーターは、Adobe XDM キー値データタイプを使用し、言語設定、しきい値、モデル設定に共通のパラメータータイプを使用します。 例えば、
"key":"language", "value":"en-US"のように設定します。
- パラメーターは、Adobe XDM キー値データタイプを使用し、言語設定、しきい値、モデル設定に共通のパラメータータイプを使用します。 例えば、
| code language-json |
|---|
|
追加のフィールドグループ
プロンプト、応答、フィードバックのデータセットに使用するスキーマに、オプションのフィールドグループを追加できます。 次に例を示します。
- Web詳細 フィールドグループ。 会話が埋め込まれたweb ページの詳細をキャプチャします。
- Commerce詳細 フィールドグループ。 会話の一部として言及された推奨製品の製品詳細を取り込みます。
お客様は、ソース会話イベントを作成する責任があります。 Adobeは、信号抽出とデータブレンドを実行します。 お客様は、シグナル抽出または描画サービスを実装する必要はありません。
イベントタイプ
会話イベントごとにeventType (文字列)に次のいずれかの値を設定する必要があります。
conversation.turnconversation.recommendationconversation.feedback例
様々なシナリオでの会話イベントフィールドグループの使用例については、以下を参照してください。
| tabs | |||
|---|---|---|---|
| イベントの例を表示 |
|
||
| 応答イベントの例 |
|
||
| フィードバックイベントの例 |
|
||
| 商品レコメンデーションイベントの例 |
|
データ収集
会話インサイトには、次のデータ収集戦略を使用します。
イベントタイプ
エージェントのアプリケーションまたはサービスは、できるだけ早くイベントを送信します。 アプリまたはサービスが応答を待たないことを確認してから、イベント時に利用可能な情報を含むプロンプトを送信します。
この推奨事項は、次のことを意味します。
- プロンプト、応答、フィードバックのオブジェクトは個別に入力されるため、単一のイベントの一部として強制的に指定する必要はありません。
- データセット間で同じ
conversationIDとturnIDを持つイベントが複数必要です。
イベント相関性
エージェントアプリケーションまたはサービスは、関連するすべてのイベントにわたって安定した識別子を保持する必要があります。
conversation.conversationIDconversation.turnID_idtimestampeventType-
同じ会話に属するすべてのイベントには、同じ
conversationIDを使用する必要があります。 -
同じ
turnIDを、プロンプト、応答、および同じターンに関連付けられたすべてのフィードバックに使用する必要があります。 同じturnIDを持つイベントが、プロンプト、応答、フィードバックのデータセットをまたいで複数存在する可能性があります。
エージェントアプリケーションまたはサービスは、再試行または再配信中に安定したIDを生成します。 これにより、下流処理でイベントを正しく関連付け、意図しない重複イベントを回避できます。
信号抽出
シグナル抽出はデータ収集後に行われます。 エージェントのアプリケーションまたはサービスは、追加のシグナルを入力できます。
シグナル名
signals[].nameの値を設定する必要があります。 任意の文字列値を使用できます。ただし、Adobeは、信号抽出プロセス中に次の名前を入力します。 これらの値は上書きされるので、送信するシグナルにnameにこれらの値を使用しないでください。
intentssentimenttonestopicskeywordstitle
シグナルスコープ
任意の文字列値を使用できます。ただし、Adobeは、信号抽出プロセス中に次のスコープを生成します。 これらの値は上書きされるので、送信するシグナルにscopeにこれらの値を使用しないでください。
turnfeedback
| code language-json |
|---|
|
データブレンディング
会話ブレンダーサービスは、プロンプト、応答、フィードバック、およびシグナルイベントデータセットのイベントを、専用のブレンドされた会話イベントデータセットに統合します。 そのデータセットは、接続の一部としてCustomer Journey Analyticsで使用されます。 そのデータセット内のコンポーネントは、Conversation Insights設定に指定したデータビューに追加されます。