

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用自訂轉換 Lambda 函數來定義如何擷取您的資料
<a name="kb-custom-transformation"></a>

您可以定義自訂轉換 Lambda 函數，將自己的邏輯注入知識庫擷取程序。

您可能有特定的群集邏輯，Amazon Bedrock 知識庫原生不支援。使用無群集策略選項，同時指定包含群集邏輯的 Lambda 函數。此外，您將需要為知識庫指定 Amazon S3 儲存貯體，以寫入 Lambda 函數要群集的檔案。

群集之後，Lambda 函數會將群集檔案寫入相同的儲存貯體，並傳回知識庫的參考以供進一步處理。您可以選擇提供自己的 AWS KMS 金鑰，以加密存放在 S3 儲存貯體中的檔案。

**注意**  
如果使用 Web 連接器，則會將 Markdown 文字傳遞給 Lambda，而不是 HTML。

或者，您可能要指定區塊層級中繼資料，同時讓知識庫套用其中一個原生支援的群集策略。在此情況下，選取其中一個預先定義的群集策略 (例如預設或固定大小的群集)，同時提供 Lambda 函數和 S3 儲存貯體的參考。在此情況下，知識庫會在呼叫 Lambda 函數以進一步新增區塊層級中繼資料之前，將已剖析和預先群集的檔案存放在預先定義的 S3 儲存貯體中。

新增區塊層級中繼資料之後，Lambda 函數會將群集檔案寫入相同的儲存貯體，並傳回知識庫的參考以供進一步處理。請注意，區塊層級中繼資料會優先處理，並在發生任何衝突時，覆寫檔案層級中繼資料。

如需使用 Python Lambda 函數進行自訂群集的範例，請參閱[使用 Lambda 函數自訂群集](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"
        }
    }
    ...
    ]
}
```