通过全面的定制可观察性解决方案来增强您的生成式 AI 应用 机器学习博客

强化您的生成性 AI 应用的全面定制可观察性解决方案

由 Ishan Singh、Chris Pecora、Mani Khanuja 和 Yanyan Zhang 于 2024 年 10 月 29 日发布在 Amazon Bedrock、人工智能、生成性 AI、中级 (200) 永久链接 评论 分享

关键要点

在本篇文章中,您将了解生成性 AI 应用中的可观察性和评估的重要性,学习解决方案的关键特性和好处,并通过逐步演示获得实施经验。本方案帮助用户快速实施定制的可观察性解决方案,提高透明度、控制力和持续改进的能力。

最近,我们见证了生成性 AI 应用的快速发展与演变,其中可观察性和评估成为开发者、数据科学家和利益相关者的关键因素。可观察性是指通过分析系统的输出、日志和指标来理解系统的内部状态和行为的能力,而评估则涉及对生成输出的质量和相关性进行评估,从而促进持续改进。

全面的可观察性和评估对于故障排除、识别瓶颈、优化应用程序以及提供相关和高质量的响应至关重要。可观察性使您能够主动监控和分析生成性 AI 应用,而评估帮助收集反馈、优化模型并提高输出质量。

在 Amazon Bedrock 的背景下,可观察性和评估的重要性更为突出。Amazon Bedrock 是一个完全托管的服务,通过单一 API 提供来自诸如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型FMs选择,结合构建生成性 AI 应用所需的广泛功能,确保安全性、隐私和负责任的 AI。随着应用的复杂性和规模不断增加,提供全面的可观察性和强大的评估机制对于维护高性能、质量和用户满意度至关重要。

我们构建了一个定制的可观察性解决方案,Amazon Bedrock 用户可以通过少量关键构建块和现有日志快速实施。该解决方案利用 FMs、Amazon Bedrock 知识库、Amazon Bedrock 管理措施和 Amazon Bedrock 代理 来捕获和记录元数据,如输入提示、输出结果、运行时间和自定义元数据,提供更强的安全性、易用性、灵活性,并与本地 AWS 服务集成。

值得注意的是,该解决方案支持全面的 检索增强生成 (RAG) 评估,您可以评估生成响应的质量和相关性,识别改进领域,并相应优化知识库或模型。

在本文中,我们将为 Amazon Bedrock 应用设置自定义可观察性和评估解决方案。通过代码示例和逐步指导,我们将演示如何将此解决方案无缝集成到您的 Amazon Bedrock 应用中,为您的生成性 AI 应用解锁新的可见性、控制和持续改进的能力。

本文的目标

在阅读完此文章后,您将了解生成性 AI 应用中可观察性和评估的重要性,掌握该解决方案的核心特性及优势,体验如何实施该解决方案,并探讨将可观察性和评估集成到您 Amazon Bedrock 工作流程中的最佳实践。

准备工作

要实施本文讨论的可观察性解决方案,您需具备以下前提条件:

一个有效的 Amazon Web Services (AWS) 账户和具有 Amazon Bedrock 访问权限的 AWS 身份与访问管理 (IAM) 角色对您计划使用的 FMs 的访问权限对您喜欢的编程语言Python 或 Nodejs中的 装饰器 具有基本了解克隆 amazonbedrocksamples GitHub 仓库对 AWS 服务如 Amazon Data Firehose、Amazon Athena 和 AWS Glue 的基本熟悉可选,视解决方案使用的具体组件而定

解决方案概述

Amazon Bedrock 的可观察性解决方案使用户能够使用源代码中的装饰器追踪和分析与 FMs、知识库、管理措施和代理的交互。该解决方案的主要特点包括:

飞跃加速器官网入口装饰器 装饰器应用于调用 Amazon Bedrock API 的函数,以捕获输入提示、输出结果、自定义元数据、自定义指标和延迟相关指标。灵活的日志记录 您可以使用此解决方案将日志存储在 Amazon 简单存储服务Amazon S3的本地或通过 Amazon Data Firehose 集成到现有监控基础设施中。此外,您可以选择记录哪些内容。动态数据分区 该解决方案可以根据应用程序的不同工作流或组件例如提示准备、数据预处理、反馈收集和推理动态分区可观察性数据。此功能使您能够将数据分离到逻辑分区中,从而更容易分析和处理后续数据。安全性 该解决方案使用 AWS 服务并遵循 AWS 云安全 的最佳实践,确保您的数据保持在 AWS 账户内。成本优化 本解决方案使用无服务器技术,使可观察性基础设施更具成本效益。但是,某些组件可能会产生额外的按使用付费费用。多语言支持 GitHub 仓库提供 Python 和 Nodejs 版本的可观察性解决方案,以适应不同的编程偏好。

以下是可观察性解决方案架构的高层概述:

解决方案工作原理如下:

使用 Amazon Bedrock 的应用程序代码用 @bedrocklogswatch 装饰以保存日志记录的数据通过 Amazon Data Firehose 传输AWS Lambda 转换数据并根据 calltype 变量应用动态分区Amazon S3 安全存储数据用于高级分析的可选组件AWS Glue 从 S3 数据创建表Amazon Athena 使得数据查询成为可能在您喜欢的仪表盘工具中可视化日志和洞察

该架构为您的 Amazon Bedrock 应用提供了全面的日志记录、高效的数据处理和强大的分析能力。

开始使用

为了帮助您开始使用可观察性解决方案,我们在附加的 GitHub 仓库 中提供了示例笔记本,涵盖了 Amazon Bedrock 的知识库、评估和代理。这些笔记本演示了如何将解决方案集成到您的 Amazon Bedrock 应用中,并展示了包括用户反馈或质量保证QA团队收集的各类用例和特性。

仓库包含详细文档的笔记本,涵盖以下主题:

设置可观察性基础设施将装饰器模式集成到您的应用程序代码中记录模型输入、输出和自定义元数据收集和分析反馈数据评估模型响应和知识库性能使用 AWS 服务对可观察性数据进行示例可视化

若要开始使用示例笔记本,请遵循以下步骤:

克隆 GitHub 仓库

bashgit clone https//githubcom/awssamples/amazonbedrocksamplesgit

转到可观察性解决方案目录

bashcd amazonbedrocksamples/evaluationobserve/CustomObservabilitySolution

按照 README 文件中的说明设置所需的 AWS 资源并配置解决方案

打开提供的 Jupyter 笔记本,并根据示例和演示进行操作

这些笔记本为您提供实践学习经验,并作为将我们的解决方案集成到生成性 AI 应用中的起点。您可以自由探索、修改并调整代码示例以满足特定需求。

关键特性

该解决方案提供了一系列强大的功能,以简化您在 Amazon Bedrock 上的生成性 AI 应用的可观察性与评估:

基于装饰器的实现 使用装饰器将可观察性记录无缝集成到您的应用程序功能中,捕获输入、输出和元数据,且无需修改核心逻辑选择性日志记录 通过选择性捕获函数输入、输出或排除敏感信息或不相关的大数据结构,选择要记录的内容逻辑数据分区 根据不同的工作流或应用程序组件在可观察性数据中创建逻辑分区,从而便于特定数据子集的分析和处理人机交互评估 收集并将人工反馈与特定模型响应或会话关联,促进您应用程序性能和输出质量的全面评估和持续改进多组件支持 支持对多种 Amazon Bedrock 组件的可观察性和评估,包括 InvokeModel、批量推理、知识库、代理和安全措施,为您的生成性 AI 应用提供统一解决方案全面评估 评估生成响应的质量和相关性,包括针对知识库应用的 RAG 评估,使用开源 RAGAS 库计算评估指标

这一简要清单突出了您可以利用的关键特性,从而获得洞察、优化性能并推动您在 Amazon Bedrock 上的生成性 AI 应用的持续改进。如需详细了解功能和实施细节,请参考 GitHub 仓库 中的详细文档。

实施和最佳实践

该解决方案旨在模块化和灵活,您可以根据特定需求进行自定义。尽管实施相对简单,但遵循最佳实践对于可观察性基础设施的可扩展性、安全性和可维护性至关重要。

解决方案部署

此解决方案包含 AWS CloudFormation 模板,简化了所需 AWS 资源的部署,提供了一致且可重复的环境配置。CloudFormation 模板会分配资源,如 Amazon Data Firehose 交付流、AWS Lambda 函数、Amazon S3 桶,以及 AWS Glue 爬虫和数据库。

装饰器模式

该解决方案使用装饰器模式将可观察性日志无缝集成到您的应用程序功能中。@bedrocklogswatch 装饰器包裹您的函数,自动将输入、输出和元数据日志记录到 Amazon Kinesis Firehose。以下是如何使用该装饰器的示例:

python

导入可观察性

from observability import BedrockLogs

在 Firehose 模式下实例化 BedrockLogs

bedrocklogs = BedrockLogs(deliverystreamname=yourfirehosedeliverystream feedbackvariables=True)

装饰您的函数

@bedrocklogswatch(captureinput=True captureoutput=True calltype=)def yourfunction(arg1 arg2) # 这里是您的函数代码以及所需的自定义指标 return output

人机交互评估

该解决方案支持人机交互评估,您可以将人工反馈纳入生成性 AI 应用的性能评估中。您可以在评估过程中携手最终用户、专家或 QA 团队,为提高输出质量和相关性提供宝贵的见解。以下是如何实施人机交互评估的示例:

python@bedrocklogswatch(calltype=RetrieveandGeneratewithKB)def main(inputarguments) # 与 Amazon Bedrock 知识库或代理交互的代码 return response custommetric etc

@bedrocklogswatch(calltype=observationfeedback)def observationlevelfeedback(feedback) pass

用用户输入调用主函数并获取 runid 和 observationid

tupleoffunctionoutputs runid observationid = main(inputarguments)

在应用程序中收集模型响应的人机反馈

userfeedback = thumbsup

observationfeedbackfromfrontend = { userid User1 frunid runid fobservationid observationid actualfeedback userfeedback}

使用 observationlevelfeedback 函数记录人机交互反馈

observationlevelfeedback(observationfeedbackfromfrontend)

借助生成的 runid 和 observationid,您可以将人工反馈与特定模型响应或会话关联。然后,可以分析该反馈并用以优化知识库、微调模型或识别改进领域。

最佳实践

推荐遵循以下最佳实践:

提前规划调用类型 根据不同工作流或应用程序组件确定可观察性数据的逻辑分区 (calltype),这有助于特定数据子集的分析和处理。使用反馈变量 初始化 BedrockLogs 时配置 feedbackvariables=True,以生成 runid 和 observationid。这些 ID 可用来将逻辑分区的数据集关联起来,将反馈数据与相应的模型响应结合。扩展到通用步骤 尽管此解决方案是为 Amazon Bedrock 设计的,但您可以使用装饰器模式记录通用步骤,例如提示准备、后处理或其他自定义工作流的可观察性数据。记录自定义指标 若需计算诸如延迟、上下文相关性、可靠性或其他自定义指标,您可以在装饰函数的响应中传递这些值,系统将与可观察性数据一并记录。选择性日志记录 利用 captureinput 与 captureoutput 参数来选择性地记录函数输入或输出,或排除敏感信息和不相关的大数据结构。全面评估 评估生成响应的质量和相关性,包括针对知识库应用的 RAG 评估,使用 KnowledgeBasesEvaluations。

通过遵循这些最佳实践并利用解决方案的特点,您可以为生成性 AI 应用设置全面的可观察性和评估,以获得有价值的洞察、识别改进领域,并提升整体用户体验。

清理

为避免产生费用并保持 AWS 账户的整洁,您可以通过删除为此演练创建的 AWS CloudFormation 堆栈来移除相关资源。请按照 在 AWS CloudFormation 控制台上删除堆栈 文档中的步骤删除为该解决方案创建的资源。

通过全面的定制可观察性解决方案来增强您的生成式 AI 应用 机器学习博客

结论与后续步骤

此全面解决方案使您能够无缝地将可观察性集成到您在 Amazon Bedrock 的生成性 AI 应用中。关键好处包括简化的集成、选择性日志记录、自定义元数据跟踪和全面的评估能力,包括 RAG 评估。使用 AWS 服务如 Athena 分析可观察性数据,驱动持续改进,并与喜爱的仪表盘工具连接以可视化数据。

本文聚焦于 Amazon Bedrock,但可以扩展到更广泛的机器学习操作MLOps工作流程或与其他 AWS 服务如 AWS Lambda 或 Amazon SageMaker集成。我们鼓励您探索此解决方案并将其集成到您的工作流程中。访问我们的 GitHub 仓库 开始您的集成之旅。借助可观察性的力量,解锁生成性 AI 应用的新高度。

关于作者

Ishan Singh 是亚马逊网络服务AWS的生成性 AI 数据科学家,致力于帮助客户构建创新且负责任的生成