

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

# 在数据来源中包含元数据以改进知识库查询
<a name="kb-metadata"></a>

在提取 CSV（逗号分隔值）文件时，您可以让知识库将某些列视为内容字段而不是元数据字段。现在，您可以拥有一个 CSV content/metadata 文件和一个相应的 metadata.json 文件，从而为知识库提供有关如何处理 CSV 中每列的提示，而不必拥有成百上千个文件对。

 fields/attributes 每个区块的文档元数据有限制。请参阅 [Quotas for knowledge bases](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html)

在提取 CSV 文件之前，请确保：
+ 您的 CSV 格式为 RFC4180 并 UTF-8 已进行编码。
+ CSV 的第一行包含标题信息。
+ 您的 metadata.json 中提供的元数据字段以列的形式出现在 CSV 中。
+ 您提供以下格式Name.csv.metadata.json 的文件文件：

  ```
  {
      "metadataAttributes": {
          "${attribute1}": "${value1}",
          "${attribute2}": "${value2}",
          ...
      },
      "documentStructureConfiguration": {
          "type": "RECORD_BASED_STRUCTURE_METADATA",
          "recordBasedStructureMetadata": {
              "contentFields": [
                  {
                      "fieldName": "string"
                  }
              ],
              "metadataFieldsSpecification": {
                  "fieldsToInclude": [
                      {
                          "fieldName": "string"
                      }
                  ],
                  "fieldsToExclude": [
                      {
                          "fieldName": "string"
                      }
                  ]
              }
          }
      }
  }
  ```

CSV 文件每次解析一行，并将分块策略和向量嵌入应用于内容字段。Amazon Bedrock 知识库目前支持一个内容字段。内容字段被拆分为多个分块，与每个分块关联的元数据字段（列）被视为字符串值。

例如，假设有一个 CSV，其中有一列 “描述”，一列 “Creation\_Date”。描述字段是内容字段，创建日期是关联的元数据字段。描述文本被分成多个块，并转换为 CSV 中每行的向量嵌入。创建日期值被视为日期的字符串表示形式，并与描述的每个分块相关联。

如果未提供任何 inclusion/exclusion 字段，则除内容列外，所有列都将被视为元数据列。如果仅提供包含字段，则仅将提供的列视为元数据。如果仅提供排除字段，则除排除列之外的所有列都将被视为元数据。如果您在 `fieldsToInclude` 和 `fieldsToExclude` 中都提供了相同的 `fieldName`，Amazon Bedrock 将引发验证异常。如果包容和排除之间存在冲突，则将导致失败。

在 CSV 中找到的空行将被忽略或跳过。

## 示例：带有元数据 Multi-row 的 CSV
<a name="kb-metadata-csv-example"></a>

以下示例显示了一个完整的 CSV 文件及其相应的元数据 JSON 文件。

**CSV 文件示例 (`properties.csv`)**

```
description,city,price,bedrooms
"Spacious 3-bedroom home with updated kitchen and large backyard.",Seattle,450000,3
"Modern downtown condo with floor-to-ceiling windows and city views.",Portland,325000,2
"Charming craftsman bungalow with original hardwood floors.",Austin,275000,2
```

**相应的元数据文件 (`properties.csv.metadata.json`)**

```
{
    "metadataAttributes": {
        "source": "property_listings_2024"
    },
    "documentStructureConfiguration": {
        "type": "RECORD_BASED_STRUCTURE_METADATA",
        "recordBasedStructureMetadata": {
            "contentFields": [
                {
                    "fieldName": "description"
                }
            ],
            "metadataFieldsSpecification": {
                "fieldsToInclude": [
                    {
                        "fieldName": "city"
                    },
                    {
                        "fieldName": "price"
                    }
                ]
            }
        }
    }
}
```

在本示例中：
+ `contentFields`— 指定一列 (`description`) 作为要分块和嵌入的内容。仅支持一个内容字段。
+ `fieldsToInclude`— 指定要将哪些列（`city`和`price`）视为可筛选的元数据。由于未`bedrooms`列出该列，因此将其排除在外。
+ `metadataAttributes`— 指定应用于此 CSV 中每个区块的文档级元数据。在此示例中，`source`是应用于所有行的静态属性。

每行生成一个块。对于第一行，区块文本是描述，元数据是`city: "Seattle"``price: "450000"`、和`source: "property_listings_2024"`。CSV 列中的所有元数据值都存储为字符串。

## 支持的元数据数据类型
<a name="kb-metadata-data-types"></a>

元数据属性支持以下数据类型：
+ `STRING`— 文本值。
+ `NUMBER`：数值。使用本页上描述的 CSV-based 元数据配置时，数字值存储为字符串。
+ `BOOLEAN`— 真值或假值。
+ `STRING_LIST`— 字符串值列表。

有关筛选查询中使用的完整元数据属性架构，请参阅 API 参考[MetadataAttributeSchema](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_MetadataAttributeSchema.html)中的。

## 相关的元数据配置选项
<a name="kb-metadata-related"></a>

除了本页上描述的 CSV-based 元数据配置外，您还可以使用 Sidecar `.metadata.json` 文件为 Amazon S3 数据源中的任何文档类型配置元数据。此方法支持全套数据类型和`includeForEmbedding`选项。有关更多信息，请参阅 [文档元数据字段](s3-data-source-connector.md#ds-s3-metadata-fields)。

要了解如何使用元数据筛选查询结果，请参阅中的**知识库提示模板**部分[配置和自定义查询与响应生成](kb-test-config.md)。