はじめに

Amazon Bedrock Flow
Amazon Bedrock Flowsを使用していて、Flow Inputにオブジェクトを指定してテストをした際に以下のようなエラーに遭遇しました。

Unable to generate a response. Detected flow input type: String Expected flow input type: Object.

このエラーは、JSONオブジェクトの形式が正しくないために発生することがあります。今回は、この問題の原因と解決策について説明します。

問題の原因

Bedrock Flowsに以下のようなJSONを入力したとします:

{
    hoge: "aaa",
    huga: "bbb"
}

このJSON形式は、JavaScriptのオブジェクト記法では有効ですが、厳密なJSON形式としては不正確です。JSONの仕様では、キー(プロパティ名)は必ずダブルクォーテーションで囲む必要があります。

正しい形式

正しいJSON形式は以下のようになります:

{
    "hoge": "aaa",
    "huga": "bbb"
}

キー名(hogehuga)がダブルクォーテーションで囲まれていることに注目してください。

なぜこれが重要なのか?

Amazon Bedrock FlowsのFlow Inputでは、入力がObject型として正しく認識されるためには、厳密なJSON形式に従う必要があります。キーがクォーテーションで囲まれていない場合、システムはこれを文字列(String)として解釈してしまい、期待されるObject型との不一致が発生します。

他のAWSサービスでも同様の問題が発生する

この問題はBedrock Flowsに限らず、AWS Lambda関数やAmazon API Gatewayのテスト時にも同様に発生します。これらのサービスもJSON形式の入力を期待しており、厳密なJSON構文に従う必要があります。

例えば、Lambda関数のテストイベントやAPI Gatewayのテストリクエストボディで以下のような形式を使用すると:

{
    userId: 123,
    action: "getData"
}

パースエラーが発生したり、予期しない動作を引き起こす可能性があります。正しくは:

{
    "userId": 123,
    "action": "getData"
}

とする必要があります。

AWS CLIやSDKを使用してこれらのサービスを呼び出す場合も同様です。JSONペイロードを含むコマンドやリクエストでは、常に厳密なJSON形式を使用する必要があります。

参考情報

この問題は、JSON仕様に基づいています。JSON公式サイトによれば、JSONオブジェクトのキーは必ず文字列でなければならず、文字列は二重引用符で囲む必要があります。

また、AWS公式ドキュメントでも、Bedrock Flowsへの入力は有効なJSON形式である必要があると説明されています。

まとめ

  1. すべてのキー(プロパティ名)はダブルクォーテーションで囲む
  2. 値が文字列の場合もダブルクォーテーションで囲む
  3. 数値、真偽値、nullはクォーテーションなしで記述

JavaScriptでは、オブジェクトリテラル記法でキー名のクォーテーションを省略できますが、JSONはより厳格な形式を要求します。この違いを理解しておくことで、APIやサービスとの連携時のトラブルを防ぐことができます。