新闻中心
首页 / Our News /亚马逊 Bedrock 知识库现已支持元数据过滤,以提高检索准确性 机器学习博客亚马逊 Bedrock 知识库现已支持元数据过滤,以提高检索准确性 机器学习博客
Amazon Bedrock知识库现已支持元数据过滤,提升检索精度
重点总结
在AWS reInvent 2023大会上,我们宣布了Amazon Bedrock知识库的全面可用性。最近推出的元数据过滤功能允许用户基于文档的元数据进行检索,以提升检索结果的相关性。这意味着更好的上下文支持,将帮助生成更高质量的响应。
魔方加速器永久vip在2023年AWS reInvent大会上,我们宣布了Amazon Bedrock知识库的正式发布。使用Amazon Bedrock知识库,您可以安全地将基础模型FMs与您的企业数据连接,借助完全托管的检索增强生成RAG模型。
对于基于RAG的应用来说,FMs生成的响应准确性依赖于模型提供的上下文。上下文是根据用户查询从向量存储中检索的。在最近推出的Amazon Bedrock知识库功能混合搜索,您可以结合语义搜索与关键词搜索。然而,许多情况下,您可能需要检索在特定时间段内创建的文档或被特定类别标记的文档。通过基于文档元数据过滤搜索结果,您可以提升检索精度,从而获得更符合您需求的FM生成。
在本文中,我们讨论Amazon Bedrock知识库中的新自定义元数据过滤功能,使用此功能可以通过对向量存储中的检索进行预过滤来改善搜索结果。
元数据过滤概述
在推出元数据过滤之前,所有语义相关的内容块根据预设的最大值都会被返回给FM作为生成响应的上下文。现在,通过元数据过滤,您不仅可以检索到语义相关的块,还可以根据应用的元数据过滤器和关联值获取一组明确定义的相关块。
使用此功能,您现在可以为知识库中的每个文档提供自定义元数据文件每个最大10KB。您可以对检索结果应用过滤器,指示向量存储根据文档元数据预过滤,然后搜索相关文档。这样,您可以控制所检索的文档,尤其是在查询模糊的情况下。例如,您可以使用具有相似术语的法律文档为不同上下文提供支持,或者处理在不同年份发行的情节相似的电影。此外,通过减少搜索的块数量,您可以提高性能,例如减少CPU周期和查询向量存储的成本,同时提高准确性。
使用元数据过滤功能时,您需要提供与源数据文件同名且后缀为metadatajson的元数据文件。元数据可以是字符串、数字或布尔值。以下是元数据文件内容的示例:
json{ metadataAttributes { tag project EVE year 2016 team ninjas }}
Amazon Bedrock知识库的元数据过滤功能目前在美国东部弗吉尼亚北部和美国西部俄勒冈AWS区域可用。

以下是元数据过滤的一些常见用例:
软件公司的文档聊天机器人 该功能允许用户查找产品信息和故障排除指南。例如,可以基于操作系统或应用版本进行过滤,以避免检索到过时或不相关的文档。组织应用的对话式搜索 该功能允许用户在文档、甘特图、会议录音记录及其他资产中进行搜索。通过对工作组、业务单位或项目ID应用元数据过滤器,您可以个性化聊天体验,改善协作。例如,可以问:“项目Sphinx的状态和风险是什么”,用户可以过滤特定项目或来源类型如电子邮件或会议文档的文档。软件开发人员的智能搜索 该功能允许开发人员查找特定版本的信息。基于版本、文档类型如代码、API参考或问题的过滤能够帮助准确获取相关文档。解决方案概述
在接下来的部分中,我们将演示如何准备数据集来用作知识库,然后使用元数据过滤进行查询。您可以通过AWS管理控制台或SDK进行查询。
为Amazon Bedrock知识库准备数据集
本文使用一个关于虚构视频游戏的示例数据集来说明如何使用Amazon Bedrock知识库进行元数据的摄取和检索。如果您希望在自己的AWS账户中执行此操作,可以下载该文件。
如果您要向现有知识库的文档中添加元数据,请创建符合预期文件名和架构的元数据文件,然后跳转到与知识库同步数据的步骤,以开始增量摄取。
在我们的示例数据集中,每个游戏的文档都是一个单独的CSV文件例如,s3//bucketname/videogame/gameidcsv,包含以下列:
title description genres year publisher score
每个游戏的元数据文件以后缀metadatajson结尾例如,s3//bucketname/videogame/gameidcsvmetadatajson,其架构为:
json{ metadataAttributes { id number genres string year number publisher string score number }}
创建Amazon Bedrock知识库
有关创建新知识库的说明,请参见创建知识库。在本例中,我们使用以下设置:
在“设置数据源”页面,选择“无分块”,因为您已在前一步对文档进行了预处理。在“嵌入模型”部分,选择“Titan G1嵌入 文本”。在“向量数据库”部分,选择“快速创建新向量存储”。元数据过滤功能适用于所有支持的向量存储。与知识库同步数据集
创建知识库后,如果您的数据文件和元数据文件位于Amazon Simple Storage ServiceAmazon S3存储桶中,您可以开始增量摄取。有关说明,请参见同步以摄取数据源到知识库。
在Amazon Bedrock控制台上使用元数据过滤进行查询
要在Amazon Bedrock控制台上使用元数据过滤选项,请完成以下步骤:
在Amazon Bedrock控制台上,选择导航窗格中的“知识库”。选择您创建的知识库。选择“测试知识库”。选择“配置”图标,然后展开“过滤器”。输入格式为:键 = 值的条件例如,genres = Strategy,然后按“Enter”。要更改键、值或操作符,选择条件。 按照剩余条件继续例如,genres = Strategy AND year gt= 2023 ORrating gt= 9。 完成后,在消息框中输入查询,然后选择“运行”。在本次文章中,我们输入的查询是“2023年后发布的策略游戏,画面效果酷炫”。
使用SDK进行元数据过滤查询
使用SDK之前,先创建Amazon Bedrock Agents运行时的客户端:
pythonimport boto3
bedrockagentruntime = boto3client( servicename=bedrockagentruntime)
然后构建过滤器以下是一些示例:
python
genres = Strategy
singlefilter = { equals { key genres value Strategy }}
genres = Strategy AND year gt= 2023
onegroupfilter = { andAll [ { equals { key genres value Strategy } } { GreaterThanOrEquals { key year value 2023 } } ]}
(genres = Strategy AND year gt=2023) OR score gt= 9
twogroupfilter = { orAll [ { andAll [ { equals { key genres value Strategy } } { GreaterThanOrEquals { key year value 2023 } } ] } { GreaterThanOrEquals { key score value 9 } } ]}
将过滤器传递到检索API或RetrieveAndGenerate API的retrievalConfiguration中:
pythonretrievalConfiguration = { vectorSearchConfiguration { filter metadatafilter }}
以下表格列出了一些响应以及不同的元数据过滤条件:
查询元数据过滤检索到的文档观察“2023年后发布的策略游戏,画面效果酷炫”关闭 Viking Saga The Sea Raider year2023 genres Strategy Medieval Castle Siege and Conquest year2022 genres Strategy Fantasy Kingdoms Chronicles of Eldoria year2023 genres Strategy Cybernetic Revolution Rise of the Machines year2022 genres Strategy Steampunk Chronicles Clockwork Empires year2021 genres CityBuilding2/5 游戏满足条件genres = Strategy 和 year gt= 2023开启 Viking Saga The Sea Raider year2023 genres Strategy Fantasy Kingdoms Chronicles of Eldoria year2023 genres Strategy2/2 游戏满足条件genres = Strategy 和 year gt= 2023除了自定义元数据外,您也可以使用S3前缀进行过滤这是一种内置元数据,因此无需提供任何元数据文件。例如,如果您根据发行商将游戏文档组织到前缀中例如,s3//bucketname/videogame/publisher/gameidcsv,您可以使用以下语法通过特定的发行商进行过滤例如,neotokyogames:
pythonpublisherfilter = { startsWith { key xamzbedrockkbsourceuri value s3//bucketname/videogame/neotokyogames/ }}
清理
要清理资源,请完成以下步骤:
删除知识库:在Amazon Bedrock控制台上,选择导航窗格中的“知识库”。选择您创建的知识库。注意在“知识库概览”部分中的AWS身份和访问管理IAM服务角色名称。在“向量数据库”部分,注意收集ARN。选择“删除”,然后输入“delete”以确认。删除向量数据库:在Amazon OpenSearch Service控制台上,选择导航窗格中的“集合”。在搜索栏中输入您保存的集合ARN。选择该集合并选择“删除”。在确认提示中输入“confirm”,然后选择“删除”。删除IAM服务角色:在IAM控制台上,选择导航窗格中的“角色”。搜索之前记录的角色名称。选择角色并选择“删除”。在确认提示中输入角色名称并删除该角色。删除示例数据集:在Amazon S3控制台上,导航到您使用的S3存储桶。选择前缀和文件,然后选择“删除”。在确认提示中输入“permanently delete”以进行删除。结论
在本文中,我们介绍了Amazon Bedrock知识库中的元数据过滤功能。您了解了如何向文档添加自定义元数据,并在使用Amazon Bedrock控制台和SDK检索和查询文档时使用它们作为过滤器。这有助于提高上下文的准确性,使查询响应更具相关性,同时降低查询向量数据库的成本。
有关其他资源,请参阅以下链接:
用户指南:Amazon Bedrock知识库YouTube视频:使用RAG提升生成AI应用的响应GitHub代码示例:Amazon Bedrock知识库 构建RAG工作流的示例作者介绍
Corvus Lee 是一位驻伦敦的资深GenAI实验室解决方案架构师。他热衷于设计和开发能够利用生成AI解决客户问题的原型,并在现实场景中应用最新的生成AI和检索技术。
Ahmed Ewis 是AWS GenAI Labs的资深解决方案架构师,帮助客户构建生成AI原型来解决商业问题。在不与客户合作时,他喜欢与孩子们玩耍和做饭。
Chris Pecora 是亚马逊网络服务的生成AI数据科学家。他热衷于构建创新产品和解决方案,同时专注于以客户为中心的科学。在不进行实验和跟进生成AI的最新发展时,他喜欢和孩子们一起度过时光。
加载评论
搜索
最新内容
集中化还是分散化? 云企业战略博客
迁移到AWS Cloud WAN多区域检查使用服务插入 网络与内容交付
生成式 AI 问答评估的真实情况策展与指标解读最佳实践 机器学习博客
支持加拿大的 CCCS PBHVA 覆盖合规性与 AWS 的着陆区加速器 安全博客