Formula 1®(F1)作为高风险赛事,运营效率至关重要。赛事直播期间,F1信息技术工程师需迅速应对各类关键服务问题,如API网络性能下降,直接影响F1 TV等产品的直播、点播及实时数据监测服务。要确定这些问题的根本原因,并防止其再次发生,需要投入大量精力。鉴于F1赛事日程紧凑且存在变更冻结期,对关键问题进行优先级排序、测试至最终解决,整个过程可能长达三周之久,并需开发、运营、基础设施及网络等多团队协同调查。
F1赛事IT运营部门负责人Lee Wright指出:“Web API系统常出现响应迟缓、输出结果不一致的问题。为解决此问题,团队耗时约15个工作日,在多次活动中反复排查,包括查阅日志、检查异常情况并尝试修复。”面对挑战,F1视其为创新契机,与亚马逊云科技合作,利用Amazon Bedrock开发了一款生成式AI驱动的解决方案,旨在简化问题解决流程。
本文将介绍F1如何创建一款根本原因分析(RCA)助手,帮助运维工程师、软件开发者、网络工程师等用户快速定位问题根源、高效排除故障,并显著减少赛事期间及赛后处理重复性问题的人工操作。此外,提供GitHub代码库,内含这款RCA助手的对话式应用程序通用版本,供参考使用。
用户仅需通过自然语言提问,即可与这款对话式RCA助手互动。助手将在后台自动进行故障排查,分析事件发生的可能原因,并提供下一步操作建议。该助手与内外部系统相连,能够查询SQL数据库、Amazon CloudWatch日志及第三方工具等资源,实时监测系统健康状态。此解决方案不要求用户具备特定领域知识,适用于各学科和专业水平的工程师。
Wright进一步指出:“借助RCA助手,我们团队可在3天内确定问题根因并实施解决方案,包括比赛周末的部署和测试。该系统不仅大幅缩短了问题解决时间,还能准确地将问题分配至相应团队,使团队得以专注于开发提升赛事体验的新产品等高优先级任务。通过生成式AI,工程师可在5-10秒内获得查询回复,将初步排查时间从一天以上缩短至20分钟以内,端到端问题解决时间缩短了高达86%。”
RCA助手解决方案架构
F1与亚马逊云科技原型开发团队合作,开展了一项为期5周的项目,旨在验证该解决方案的可行性。该项目的主要任务是使用亚马逊云科技服务,复制并自动化两个候选系统的现有人工故障排除流程。团队基于实际案例,梳理现实问题,并据此绘制了如下所示的流程图,清晰展示了故障排除的流程、所涉及的团队和系统、必要的实时检查环节以及各场景所需的日志调查。以下是解决方案架构图。
为了高效处理日志数据,将原始日志集中存储在Amazon S3中,利用Amazon EventBridge每小时检查一次该存储桶中的新文件,并触发基于Amazon Glue和Apache Spark构建的日志转换提取、转换和加载(ETL)管道。将转换后的日志存放在另一个单独的Amazon S3存储桶中,并利用另一个Amazon EventBridge将转换后的日志输入至Amazon Bedrock知识库,该端到端管理的检索增强生成(RAG)工作流功能,可让聊天助手高效查询日志。
Amazon Bedrock Agents可促进与数据库和Amazon EC2实例等内部系统以及Jira和Datadog等外部系统的交互。Anthropic的Claude 3模型用于编排和生成高质量响应,确保聊天助手提供的信息准确且相关。最后,聊天应用程序部署托管在Amazon ECS上,实现了可扩展性和可靠性,可在不影响性能的情况下处理不同规模负载。
下文将进一步介绍该解决方案的核心组成部分:用于转换日志数据的ETL管道、Agentic RAG实现和聊天应用程序。
创建用于转换日志数据的ETL管道
在该生成式AI项目中,高质量数据是获得优质结果的关键。亚马逊云科技可帮助您逐步优化数据质量,从而让您能够充满信心开展创新。Amazon CloudWatch提供对整个系统性能的全面洞察,支持设置警报、自动应对变化,以及运营健康状况的统一视图。
在该解决方案中,Amazon Glue和Apache Spark负责处理日志和其他数据源的数据转换任务,以提高聊天机器人的准确性和成本效益,Amazon Glue还可帮助您大规模地发现、准备和集成数据。本项目中的日志数据转换流程只需简单三步即可完成,数据处理流程图如下所示。
1
数据标准化:模式、类型和格式
将数据格式统一有助于聊天助手更深入理解数据,从而提高输出准确性。为了使Amazon Bedrock知识库能够摄取并处理来自不同来源和格式(如结构、模式、列名、时间戳格式)的数据,首先需要对数据进行标准化处理。
2
数据过滤:剔除冗余数据
要进一步提高聊天助手的性能,减少需要扫描的数据量至关重要。一个简单的方法便是确定聊天助手无需使用的数据列,从而在将数据摄入知识库之前,在ETL流程就已经删除了大量不必要数据。并且由于用于转换和标记为向量数据库的数据减少了,所以这一方法也降低了嵌入过程中的成本。这些操作都有助于提高聊天助手的准确性、性能和成本效益,例如聊天助手并不需要某些HTTP请求的所有标头,而是需要主机和用户Agents信息。
3
数据聚合:缩减数据规模
用户只需了解问题发生的具体时间点(精确到分钟),因此将数据按分钟级进行聚合有助于缩减数据规模。例如,当每分钟有60个数据点记录API响应时间时,可将这些数据聚合为每分钟一个数据点,这种单个聚合事件包含了诸如完成请求所需的最长时间等属性,便于聊天助手判断响应时间是否过长,从而再次减少了分析问题所需的数据量。
使用Amazon Bedrock Agents和
Amazon Bedrock知识库构建RCA助手
Amazon Bedrock用于为RCA助手构建了基于Agents的Agentic RAG解决方案。Amazon Bedrock Agents可简化工作流程,自动执行重复性任务,并且利用基础模型(FM)的推理能力,将用户任务分解为多个步骤。依据用户指令,Agents创建编排计划,然后通过调用公司API和使用RAG访问知识库来执行该计划,从而为终端用户提供最终响应。
知识库对RAG框架至关重要,它通过查询业务数据源并添加相关上下文,来回答用户问题。Amazon Bedrock Agents还允许与内外部系统进行交互,例如查询数据库状态以检查其健康状况、通过Datadog查询实时应用程序监控情况、创建Jira单据以供未来分析和调查。之所以选择Anthropic的Claude 3 Sonnet模型,是因为其能提供全面丰富的答案,并能理解各种问题。例如可以正确理解用户输入的日期格式,如“2024-05-10”或“2024年5月10日”。
Amazon Bedrock Agents与Amazon Bedrock知识库集成,为终端用户提供了统一的前端界面。RCA Agents会综合考虑可用的工具和知识库,然后智能自主地创建执行计划。Agents从知识库接收文档以及从工具API获取响应后,会将这些信息整合并输入至LLM,然后生成最终响应,这一编排流程如下图所示。
系统安全性
通过Amazon Bedrock,您可以完全控制用于为RCA等生成式AI应用定制基础模型的数据,数据在传输和存储过程中都会经过加密。基于身份的策略为您的数据提供了进一步保障,帮助您管理角色对资源的访问权限及操作条件。
为评估RCA的系统健康状况,Agents会执行一系列检查,包括调用Amazon Boto3 API(例如使用boto3_client.describe_security_groups,判断IP地址是否有权访问系统)、执行数据库SQL查询(例如使用SQL:sys.dm_os_schedulers,来查询CPU、内存或用户锁等数据库系统指标)。
为保护这些系统免受潜在的幻觉攻击甚至提示注入攻击,不允许Agents随时创建自有数据库查询或系统健康检查。取而代之的是,根据最小权限原则(PoLP)实施一系列受控的SQL查询和API检查。同时这一层级还会验证输入和输出架构,确保这一环节同样处于受控状态,详细信息请参阅Powertools文档。要了解有关保护应用程序的更多信息,请参阅ArXiv论文《从提示注入到SQL注入攻击》,以下代码为示例。
Powertools文档:
https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/bedrock_agents/#required-resources
《从提示注入到SQL注入攻击》:
https://arxiv.org/abs/2308.01990
"""
- Health Checks: one explicit function per Health Check, to avoid potential LLM hallucinations or risky syntax errors.
- DB is KMS-encrypted and behind private subnets. Connection uses Least-Privileges and Secrets Manager
- Schema is protected using OpenAPI, via AWS Lambda Powertools BedrockAgentResolver
"""
from typing import List, Annotated
from helpers import run_sql_query, check_ec2_port_access
from aws_lambda_powertools.event_handler.bedrock_agent import BedrockAgentResolver
from aws_lambda_powertools.event_handler.openapi.params import Query, Body
from aws_lambda_powertools import Metrics, Tracer, Logger
from aws_lambda_powertools.metrics import MetricUnit
# Initialize Agents, Metrics, Loggers and Tracers
app = BedrockAgentResolver()
metrics = Metrics(namespace="rca-stack-api-logs", service="HealthChecks")
tracer = Tracer()
logger = Logger(level='INFO')
左右滑动查看完整示意
前端应用:聊天助手UI界面
聊天助手UI界面是使用基于Python的Streamlit框架而开发的,该框架提供了简单而强大的应用程序小部件。在Streamlit应用程序中,用户可以通过提供或替换Agents ID和别名ID,即可无缝测试其Amazon Bedrock Agents迭代版本。聊天助手会显示完整的对话历史,用户只需点击“清除”,便可一键重置对话。
LLM应用程序的回复包括两部分:左侧是根据用户问题生成的最终中立回复,右侧是LLM Agents编排计划和执行的轨迹。为保持回复简洁明了,默认情况下该轨迹为隐藏状态,当然用户可以查看和检查该轨迹,以确保LLM聊天机器人调用了正确的工具并检索了正确的文档。
以下GitHub代码库提供了RCA助手的对话式应用程序通用版本,您可以尝试使用该解决方案,并根据具体用例对其进行修改。
GitHub代码库:
https://github.com/yhou-uk/streamlit-app-for-amazon-bedrock/tree/main
下图演示的场景涉及用户无法连接到F1数据库的问题。用户可以使用聊天助手,检查他们正在使用的数据库驱动程序版本是否受服务器支持。此外,用户还可以通过提供Amazon EC2实例ID和所在的亚马逊云科技区域,来验证Amazon EC2实例的网络连接性,这些检查通过Agents可访问的API工具执行。此外,用户还可以通过检查系统日志来排除网站访问问题。
下图演示中,用户提供了错误代码和日期,聊天助手会从Amazon Bedrock知识库中检索相关日志,回答用户问题,并为后续分析提供信息。
现在,技术工程师可以使用自然语言查询和调查系统错误与问题。该系统与Jira等现有的事件管理工具集成,以便无缝沟通和创建工单。大多数情况下,即使存在多个问题,聊天助手也能迅速确定问题根因,并提供修复建议。必要情况下,特别是一些复杂棘手的问题会自动路由至F1工程团队进行调查,从而使工程师能够更合理地优先安排和处理其工作任务。
总结
本文介绍了F1与亚马逊云科技如何携手开发一款由Amazon Bedrock驱动的RCA助手,将比赛期间反复出现的运营问题解决时间从数周缩短至数分钟,大幅减少了人工工作量。
借助这款RCA助手,F1团队得以将更多时间投入到创新和服务优化,为赛事粉丝和合作伙伴提供卓越体验。
F1与亚马逊云科技此次的成功合作,充分展示了生成式AI在助力团队以更少时间达成更多成果的革命性潜力。
本篇作者
Carlos Contreras
亚马逊云科技高级大数据和生成式AI架构师。Carlos专注于为客户设计和开发可扩展的原型,以解决其最复杂的业务挑战,并利用分布式数据处理技术执行RAG和Agents解决方案。
Hin Yee Liu
亚马逊云科技高级原型开发合作经理。她致力于帮助亚马逊云科技客户实现其伟大构想,并加速采用新兴技术。Hin Yee与客户利益相关者密切合作,运用敏捷方法,发掘、塑造并交付生成式AI、人工智能与机器学习、大数据和Serverless技术等极具影响力的用例。
Olga Miloserdova
亚马逊云科技创新主管。她致力于为各行业的高层领导团队提供支持,助力其利用亚马逊云科技客户至上的“逆向工作法”开展创新举措。
Ying Hou
亚马逊云科技高级生成式AI原型架构师。她与客户合作构建前沿生成式AI应用程序,尤其擅长构建RAG和Agents解决方案。她的专业知识涵盖生成式AI、自动语音识别(ASR)、计算机视觉、自然语言处理(NLP)和时间序列预测模型。
星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!
点击阅读原文查看博客!获得更详细内容!