

# ユーザーが収集したフィードバックへのアクセスと分析
<a name="accessing-and-analyzing-user-collected-feedback"></a>

v3.0.0 以降、デプロイダッシュボードはネストされたフィードバックスタックをデプロイします。これにより、ダッシュボードでデプロイされた Text および Bedrock エージェントユースケースは、LLM/エージェントが生成するレスポンスのフィードバック収集機能を利用できるようになります。特に、ユーザーはオプションのコメントとともに肯定的または否定的なフィードバックを提供できます。ユーザーが否定的なフィードバックを提供する場合、「不正確」、「不完全または不十分」、「有害」、および/または「その他」のいずれかの否定的なカテゴリをさらに選択できます。

ユーザーがフィードバックを提供すると、フィードバックはユースケース ID、年、月ごとにパーティション化された S3 バケットに保存されます。ユースケース ID はデプロイダッシュボードで確認でき、フィードバック S3 バケットはデプロイダッシュボードスタックのフィードバックネストスタックの出力で確認できます。

 **デプロイスタックの図解 - フィードバックバケット名の検索** 

![フィードバックバケットの出力](http://docs.aws.amazon.com/ja_jp/solutions/latest/generative-ai-application-builder-on-aws/images/feedback-bucket-output.png)


ユーザーフィードバックは、最小限の情報を含む API リクエストとして送信されます。

```
{
  "useCaseRecordKey": "a1b2c3d4-e5f6g7h8",
  "conversationId": "12345678-1234-1234-1234-123456789012",
  "messageId": "87654321-4321-4321-4321-210987654321",
  "rephrasedQuery": "What are the key features of the Generative AI Application Builder on AWS?",
  "sourceDocuments": [
    "s3://bucket-name/document1.pdf",
    "s3://bucket-name/document2.pdf"
  ],
  "feedback": "positive",
  "feedbackReason": [
    "Incomplete or insufficient"
  ],
  "comment": "The response was helpful but could include more details about important features."
}
```

このペイロードは、デプロイ時にユースケースの正しい設定を識別する `useCaseRecordKey` を使用して Lambda によって処理されます。この設定は、ConversationTable の名前 (すべての会話と人間と AI メッセージシーケンスを含む) などのフィードバックの具体的な詳細を取得するために使用され、さらに実際の `userInput` と `llmResponse` を取得するために使用されます。このフィードバックレコードには、Bedrock エージェントユースケースの `agentId` や `agentAliasId`、この設定を使用する Text ユースケースの `modelProvider`、`bedrockModelId` などの追加の詳細もアタッチされます。この設定にアクセスする方法の詳細については、以下の「[カスタムフィードバックマッピング](#custom-feedback-mappings)」セクションを参照してください。各受信フィードバックリクエストは JSON オブジェクトとして保存され、Text ユースケースのサンプルフィードバックレコードは次のようになります。

```
{
   "useCaseId": "12345678-1234-1234-1234-123456789012",
   "useCaseRecordKey": "c07a2e3b-2f31b1e0",
   "userId": "22345678-1234-1234-1234-123456789012",
   "conversationId": "dd51de5d-5af1-4ec6-91d2-aadf14352109",
   "messageId": "32345678-1234-1234-1234-123456789012",
   "userInput": "What are its key features?",
   "rephrasedQuery": "What are the key features of the Generative AI Application Builder on AWS?",
   "llmResponse": "Generative AI Application Builder on AWS can help you build production ready enterprise chatbots rapidly.",
   "feedback": "negative",
   "feedbackReason": [
      "Incomplete or insufficient"
   ],
   "comment": "The response was helpful but could include more details about important features.",
   "timestamp": "2025-05-22T18:48:08.340Z",
   "feedbackId": "42345678-1234-1234-1234-123456789012",
   "useCaseType": "Text",
   "modelProvider": "Bedrock",
   "bedrockModelId": "amazon.nova-lite-v1:0",
   "ragEnabled": "false"
}
```

または、Bedrock エージェントユースケースの場合は次のようになります。

```
{
   "useCaseId": "12345678-1234-1234-1234-123456789012",
   "useCaseRecordKey": "c07a2e3b-2f31b1e0",
   "userId": "22345678-1234-1234-1234-123456789012",
   "conversationId": "dd51de5d-5af1-4ec6-91d2-aadf14352109",
   "messageId": "32345678-1234-1234-1234-123456789012",
   "userInput": "What are its key features?",
   "llmResponse": "Generative AI Application Builder on AWS can help you build production ready enterprise chatbots rapidly.",
   "feedback": "negative",
   "feedbackReason": [
      "Incomplete or insufficient"
   ],
   "comment": "The response was helpful but could include more details about important features.",
   "timestamp": "2025-05-22T18:48:08.340Z",
   "feedbackId": "42345678-1234-1234-1234-123456789012",
   "useCaseType": "Agent",
   "agentId": "AHFXUJCAK1",
   "agentAliasId": "KSEDKOS0BL"
}
```

このフィードバックは、さらなる処理、分析、モデルの再トレーニング/フィードバックループに使用できます。また、カスタムマッピングを追加して、フィードバック Lambda に保存されるフィードバックレコードを強化することもできます。

## カスタムフィードバックマッピング
<a name="custom-feedback-mappings"></a>

デプロイダッシュボードには、`LLMConfigTable` が含まれており、これは、キー `LLMConfigTableName` を持つデプロイダッシュボードスタックのスタック出力で見つかります。`LLMConfigTable` には、デプロイダッシュボードウィザードを使用してユースケースをデプロイするときに管理者が選択した設定に基づいて、各ユースケースの設定が含まれています。各ユースケース設定は、`useCaseRecordKey` によって識別されます。`LLMConfigTable` のユースケース設定レコードの例を次に示します。

```
{
   "key": "2dd76cfa-bc1a14da",
   "config": {
      "ConversationMemoryParams": {
        ...
      },
      "FeedbackParams": {
         "CustomMappings": {
            "NumberOfDocs": "$.KnowledgeBaseParams.NumberOfDocs",
            "ScoreThreshold": "$.KnowledgeBaseParams.ScoreThreshold"
         },
         "FeedbackEnabled": true
      },
      "IsInternalUser": "true",
      "KnowledgeBaseParams": {
         "KendraKnowledgeBaseParams": {
            "ExistingKendraIndexId": "d2831033-667f-4539-ab28-e6c7c7c5988b",
            "RoleBasedAccessControlEnabled": false
         },
         "KnowledgeBaseType": "Kendra",
         "NumberOfDocs": 5,
         "ReturnSourceDocs": false,
         "ScoreThreshold": 0.3
      },
      "LlmParams": {
         "BedrockLlmParams": {
            "BedrockInferenceType": "QUICK_START",
            "ModelId": "amazon.nova-lite-v1:0"
         },
         "ModelParams": {},
         "ModelProvider": "Bedrock",
         "PromptParams": {
            ...
         },
         "RAGEnabled": true,
         "Streaming": false,
         "Temperature": 0.1,
         "Verbose": false
      },
      "UseCaseName": "test-rag-usecase",
      "UseCaseType": "Text"
   }
}
```

ユースケースに対してフィードバックが有効になっている場合、この設定には `FeedbackParams` オブジェクトが含まれます。このオブジェクトには、フィードバック S3 バケットに保存されるフィードバック JSON レコードに追加されるすべての追加フィールドの JSONPath を指定できる `CustomMappings` オブジェクトが含まれます。例えば、上記のサンプルユースケース設定の場合、CustomMappings には、JSONPath のルートとして `config` で始まる `CustomMappings` オブジェクトに `NumberOfDocs` と `ScoreThreshold` JSONPath が追加で含まれています。この設定では、フィードバック S3 バケットに保存されている各 JSON レコードは、既に提供されているフィールドとは別に、これら 2 つの追加値の取得を開始します。

## フィードバックデータの分析
<a name="analyzing-feedback-data"></a>

フィードバックデータは JSON オブジェクトとして S3 に保存されます。このフィードバックデータをよりアクセスしやすく実用的なものにするためのアプローチをいくつか紹介します。

### AWS Glue と Amazon Athena を使用する
<a name="using-aws-glue-and-amazon-athena"></a>

 [AWS Glue](https://aws.amazon.com/glue) と [Amazon Athena](https://aws.amazon.com/athena) は、フィードバックデータをサーバーレスでカタログ化し、クエリし、分析する方法を提供します。

AWS Glue を使用すると、S3 バケット内のデータを検査してスキーマを推測し、関連するすべてのメタデータをカタログに記録する [AWS Glue クローラー](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)を作成できます。その後、Amazon Athena などのサービスを使用してデータをクエリできます。

AWS Glue データカタログを使用してフィードバック S3 バケットを Amazon Athena に接続する手順については、「[AWS Amazon Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/data-sources-glue.html)」を参照してください。Glue のより強力な機能の一部を使用して、このデータに対して抽出、変換、ロード (ETL) ジョブを実行し、分析やモデルの再トレーニングのユースケースに適した形式に変換することもできます。Glue を使用すると、特定のフィードバックタイプのレコードのフィルタリング、不足している情報の入力などの操作を実行できます。また、このデータを別の S3 バケットや別の AWS データストアなどの別のストレージロケーションにロードすることもできます。

**注記**  
ユースケースによっては、フィードバックデータがまばらである可能性があるため、コストを最適化するために、Glue クローラーを毎晩ではなく定期的に (例えば、毎週) 実行するようにスケジュールすることを検討してください。

### ソリューションの CloudWatch ダッシュボードの使用
<a name="using-the-solutions-cloudwatch-dashboards"></a>

また、ソリューションにパッケージ化された **CloudWatch ダッシュボード**にアクセスして、肯定的なフィードバックと否定的なフィードバックの傾向、否定的なフィードバックの理由のカテゴリなどをユースケースごとに確認することもできます。このダッシュボードは、AWS CloudWatch コンソール内の *[ダッシュボード]* でユースケース名を使用して見つけることができます。

 **CloudWatch ダッシュボードのユースケースの図解** 

![CloudWatch ユースケースダッシュボード](http://docs.aws.amazon.com/ja_jp/solutions/latest/generative-ai-application-builder-on-aws/images/cloudwatch-usecase-dashboard.png)


このダッシュボードに追加のウィジェットを構築したり、Amazon Quick Sight ダッシュボードを作成したりすることもできます。

### フィードバックデータ分析のベストプラクティス
<a name="best-practices-for-feedback-data-analysis"></a>
+  S3 バケットに**データライフサイクルポリシーを実装**して、古いフィードバックデータを低コストのストレージ階層にアーカイブする
+  **ユースケースごとに個別の分析を作成して**、モデル固有の改善の機会を特定する
+  否定的なフィードバックが許容レベルを超えたときにアラートをトリガーする**フィードバックしきい値を設定する**
+  ステークホルダーやモデル改善チームと共有するための**重要なインサイトを定期的にエクスポートする**