

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用自定义转换 Lambda 函数定义数据的摄取方式
<a name="kb-custom-transformation"></a>

您可以定义自定义转换 Lambda 函数，将自己的逻辑注入知识库摄取过程。

您可能有特定的分块逻辑，Amazon Bedrock 知识库本身不支持这些逻辑。使用无分块策略选项，同时指定包含分块逻辑的 Lambda 函数。此外，您需要为知识库指定一个 Amazon S3 存储桶，以写入要由 Lambda 函数分块的文件。

分块后，您的 Lambda 函数会将分块文件写回同一个存储桶中，并返回知识库的引用以供进一步处理。您可以选择提供自己的 AWS KMS 密钥来加密存储在 S3 存储桶中的文件。

**注意**  
如果使用 Web 连接器，则会向 Lambda 传递 markdown 文本，而不是 HTML。

或者，您可能需要指定块级元数据，同时让知识库应用一种原生支持的分块策略。在这种情况下，选择一种预定义的分块策略（例如，默认或固定大小分块），同时提供对您的 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"
        }
    }
    ...
    ]
}
```