

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタム変換 Lambda 関数を使用してデータの取り込み方法を定義する
<a name="kb-custom-transformation"></a>

カスタム変換の Lambda 関数を定義して、ナレッジベースの取り込みプロセスに独自のロジックを挿入できます。

具体的なチャンキングロジックがあり、これが Amazon Bedrock のナレッジベースではネイティブサポートされていない場合があります。その場合は、チャンキングの戦略として [チャンキングなし] を選択し、使用するチャンキングロジックを含む Lambda 関数を指定します。さらに、Lambda 関数によるチャンク化の対象ファイルをナレッジベースが書き込む先の Amazon S3 バケットを指定する必要があります。

Lambda 関数はファイルをチャンキングした後、同じバケットに書き戻し、ナレッジベースで後処理を行えるように参照を返します。オプションで、S3 バケットに保存されるファイルを暗号化するため、独自の AWS KMS キーを指定できます。

**注記**  
ウェブコネクタを使用する場合、HTML の代わりに Markdown テキストが Lambda に渡されます。

または、チャンクレベルのメタデータを指定し、ナレッジベースにはネイティブサポートされているチャンキング戦略のいずれかを適用させることもできます。この場合、定義済みのチャンキング戦略 (例えば、デフォルトまたは固定サイズのチャンキング) のいずれかを選択すると同時に、Lambda 関数と S3 バケットへの参照を指定します。ナレッジベースは、解析と前処理のチャンク化を行ったファイルを事前定義済みの S3 バケットに保存し、その後、チャンクレベルのメタデータを追加するために Lambda 関数を呼び出します。

チャンクレベルのメタデータを追加した後、Lambda 関数はチャンク化されたファイルを同じバケットに書き戻し、ナレッジベースで後処理を行えるように参照を返します。衝突が生じた場合は、チャンクレベルのメタデータが優先され、ファイルレベルのメタデータが上書きされます。

カスタムのチャンキングに Python Lambda 関数を使用する例については、「[Custom chunking using Lambda function](https://github.com/aws-samples/amazon-bedrock-samples/blob/main/rag/knowledge-bases/features-examples/03-optimizing-accuracy-retrieved-results/advanced_chunking_options.ipynb)」を参照してください。

API およびファイル契約については、以下の構造を参照してください。

**Lambda 関数を使用してカスタム変換を追加する場合の API 契約**

```
{
...
    "vectorIngestionConfiguration": {
        "customTransformationConfiguration": { // Custom transformation 
            "intermediateStorage": {
                "s3Location": { // the location where input/output of the Lambda is expected 
                    "uri": "string"
                }
            },
            "transformations": [{
                "transformationFunction": {
                    "transformationLambdaConfiguration": {
                        "lambdaArn": "string"
                    }
                },
                "stepToApply": "string" // enum of POST_CHUNKING
            }]
        },
        "chunkingConfiguration": {
            "chunkingStrategy": "string",
            "fixedSizeChunkingConfiguration": {
                "maxTokens": "number",
                "overlapPercentage": "number"
            }
            ...
        }
    }
}
```

**カスタムの Lambda 変換の入力形式**

```
{
    "version": "1.0",
    "knowledgeBaseId": "string",
    "dataSourceId": "string",
    "ingestionJobId": "string",
    "bucketName": "string",
    "priorTask": "string",
    "inputFiles": [{
        "originalFileLocation": {
            "type": "S3",
            "s3_location": {
                "uri": "string"
            }
        },
        "fileMetadata": {
            "key1": "value1",
            "key2": "value2"
        },
        "contentBatches": [{
            "key":"string"
        }]
    }]
}
```

**カスタムの Lambda 変換の出力形式**

```
{
    "outputFiles": [{
        "originalFileLocation": {
            "type": "S3",
            "s3_location": {
                "uri": "string"
            }
        },
        "fileMetadata": {
            "key1": "value1",
            "key2": "value2"
        },
        "contentBatches": [{
            "key": "string"
        }]
    }]
}
```

**で参照されるオブジェクトのファイル形式`fileContents`**

```
{
    "fileContents": [{
        "contentBody": "...",
        "contentType": "string", // enum of TEXT, PDF, ...
        "contentMetadata": {
            "key1": "value1",
            "key2": "value2"
        }
    }
    ...
    ]
}
```