Amazon Managed Service for Apache Flink(Amazon MSF)之前称为 Amazon Kinesis Data Analytics for Apache Flink。
实时向量嵌入蓝图 - 常见问题解答
查看以下有关实时向量嵌入蓝图的常见问题解答。有关实时向量嵌入蓝图的更多信息,请参阅实时向量嵌入蓝图。
常见问题
此蓝图创建了哪些 Amazon 资源?
要查找部署在您账户中的资源,请导航到 Amazon CloudFormation 控制台并确定以您为 Managed Service for Apache Flink 应用程序所提供名称开头的堆栈名称。选择资源选项卡,查看作为堆栈一部分创建的资源。以下是堆栈创建的关键资源:
-
实时向量嵌入 Managed Service for Apache Flink 应用程序
-
用于存放实时向量嵌入应用程序源代码的 Amazon S3 存储桶
-
CloudWatch 日志组和用于存储日志的日志流
-
用于获取和创建资源的 Lambda 函数
-
用于 Lambda、Managed Service for Apache Flink 应用程序以及访问 Amazon Bedrock 和 Amazon OpenSearch Service 的 IAM 角色和策略
-
Amazon OpenSearch Service 的数据访问控制
-
用于访问 Amazon Bedrock 和 Amazon OpenSearch Service 的 VPC 端点
Amazon CloudFormation 堆栈部署完成后将执行哪些操作?
Amazon CloudFormation 堆栈部署完成后,访问 Managed Service for Apache Flink 控制台并找到您的蓝图 Managed Service for Apache Flink 应用程序。选择配置选项卡并确认所有运行时属性的设置是否正确。这些设置可能会溢出到下一页。如果您对这些设置放心,请选择运行。该应用程序将开始从您的主题中摄取消息。
要查看新发布版本,请参阅 https://github.com/awslabs/real-time-vectorization-of-streaming-data/releases
源 Amazon MSK 主题中的数据结构应该是什么?
我们目前支持结构化和非结构化源数据。
-
非结构化数据以
source.msk.data.type中的STRING表示。从传入的消息中按原样读取数据。 -
我们目前支持结构化的 JSON 数据(以
source.msk.data.type中的JSON表示)。数据必须始终采用 JSON 格式。如果应用程序收到格式错误的 JSON,则应用程序将失败。 -
使用 JSON 作为源数据类型时,请确保所有源主题中的每条消息都是有效的 JSON。如果您使用此设置订阅一个或多个不包含 JSON 对象的主题,则应用程序将失败。如果一个或多个主题混合了结构化和非结构化数据,我们建议您在 Managed Service for Apache Flink 应用程序中将源数据配置为非结构化数据。
我能否指定要嵌入的部分消息?
-
对于非结构化输入数据(其中
source.msk.data.type为STRING),应用程序将始终嵌入整条消息并将该消息存储在配置的 OpenSearch 索引中。 -
对于结构化输入数据(其中
source.msk.data.type为JSON),您可以配置embed.input.config.json.fieldsToEmbed以指定应选择 JSON 对象中的哪个字段进行嵌入。这仅适用于顶层 JSON 字段,不适用于嵌套的 JSON 和包含 JSON 数组的消息。使用 .* 嵌入整个 JSON。
我是否可以从多个 Amazon MSK 主题中读取数据?
是,您可以使用此应用程序从多个 Amazon MSK 主题中读取数据。来自所有主题的数据均必须是相同的类型(STRING 或 JSON),否则可能会导致应用程序失败。所有主题的数据始终存储在单个 OpenSearch 索引中。
我能否使用正则表达式来配置 Amazon MSK 主题名称?
source.msk.topic.names 不支持正则表达式列表。我们支持以逗号分隔的主题名称列表或包含所有主题的 .* 正则表达式。
可以从 Amazon MSK 主题中读取的消息的最大大小是多少?
可处理消息的最大大小受 Amazon Bedrock InvokeModel 正文约束的限制,目前设置为 25,000,000。有关更多信息,请参阅 InvokeModel。
支持哪种类型的 OpenSearch?
我们同时支持 OpenSearch 域和集合。如果您使用的是 OpenSearch 集合,请确保使用向量集合并创建用于此应用程序的向量索引。这将允许您使用 OpenSearch 向量数据库功能来查询数据。要了解更多信息,请参阅 Amazon OpenSearch Service 的向量数据库功能说明
为什么我需要在 OpenSearch Serverless 集合中使用向量搜索集合、向量索引并添加向量字段?
OpenSearch Serverless 中的向量搜索集合类型提供了一种可扩展且性能很高的相似度搜索功能。它简化了现代机器学习(ML)增强搜索体验和生成式人工智能(AI)应用程序的构建。有关更多信息,请参阅使用向量搜索集合。
我应该将哪些方面设置为向量字段的维度?
根据要使用的嵌入模型设置向量字段的维度。请参阅下表,并确认相应文档中的这些值。
| Amazon Bedrock 向量嵌入模型名称 | 模型提供的输出维度支持 |
|---|---|
|
Amazon Titan 文本嵌入 V1 |
1,536 |
|
Amazon Titan 文本嵌入 V2 |
1,024(默认)、384、256 |
|
Amazon Titan Multimodal Embeddings G1 |
1,024(默认)、384、256 |
|
Cohere Embed(英文版) |
1024 |
|
Cohere Embed(多语版) |
1024 |
配置的 OpenSearch 索引中的输出是什么样子?
OpenSearch 索引中的每个文档都包含以下字段:
-
original_data:用于生成嵌入的数据。对于 STRING 类型,它是整条消息。对于 JSON 对象,它是用于嵌入的 JSON 对象。它可以是消息中的整个 JSON,也可以是 JSON 中的指定字段。例如,如果选择从传入的消息中嵌入名称,则输出将如下所示:
"original_data": "{\"name\":\"John Doe\"}" -
embedded_data:由 Amazon Bedrock 生成的向量浮动嵌入数组
-
date:在 OpenSearch 中存储文档的 UTC 时间戳
我能否指定要添加到 OpenSearch 索引中存储的文档的元数据字段?
不能,我们目前不支持向存储在 OpenSearch 索引中的最终文档添加其他字段。
我是否应预期 OpenSearch 索引中有重复的条目?
根据您配置应用程序的方式,您可能会在索引中看到重复的消息。一种常见的原因是应用程序重新启动。默认情况下,应用程序配置为从源主题中最早的消息开始读取。当您更改配置时,应用程序会重新启动并再次处理主题中的所有消息。为避免重新处理,请参阅如何使用 source.msk.starting.offset?
我能否向多个 OpenSearch 索引发送数据?
不能,该应用程序支持将数据存储到单个 OpenSearch 索引中。要将向量化输出设置为多个索引,必须部署单独的 Managed Service for Apache Flink 应用程序。
我能否在单个 Amazon Web Services 账户 中部署多个实时向量嵌入应用程序?
可以,如果每个应用程序都有唯一的名称,则可以在单个 Amazon Web Services 账户 中部署多个实时向量嵌入 Managed Service for Apache Flink 应用程序。
多个实时向量嵌入应用程序能否使用相同的数据源或接收器?
可以,您可以创建多个实时向量嵌入 Managed Service for Apache Flink 应用程序,这些应用程序从同一主题读取数据或将数据存储在同一个索引中。
该应用程序是否支持跨账户连接?
否,要使应用程序成功运行,Amazon MSK 集群和 OpenSearch 集合必须与您尝试设置 Managed Service for Apache Flink 应用程序的Amazon Web Services 账户 位置相同。
该应用程序是否支持跨区域连接?
否,该应用程序仅允许您在 Managed Service for Apache Flink 应用程序的同一区域内部署带有 Amazon MSK 集群和 OpenSearch 集合的 Managed Service for Apache Flink 应用程序。
我的 Amazon MSK 集群和 OpenSearch 集合能否位于不同的 VPC 或子网中?
可以,我们支持不同的 VPC 和子网中的 Amazon MSK 集群和 OpenSearch 集合,前提是它们位于相同的 Amazon Web Services 账户 中。请参阅(一般 MSF 故障排除),以确保您的设置正确。
该应用程序支持哪些嵌入模型?
目前,该应用程序支持 Bedrock 支持的所有模型。这些指令包括:
-
Amazon Titan Embeddings G1 - Text
-
Amazon Titan 文本嵌入 V2
-
Amazon Titan Multimodal Embeddings G1
-
Cohere Embed(英文版)
-
Cohere Embed(多语版)
我能否根据自己的工作负载微调应用程序的性能?
是。应用程序的吞吐量取决于许多因素,所有这些因素都可以由客户控制:
-
Amazon MSF KPU:应用程序采用默认并行度系数 2 和每 KPU 1 的并行度进行部署,同时开启自动扩展。但是,建议您根据工作负载配置 Managed Service for Apache Flink 应用程序的扩展。有关更多信息,请参阅审核 Managed Service for Apache Flink 应用程序资源。
-
Amazon Bedrock:根据所选的 Amazon Bedrock 按需模式,可能适用不同的配额。在 Bedrock 中查看服务配额,以了解该服务能够处理的工作负载。有关更多信息,请参阅 Amazon Bedrock 的配额。
-
Amazon OpenSearch Service:此外,在某些情况下,您可能会注意到 OpenSearch 是您管道中的瓶颈。有关扩展信息,请参阅 OpenSearch 扩展调整 Amazon OpenSearch Service 域的大小。
支持哪些 Amazon MSK 身份验证类型?
我们仅支持 IAM MSK 身份验证类型。
什么是 sink.os.bulkFlushIntervalMillis,我该如何设置?
向 Amazon OpenSearch Service 发送数据时,批量刷新间隔是批量请求的运行间隔,无论操作的数量或请求的大小如何。默认值设置为 1 毫秒。
虽然设置刷新间隔有助于确保及时为数据编制索引,但如果将该值设置得过低,也会导致开销增加。在选择刷新间隔时,请考虑您的使用案例以及及时编制索引的重要性。
当我部署 Managed Service for Apache Flink 应用程序时,它将从 Amazon MSK 主题的哪一点开始读取消息?
应用程序将开始读取 Amazon MSK 主题中的消息,偏移量由应用程序运行时配置中设置的 source.msk.starting.offset 配置指定。如果未明确设置 source.msk.starting.offset,则应用程序的默认行为是从主题中最早的可用消息开始读取。
如何使用 source.msk.starting.offset?
根据所需的行为,将 ource.msk.starting.offset 显式设置为以下值之一:
-
最早:默认设置,即从分区中最早的偏移量读取。这是合适的选项,尤其是在以下情况下:
-
您已经新创建 Amazon MSK 主题和使用者应用程序。
-
您需要重播数据,这样才能构建或重建状态。在实现事件来源模式或初始化需要完整数据历史记录视图的新服务时,这一点很重要。
-
-
最新:Managed Service for Apache Flink 应用程序将从分区末尾读取消息。如果您只关心生成新消息,并且不需要处理历史数据,我们建议您使用此选项。在此设置中,使用者将忽略现有消息,只读取上游创建者发布的新消息。
-
已提交:Managed Service for Apache Flink 应用程序将开始使用来自使用组已提交偏移量的消息。如果提交的偏移量不存在,则将使用最早的重置策略。
支持哪些分块策略?
我们正在使用 langchainmaxSegmentSizeInChars 时,才会应用分块。我们支持以下五种分块类型:
-
SPLIT_BY_CHARACTER: 将尽可能多的字符放入每个区块中,其中每个区块长度不大于 maxSegmentSizeInChars。不关心空格,因此它可以截断单词。 -
SPLIT_BY_WORD: 将查找作为分块依据的空格字符。任何单词都不会被截断。 -
SPLIT_BY_SENTENCE: 使用带有英语语句模型的 Apache OpenNLP 库来检测语句边界。 -
SPLIT_BY_LINE: 将查找作为分块依据的换行字符。 -
SPLIT_BY_PARAGRAPH: 将查找作为分块依据的连续换行字符。
拆分策略会根据前面的顺序回退,其中较大的分块策略(例如 SPLIT_BY_PARAGRAPH)回退到 SPLIT_BY_CHARACTER。例如,在使用 SPLIT_BY_LINE 时,如果一行太长,则该行将按语句进行子分块,其中每个分块将尽可能多地放入语句。如果有任何语句太长,那么它将在单词层面上进行分块。如果一个单词太长,那么它将按字符拆分。
如何读取向量数据存储中的记录?
-
当
source.msk.data.type为STRING时-
original_data:Amazon MSK 消息中的完整原始字符串。
-
embedded_data:如果嵌入向量不为空(已应用分块),则从
chunk_data中创建该向量;如果未应用分块,则从original_data中创建该向量。 -
chunk_data:仅在对原始数据进行分块时才会出现。包含用于在
embedded_data中创建嵌入的原始消息块。
-
-
当
source.msk.data.type为JSON时-
original_data:应用 JSON 密钥筛选后来自 Amazon MSK 消息的完整原始 JSON。
-
embedded_data:如果嵌入向量不为空(已应用分块),则从
chunk_data中创建该向量;如果未应用分块,则从original_data中创建该向量。 -
chunk_key:仅在对原始数据进行分块时才会出现。包含
original_data中区块所属的 JSON 键。例如,在original_data的示例中,它可能看起来类似于嵌套键的jsonKey1.nestedJsonKeyA或元数据。 -
chunk_data:仅在对原始数据进行分块时才会出现。包含用于在
embedded_data中创建嵌入的原始消息块。
-
是,您可以使用此应用程序从多个 Amazon MSK 主题中读取数据。来自所有主题的数据均必须是相同的类型(STRING 或 JSON),否则可能会导致应用程序失败。所有主题的数据始终存储在单个 OpenSearch 索引中。
可在何处找到源代码的新更新?
转到 https://github.com/awslabs/real-time-vectorization-of-streaming-data/releases
是否可以更改 Amazon CloudFormation 模板并更新 Managed Service for Apache Flink 应用程序?
否,更改 Amazon CloudFormation 模板不会更新 Managed Service for Apache Flink 应用程序。Amazon CloudFormation 中的任何新更改都意味着需要部署新的堆栈。
Amazon 是否会代表我监控和维护应用程序?
否,Amazon 不会代表您监控、扩展、更新或修补此应用程序。
此应用程序是否会将我的数据移出我 Amazon Web Services 账户?
Managed Service for Apache Flink 应用程序读取和存储的所有数据都保留在您的 Amazon Web Services 账户 账户中,永远不会离开您的账户。