更新时间:2026-04-03 GMT+08:00
分享

搭建数据格式转换工作流

场景介绍

企业日常运营中经常需要处理CRM、ERP等系统导出的JSON或CSV格式业务数据。这类数据包含大量重复的计算和清洗工作(如汇总销售额、筛选有效订单、按区域分组统计等),大模型虽然擅长文本理解和表达,但不适合进行精确的数学计算和复杂的数据操作。

为弥补这一不足,可以在工作流中引入代码节点,利用其执行Python或Node.js代码的能力来处理数据结构化任务;同时配合大模型节点,将计算后的结果转化为通俗易懂的业务分析报告。

本文将演示如何结合代码节点与大模型节点,以销售部门需要将CRM导出的JSON数据转为可读的周报表格为例,构建一个用于数据格式转换与智能分析的工作流。

效果展示

当输入的原始JSON销售数据如下时,转换的销售周报如图1所示。

[
  {"client_name": "公司A", "amount": 580000, "product": "企业版套餐", "date": "2025-07-01", "sales_rep": "张三", "region": "华南", "status": "已签约"},
  {"client_name": "公司B", "amount": 320000, "product": "标准版套餐", "date": "2025-07-03", "sales_rep": "李四", "region": "华南", "status": "已签约"},
  {"client_name": "公司C", "amount": 750000, "product": "旗舰版套餐", "date": "2025-07-05", "sales_rep": "王五", "region": "华北", "status": "已签约"},
  {"client_name": "公司D", "amount": 210000, "product": "标准版套餐", "date": "2025-07-06", "sales_rep": "张三", "region": "华南", "status": "跟进中"},
  {"client_name": "公司E", "amount": 680000, "product": "企业版套餐", "date": "2025-07-08", "sales_rep": "赵六", "region": "华南", "status": "已签约"},
  {"client_name": "公司F", "amount": 450000, "product": "企业版套餐", "date": "2025-07-10", "sales_rep": "李四", "region": "华北", "status": "已签约"},
  {"client_name": "公司G", "amount": 180000, "product": "标准版套餐", "date": "2025-07-12", "sales_rep": "王五", "region": "华中", "status": "跟进中"}
]
图1 效果示例

工作流设计

重点介绍工作流中的一些主要节点,每个节点负责特定的任务。以下是各个节点的功能和设计思路。

  • 开始节点:作为工作流的入口,开始节点负责接收CRM导出的JSON销售数据。
  • 代码节点:通过Python代码解析JSON数据,计算各维度的汇总指标。
  • 大模型节点:基于代码节点输出的结构化指标数据,生成自然语言周报。
  • 结束节点:展示大模型生成的周报。
图2 数据格式转换工作流全景

操作步骤

搭建工作流详细步骤如下:

步骤一:创建工作流

  1. 单击左侧导航栏开发中心 > 智能体管理 ,单击左上角“工作流”页签,进入工作流应用管理界面,单击右上角“创建工作流”
  2. 选择创建“对话型工作流”,在对应的创建页面,配置工作流相关信息,具体如图1所示,参数如表1所示。

    图3 创建工作流
    表1 参数说明

    参数名称

    示例

    说明

    名称

    数据格式转换工作流

    支持中英文、数字、下划线、中划线和空格,长度 2-64 字符,但不允许以空格开头或结尾。

    描述

    将CRM导出的JSON数据转为可读的周报表格

    描述工作流的功能,可直观呈现给用户,长度0~1024个字符。

  3. 配置完成后单击“立即创建”,进入工作流编排页面。

步骤二:添加代码节点

单击开始节点和大模型节点中间的,添加代码节点,如图4所示。

图4 添加代码节点

添加完成后,如图5所示。

图5 数据格式转换工作流

步骤三:配置工作流节点

工作流各个核心节点的配置方式如下:

表2 节点配置说明

节点类型

说明

示例

开始节点

添加一个必选的输入参数,接收CRM导出的JSON销售数据。

  • 参数名称:raw_data
  • 参数类型:String
  • 描述:CRM导出的SON格式销售数据
  • 必填:勾选。

代码节点

此节点通过Python代码解析JSON数据,计算各维度的汇总指标。

  • 绑定函数:
    1. 单击“新建函数”,在弹出的对话框输入函数名称:demo,函数描述为“数据格式转换”,输入完成后单击“确定”。:
    2. 单击“编辑源码”,编辑如下代码:
      import json
      from collections import defaultdict
      def main(args: dict) -> dict:
          """
          运行代码节点会调用此函数,请勿对下面的函数名做修改
          :param args: 输入固定为args字典类型,kv为输入参数键值对
          :return: 输出参数为字典类型,kv为输出参数键值对
          """
          # 从args字典中获取原始数据字符串
          raw_data = args.get('raw_data', '')
          data = json.loads(raw_data)
          
          # ========== 1. 整体指标 ==========
          total_sales = sum(item['amount'] for item in data)
          deal_count = len(data)
          avg_deal = round(total_sales / deal_count, 2) if deal_count > 0 else 0
          
          signed_deals = [d for d in data if d['status'] == '已签约']
          signed_amount = sum(d['amount'] for d in signed_deals)
          pipeline_deals = [d for d in data if d['status'] == '跟进中']
          pipeline_amount = sum(d['amount'] for d in pipeline_deals)
          
          # ========== 2. Top 客户 ==========
          sorted_by_amount = sorted(data, key=lambda x: x['amount'], reverse=True)
          top3_clients = [
              {"name": d['client_name'], "amount": d['amount'], "product": d['product']}
              for d in sorted_by_amount[:3]
          ]
          
          # ========== 3. 按销售代表汇总 ==========
          rep_stats = defaultdict(lambda: {"count": 0, "total": 0})
          for d in data:
              rep = d['sales_rep']
              rep_stats[rep]["count"] += 1
              rep_stats[rep]["total"] += d['amount']
          
          rep_summary = [
              {"name": rep, "deal_count": stats["count"], "total_amount": stats["total"]}
              for rep, stats in rep_stats.items()
          ]
          rep_summary.sort(key=lambda x: x['total_amount'], reverse=True)
          
          # ========== 4. 按区域汇总 ==========
          region_stats = defaultdict(lambda: {"count": 0, "total": 0})
          for d in data:
              region = d['region']
              region_stats[region]["count"] += 1
              region_stats[region]["total"] += d['amount']
          
          region_summary = [
              {"region": region, "deal_count": stats["count"], "total_amount": stats["total"]}
              for region, stats in region_stats.items()
          ]
          region_summary.sort(key=lambda x: x['total_amount'], reverse=True)
          
          # ========== 5. 按产品汇总 ==========
          product_stats = defaultdict(lambda: {"count": 0, "total": 0})
          for d in data:
              product = d['product']
              product_stats[product]["count"] += 1
              product_stats[product]["total"] += d['amount']
          
          product_summary = [
              {"product": product, "deal_count": stats["count"], "total_amount": stats["total"]}
              for product, stats in product_stats.items()
          ]
          product_summary.sort(key=lambda x: x['total_amount'], reverse=True)
          
          # ========== 汇总输出 ==========
          result = {
              "overview": {
                  "total_sales": total_sales,
                  "deal_count": deal_count,
                  "avg_deal_size": avg_deal,
                  "signed_amount": signed_amount,
                  "signed_count": len(signed_deals),
                  "pipeline_amount": pipeline_amount,
                  "pipeline_count": len(pipeline_deals)
              },
              "top3_clients": top3_clients,
              "by_sales_rep": rep_summary,
              "by_region": region_summary,
              "by_product": product_summary
          }
          # 构造返回字典(严格遵循输出格式)
          ret = {
              "result": json.dumps(result, ensure_ascii=False)
          }
          return ret

  • 输入参数:

    raw_data:引用开始节点的raw_data。

  • 输出参数:

    参数名称:result

    参数类型:String

    描述:计算后的结构化指标(JSON字符串)

大模型节点

此节点基于代码节点输出的结构化指标数据,生成自然语言周报。

  • 模型配置:选择Kimi-K2模型。
  • 输入参数:
    • query,引用开始节点的query。
    • data,引用代码节点的result。
  • 提示词配置:
    • 系统提示词:定义一段系统提示词,如下所示。
      你是一名资深销售数据分析师,擅长将销售数据转化为清晰、专业的业务分析报告。
      
      报告需包含以下模块:
      1. 本周业绩概览(总销售额、成交笔数、平均客单价、已签约 vs 跟进中)
      2. Top 客户排名(表格展示前3大客户)
      3. 销售代表业绩(表格对比各销售代表的成交额和笔数)
      4. 区域业绩分布(表格展示各区域表现)
      5. 产品线分析(各产品套餐的销售占比)
      6. 业务建议(2~3条基于数据的可操作建议)
      数据如下:
      {{data}}
      
      报告要求:
      1. 语言专业但易懂,适合管理层快速阅读
      2. 关键数字使用加粗标注
      3. 使用表格呈现对比类数据
      4. 在报告末尾给出 2~3 条可操作的业务建议
      5. 金额统一使用万元为单位,保留两位小数
    • 用户提示词:引用当前的输入参数query,即引用用户的原始输入。
      {{query}}

结束节点

此节点用于展示大模型生成的周报。

  • 输入参数:result,引用大模型节点的raw_output。
  • 指定回复:
    {{result}}

步骤四:调试工作流

  1. 配置完成后,在工作流编排界面单击右上角,在试运行配置中的raw_data框中,输入CRM导出的JSON销售数据。如图6所示。配置完成后单击“开始运行”。

    输入JSON销售数据示例:
    [
      {"client_name": "公司A", "amount": 580000, "product": "企业版套餐", "date": "2025-07-01", "sales_rep": "张三", "region": "华南", "status": "已签约"},
      {"client_name": "公司B", "amount": 320000, "product": "标准版套餐", "date": "2025-07-03", "sales_rep": "李四", "region": "华南", "status": "已签约"},
      {"client_name": "公司C", "amount": 750000, "product": "旗舰版套餐", "date": "2025-07-05", "sales_rep": "王五", "region": "华北", "status": "已签约"},
      {"client_name": "公司D", "amount": 210000, "product": "标准版套餐", "date": "2025-07-06", "sales_rep": "张三", "region": "华南", "status": "跟进中"},
      {"client_name": "公司E", "amount": 680000, "product": "企业版套餐", "date": "2025-07-08", "sales_rep": "赵六", "region": "华南", "status": "已签约"},
      {"client_name": "公司F", "amount": 450000, "product": "企业版套餐", "date": "2025-07-10", "sales_rep": "李四", "region": "华北", "status": "已签约"},
      {"client_name": "公司G", "amount": 180000, "product": "标准版套餐", "date": "2025-07-12", "sales_rep": "王五", "region": "华中", "status": "跟进中"}
    ]
    图6 输入JSON销售数据

  2. 在“试运行”对话框中,输入“请转换”,效果如图7所示。

    图7 效果示例

步骤五:发布工作流

  1. 工作流试运行成功后,在工作流编排页面,单击右上角“提交版本”
  2. 输入版本号与版本描述,如图8所示。

    图8 发布工作流

  3. 发布完成后选择上方“渠道管理”页签,可进入渠道管理页面。

    网页分享渠道的操作列单击“发布”按钮后将出现“立即访问”“复制链接”“重新生成”文字按钮。这里可以通过两种方式访问工作流应用的网页应用链接,同时支持重新生成发布链接。
    图9 发布工作流
    • 立即访问:单击当前页面的“立即访问”按钮,可立即进入网页版应用。
      图10 立即访问网页应用
    • 复制链接:单击当前页面的“复制链接”按钮,可直接复制网页URL嵌入或分享到其他应用场景。
      图11 复制工作流应用访问地址
    • 重新生成:重新生成工作流应用发布链接。

相关文档