从数据到决策:AI驱动的QA指标框架之旅(第02部分)

1 天前   出处: medium.com  作/译者:Amr Salem/空山新雨

很高兴再次见到我的QA朋友们!如果您一直关注我,您就会知道,在我的上一篇文章中,我们探索了构建基于Excel的简单QA指标表的旅程,并将其演变成一个更具扩展性的自动化框架来评估质量。现在,这是第二部分,我们将继续深入研究该主题的核心部分:即如何将我们的QA指标框架转变为AI(人工智能)驱动的自动化QA指标框架。

这篇文章完全专注于我们如何将AI集成到QA指标框架中,同时改变我们解释和处理QA数据的方式。通过整合AI 来构建深层次的洞察力和更准确的决策力,我们借此逐步介绍我们已经实施的框架。

Agenda

在本博客的议程中,我们将特别关注以下内容:

  • AI集成和成熟的方法

  • 建立和集成OpenAI的AI助手

    • 设置AI助手并定义指令提示
    • 使用矢量存储作为上下文的数据源
    • 集成OpenAI客户端
    • 在HTML报告里面附加AI生成的响应
    • 最终报告概述

AI集成

在上一篇博客中,我们经历了构建QA指标框架的所有阶段,这使我们能够自动生成QA指标报告,增加了更多有重大价值的能力和功能。这消除了所有的人工操作,并提供了一个可扩展的解决方案。
然而,截至目前,指标主要集中在问题类型的计数上。现在,我们需要超越数据本身来实现决策指导,这可以通过将报告进行高层次的转化来实现。终极目标是提供更深入的数据解释、摘要和可行动列表来帮助指导决策。

方法

一个可行的常规方法是使用ChatGPT:我们可以把错误根本原因及QA指标中生成的所有信息输入到ChatGPT中,从而获得所需的解释和反馈。当然,这也可以通过openai客户端库的OpenAI API来完成。
然而,可能面临的一个挑战是,ChatGPT在提供解释时仅仅使用给定的信息,而不是完全了解数据的上下文,也没有考虑任何必要的历史或背景信息。不幸的是,这并不完全是我们想要的。

你可以假设这样一个场景:一个班有10名学生在所有的考试中都不及格。如果随便问一位老师他们为什么不及格,
老师就会根据一般事实给出一些理由,例如:“这些学生不及格是因为他们学的知识太少”,“他们经常不上课”或“他们的老师不够好。”然而,如果我们提供了每个学生更多的背景信息,我们可能就会得到更准确的解释。例如,一些学生可能在一年中的大部分时间里都病得很重,或者有一个学生过去一直在为体育比赛做准备。有了这些根本原因信息,整个解释将发生变化,并引导我们进行更深入地理解。这样就引入了第二种方法。

第二种方法是在提交数据作为提示之前,为数据提供特定的信息和上下文,以便 AI可以提供更准确、更可靠的响应。AI助手可以实现这一点,AI 助手功能可以通过用户界面和OpenAI API来访问。AI助手之所以与众不同的一个最大原因是,您能提供清晰具体的指令,还可以为AI提供矢量存储形式的数据源,通过这些您就可以扩展它的知识和调整模型配置的能力,如Top P(核采样)、温度(用来控制随机性)以及响应格式。

创建并集成openAI的 AI助手

  • 创建AI助手和指令提示。 现在我们需要创建一个AI助手,这可以通过用户界面轻松完成。

    • 提示:为了定义一个 AI 助手,我们需要在主任务界面定义名称、清晰简洁的指令以及它应该遵循的结构和角色,如下所示。
      此外,我们需要指定响应的形式。在我们的案例中,响应将以HTML格式生成,因此我们可以轻松地将其集成到我们的HTML报告中,而无需任何编码或CSS实现。

      使用软件开发质量指标和错误根源分析JSON,使用我们“QA战略和QA指标”文档中的见解,并从矢量存储访问信息,以确保上下文感知决策与标准和实践一致。制作如下所述的HTML报告:

      • 报告结构
        标题:“质量指标分析”
        简介:从QA文档和JSON数据中总结关键指标和根本原因。
        趋势分析:分析关键指标的月度趋势(如果有的话)。讨论积极或消极的趋势。根据历史数据预测未来趋势。
      • 团队观察

        • 突出每个团队的性能指标和挑战,包括特定于上下文的因素,如生产环境的测试、遗留代码和第三方集成。
        • 参考QA战略文档和矢量存储数据,以进行上下文感知解释。
      • 改进建议和回顾主题

        • 根据每个团队的独特上下文和背景,提供量身定制的改进建议。
        • 为下一次回顾会议提出带有可执行见解的主题。
      • 结论:总结关键发现及其对未来项目的潜在影响。

      • HTML格式要求:结构使用

        ,标题使用

        ,部分标题使用

        。左对齐所有文本。专注于见解,而不是原始数据。排除日期,避免完整的数据集复制。

      • 附加说明

        • 包括对所有团队的分析,同时强调那些没有预发布环境和处理老旧系统的团队。
        • 确保分析为QA工程师提供可操作的见解。
        • 访问和利用矢量存储信息来做出上下文一致的决策。
        • 响应应仅为HTML。
      • 目标受众:QA工程师通过做出上下文感知、可操作的决策来增强QA流程。
  • 矢量存储: 为了给每个团队提供背景信息,我们可以通过上传相关文档来为每个团队提供概述和上下文,包括他们的技术栈、挑战和限制。所有这些数据都可以上传到矢量存储,然后再链接到人工智能助手,为其提供更详细的信息,以提高其响应的准确性。
    在创建 AI助手时会生成一个助手ID。使用此ID和OPENAI_API_KEY,我们就能通过OpenAI客户端与我们的AI助手进行通信。

  • Openai Client: 现在我们可以添加一个新的组件到QA Metrics框架,这个组件负责处理与AI助手的通信。简单来说,我们先使用OpenAI API密钥初始化客户端,然后使用获得的ID创建一个新线程,就可以发送消息了。

    最后重要的一点,我们触发了运行,获取了消息内容,并返回了对应的值。
    此外,请注意,由于我们使用的是流媒体方法,您需要正确处理所需的事件。

import os
from colorama import Fore
from openai import OpenAI
from openai.lib.streaming import AssistantEventHandler

class EventHandler(AssistantEventHandler):
    def on_text_created(self, text) -> None:
        pass
    def on_text_delta(self, delta, snapshot):
        pass
    def on_tool_call_created(self, tool_call):
        pass
    def on_tool_call_delta(self, delta, snapshot):
        passdef submit_message(user_message, override_id=None):
        qa_metrics_assistant_id = "asst_qxxxx"
        client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
        thread = client.beta.threads.create()
        client.beta.threads.messages.create(thread_id=thread.id, role="user", content=user_message)
        event_handler = EventHandler()
        with client.beta.threads.runs.stream(
            thread_id=thread.id,
            assistant_id=qa_metrics_assistant_id,
            event_handler=event_handler,
        ) as stream:
            print(f"{Fore.YELLOW}Please wait, generating AI summary report...\n")
            stream.until_done()
        message_obj = event_handler.get_final_messages()[0]
        html = message_obj.content[0].text.value
        return html

    def analyze_data_with_gpt(json_data, override_id=None):
        try:
            response = submit_message(user_message=f"{json_data}", override_id=override_id)
        if response:
            return response
        else:
            return "No response was returned by the model."
        except Exception as e:
            return f"An error occurred: {e}"
  • 将人工智能的响应附加到Html: 可以在共享同一知识库的同时创建具有不同任务的多个AI助手。
    就本文而言,我使用了两个AI助手:一个用于QA指标数据解释,另一个用于错误根本原因分析。
    所有数据都作为user_message通过JSON格式发送。然后,我们就可以扩展我们的报告功能,以包括AI助手的输出(ai_report,clustered_bugs_summary),并将其解析到HTML模板中。
def save_df_to_html(metrics_table_df, root_cause_df, clustered_bugs_df, clustered_bugs_summary, 
ai_report,qa_metrics_trends, file_path):
    with open(f"{BASE_DIR}/templates/repo_temp.html", 'r') as file:
        report_template = file.read()
    svg_data = generate_charts(metrics_table_df, qa_metrics_trends)
    html_table = metrics_table_df.to_html(index=False, classes='table table-striped')
    root_cause = root_cause_df.to_html(index=False, classes='table table-striped')
    clustered_bugs = clustered_bugs_df.to_html(index=False, classes='table table-striped')

    filled_html = report_template.format(
        selected_role=os.getenv("SELECTED_ROLE"),
        date=day_date,
        svg_base64=svg_base64,
        metrics_table=html_table,
        root_cause=root_cause,
        clustered_bugs=clustered_bugs,
        report_summary_html=ai_report,
        clustered_bugs_summary=clustered_bugs_summary,
        total_bugs_env_svg=svg_data['total_bugs_env'],
        defect_detection_percentage_svg=svg_data['defect_detection_percentage'],
        avg_defect_density_svg=svg_data['avg_defect_density'],
        qa_metrics_trends_svg=svg_data['qa_metrics_trends_svg']
    )
    with open(f"{BASE_DIR}{file_path}", "w") as f:
        f.write(filled_html)
  • 最终报告概述: 缺陷的根本原因和缺陷聚类分析如下所示,其中列出了所有团队。

    此外,还包括了QA指标概述、趋势分析、团队观察以及改进建议和回顾主题。

  • 结论: 最后,您可以看到QA指标框架的最终报告,其中利用了 AI 的能力来启发团队获得深层次的见解和解释。例如,开发经理可以大概了解导致问题的可能原因,并评估我们在质量方面的水平。PO或PM还可以识别需要提前确定优先次序以及提前做计划的关键主题。QA可以发现流程中的弱点,并了解他们的重点应该放在哪里。

到目前为止,利用结合了AI力量的自动QA指标框架带来了更好的结果,使我们能够以上下文方式解释指标,也使我们能够识别被忽视的差距。然而,虽然我们拥有了这些能力,但我们仍然应该要认识到人际沟通的重要性——接触人们,询问他们的痛点,收集他们的反馈、想法和改进建议。

希望你享受我的本次旅程!


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
/23 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章