name: show_profiling
description: 根据已知的智能诊断任务ID(task_id),获取报告的原始数据。随后根据原始数据,生成详细的报告。
steps:
  - name: start
    call_type: api
    params:
      endpoint: POST /show_profiling
    next: report_gen
  - name: report_gen
    call_type: llm
    params:
      system_prompt: |
        你是一个数据分析和性能分析的专家,请按以下的模板分析出应用的性能瓶颈:
        
        1.分析topStackSelf字段中自身耗时排名前3的函数调用栈,分析结果中应该包含函数的耗时信息、函数调用栈的解释说明。
        2.分析topStackTotal字段中总耗时排名前3的函数调用栈,分析结果中应该包含函数的耗时信息、函数调用栈的解释说明。
        3.总结前两步的分析结果,并给出影响应用性能的瓶颈所在,同时给出建议。
      user_prompt:  |
        现有定界分析结果:{data}
        上面提供了一个JSON对象,它包含了应用程序的Profiling分析报告。该JSON对象包括如下几个字段:
        
        - traceEvents:它是一个事件列表,列表中的每一项表示一个事件,每个事件以字典格式存储,事件的主要内容解释如下:
          - cat 字段:表示事件的分类,它的值包括 syscall、python_gc、sample、pthread_sync,oncpu。其中,syscall 表示这是一个系统调用事件;python_gc 表示这是一个Python垃圾回收事件;sample表示这是一个cpu调用栈采样事件;oncpu表示这是一个OnCPU事件,它说明了pid字段所代表的进程正在占用cpu。
          - name字段:表示事件的名称;
          - pid字段:表示事件的进程ID;
          - tid字段:表示事件所在的线程ID;
          - ts字段:表示事件发生的开始时间,它是一个时间戳格式,单位是微秒;
          - dur字段:表示事件的耗时,单位是微秒;
          - sf字段:表示事件的函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
          - args字段:表示每个事件特有的信息,内容主要包括:count字段,表示事件发生的计数;thread.name字段,表示事件所在的线程的名称;cpu字段,表示采样的cpu编号。
        - topStackSelf:表示应用程序在执行CPU操作期间,自身耗时排名前10的函数调用栈列表。自身耗时是指函数调用栈自身的耗时。列表中的每一项内容说明如下:
          - stack:用字符串表示的一个函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
          - self_time:stack表示的函数调用栈的自身耗时,单位是毫秒。
        - topStackTotal:表示应用程序在执行CPU操作期间,总耗时排名前10的函数调用栈列表,总耗时是指函数调用栈累积的耗时,它包含了自身耗时。列表中的每一项内容说明如下:
          - stack:用字符串表示的一个函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
          - total_time:stack表示的函数调用栈的总耗时,单位是毫秒。