Enable javascript in your browser for better experience. Need to know to enable it? Go here.

如何使用ChatGPT进行根因分析

在文章别总是向ChatGPT提问,试试让它向我们提问中,我们探讨了如何引导ChatGPT以提问的形式与我们互动。本文将这一思路应用于根因分析,采用了先进的GPT-4模型。输入本文设计的提示后,ChatGPT会首先明确问题,然后利用5 Whys方法追溯至根本原因,并为之提供相应的解决方案。

 

根据用户在根因分析上的能力水平,ChatGPT可以提供对应的协助:

 

  1. 初学者:ChatGPT可以充当教练,指导用户完成整个分析流程,帮助他们全面掌握问题。

     

  2. 熟练者:ChatGPT可以充当助手,提出更多有价值的问题,更深层次的挖掘根本原因。

     

  3. 精通者:ChatGPT可提供初步分析结果,让用户在此基础上继续优化分析方法和提高效率。

 

这篇文章建立在一个前提上:ChatGPT不仅能给出优质答案,还能提出有价值的问题。若此前提成立,则利用ChatGPT进行根因分析将为我们带来更多的思考和价值。

 

什么是根因分析?

 

根因分析(Root Cause Analysis, RCA) 是一种结构化的问题解决方法,旨在深入挖掘问题的根本原因并加以解决,而非仅关注问题的表面现象。它总结了一系列方法论,这些方法论之间的主要区别在于寻找根本原因的技巧。

 

根因分析的主要方法有以下几种,它们分别具有不同的应用场景和优点:

 

  1. 5 Whys 方法:是一种通过反复问“为什么”来逐步深入问题根本原因的方法。这个方法简单易用,适用于快速定位问题的根本原因,尤其在问题相对简单和直接的情况下效果更佳。

     

  2. 鱼骨图 (Ishikawa Diagram):也被称为因果图,是一种通过头脑风暴从人员、机器、原料、方法、环境和测量(6M)这六个方面分析根本原因的方法。鱼骨图有助于跨部门的合作与沟通,通过梳理各个方面的因素,有助于全面深入地分析问题。

     

  3. 失效模式与影响分析(FMEA):这是一种系统性的方法,用于评估潜在失效模式及其对系统性能的影响。FMEA通过评估失效的严重性、发生概率和检测能力,来确定失效模式的优先级。FMEA广泛应用于产品设计、制程改进和可靠性工程领域,有助于降低风险和提高产品质量。

     

  4. 故障树分析(FTA):这是一种系统性的方法,用于分析复杂系统中潜在的故障原因。FTA通过构建故障树来表示故障的逻辑关系,并识别出可能导致系统失效的关键事件。FTA主要应用于安全关键领域,如核工业、航空、化工等行业,通过识别和管理关键风险因素,提高系统的安全性能。

 

本文使用5 Whys方法来设计ChatGPT的提示。

 

 

为什么要进行根因分析?

 

识别问题的根本原因

 

根因分析可以帮助我们发现问题的根本原因,找到持久的解决方案,以防止问题的再次发生并减少浪费。例如,在处理内存溢出问题时,不能仅靠增加内存来解决,必须找到内存增长的根本原因,才能彻底解决问题。

 

确定正确的因果关系

 

根因分析有助于我们找到真正的因果关系。例如,一个孩子在玩积木时遇到困难,突然说“我不玩了”,并将积木扔在一边。如果不进行根因分析,我们可能会简单地认为孩子不喜欢这个积木。但通过根因分析,我们发现孩子其实是因为得不到帮助而放弃了。

 

促进有效决策

 

根因分析可以帮助我们进行更好地决策。例如,如果我们想让客户采用持续部署,首先要解决一个问题:“我无法说服客户采用持续部署”。在没有进行根因分析的情况下,我们可能会一厢情愿地从自己的角度来说服客户。通过根因分析,我们可以了解客户是否适合持续部署,以及持续部署能为客户带来哪些好处,从而决定采取哪种策略来说服客户。

 

如何进行根因分析?

 

根因分析通常包括以下步骤:

 

  1. 定义问题:明确要解决的问题,确保问题的描述清晰、准确。

     

  2. 收集数据:收集与问题相关的所有信息,包括事件发生的时间、地点、人员、过程等。

     

  3. 分析问题:运用根因分析方法,深入挖掘问题的根本原因。这可能涉及多个原因,需要辨别主次、关联性。

     

  4. 确定解决方案:基于分析结果,制定针对性的解决方案,确保解决方案能够消除问题的根本原因。

     

  5. 实施改进:执行解决方案,监控改进效果,并根据需要进行调整。

 

根因分析有哪些挑战?

 

  1. 识别根本原因:根本原因没有统一的判断标准,很大程度上依赖参与人员的经验和主观判断。例如,对于发烧,普通人认为根本原因可能是感冒,医生则认为根本原因可能是细菌感染,甲流,新冠等。

     

  2. 识别正确的因果关系:因果关系可能出现错误,需要进行反向验证以确定正确的因果关系。例如:“为什么你在结婚纪念日没送老婆礼物?因为她没有要礼物”。进行反向验证后这个因果关系可能是不成立的,“因为你老婆没有要礼物,所以你不用在结婚纪念日送礼物”。如果按照这个因果关系分析下去,解决方案可能是“老婆要记得向老公要礼物”,这可能会引发一个悲剧。

     

  3. 聚焦于流程和能力,而不是人:当存在人为错误时,容易将问题指向追究责任,而不是聚焦在解决问题上,导致根因分析的效果受到影响。例如:“配置修改错误导致线上事故”,我们应该聚焦于如何通过修改流程,提高人员能力等来避免问题再次发生,而不是追究责任,要求大家修改配置时加倍仔细检查。

     

为什么要用ChatGPT进行根因分析?

 

使用ChatGPT进行根因分析可以更好的应对上述挑战:

 

  1. 便于识别根本原因:相较于普通根因分析,它既可以在组织大家讨论之前快速的进行多次预演,使用Self-Consistency技巧不断加深对问题的理解,识别更深层次的原因。也可以在讨论之后对讨论结果进行多次复盘模拟,验证因果关系,发现新的根本原因。

     

  2. 便于验证因果关系:它可以在分析完成后帮我们整理逻辑树,便于我们对因果关系进行验证。

     

  3. 便于将分析过程聚焦在流程和能力:我们可以随时对它的提问进行约束,以控制其提问的方向。

 

如何使用ChatGPT进行根因分析?

 

角色

 

这里使用了Role Prompting来让ChatGPT作为一个根因分析专家进行思考。

As a root cause analysis expert, your task is to follow the following activity diagram to help me define the problem, collect data, find the root cause, and suggest actions.

指令


这里使用Instruction Prompting定义了ChatGPT和用户的交互流程。为了简洁,我们使用的是 PlantUML,它是可以被ChatGPT理解的。

可以看到,在流程图中我们多次使用了下面的循环,以便让ChatGPT主动进行提问,这样我们就不需要主动问“你还有更多问题吗?”。

示例

 

为了让ChatGPT更好的理解上述指令,我们使用Few Shot PromptingChain of Thought Prompting为ChatGPT提供了一个和用户进行交互的示例。

点击链接查看完整示例

 

多语言

 

为了支持多种语言,我们让ChatGPT在检测到非英文时,用对应的语言与用户进行交互。

If you identify that the problem is composed in a non-English language, kindly utilize the same language for our subsequent communication.

确认

 

为了确认ChatGPT理解了指令,我们可以让它输出它所理解的交互流程。

If you understand and agree with the above instructions, describe your understanding step by step, then I will provide a problem for you to analyze.

完整提示

点击链接查看完整提示

 

GPT-3.5

 

GPT-3.5无法完全按照我们的指令和示例进行根因分析。它难以持续追问和确认分析结果。我们可以将根因分析分解为两个独立的部分: 问题定义根因分析。在问题定义清楚后,再用优化后的问题进行根因分析。我已经为这两个任务在Poe上创建了机器人ProblemDefiner5WhysQuestioner.

例子

 

误删代码

 

我们要分析的问题是:我们在解决冲突时误删了一行关键代码。

 

这是ChatGPT在英文语境下对整个分析过程的总结,详细信息请查看解决误删代码问题的英文对话记录

这是ChatGPT在中文语境下对整个分析过程的总结,详细信息请查看解决误删代码问题的中文对话记录

无法使用Trunk-Based Development

 

我们要分析的问题是:我们的分支管理策略无法从GitHub Flow切换到Trunk-Based Development。

 

这是ChatGPT在英文语境下对整个分析过程的总结,详细信息请查看解决无法使用Trunk-Based Development问题的英文对话记录

这是ChatGPT在中文语境下对整个分析过程的总结,详细信息请查看解决无法使用Trunk-Based Development问题的中文对话记录

总结

 

ChatGPT的提问有时缺少深度。虽然ChatGPT可以多次问出“为什么?”,但结束条件完全依赖于ChatGPT自己对根本原因的理解。有的时候它能够问出更深层次的问题,例如在误删代码的问题中问出“为什么没有自动化测试?”,有的时候则无法问出深层次的问题,例如没有继续追问“为什么Pull Request的代码改动量很大?”。针对这个问题我们既可以在ChatGPT等待我们确认时给予反馈,也可以就同一个问题进行多次分析,综合考虑ChatGPT的提问。

 

英文语境比中文语境更有可能发现深层次的问题,一个可观察的指标就是ChatGPT提问的次数会增多。

 

ChatGPT的逻辑性更强,但发散度不够,这就需要我们在回答问题时提供尽可能多的信息,以便ChatGPT能够提出更多的问题,从而引发我们更深层次的思考。

 

总体来说ChatGPT在帮助我们进行深度思考和分析方面是可以发挥很大作用的,我们需要在提升回答质量,优化交互流程,优化根本原因识别原则等方面做更多的尝试,以便ChatGPT能够稳定地提出更有深度的问题。

 

免责声明:本文内容仅表明作者本人观点,并不代表Thoughtworks的立场

及时了解最新的洞见