场景介绍

在数字化的大背景下,企业面临着海量数据处理和分析的挑战。传统的数据分析流程往往需要手动导入Excel、编写复杂公式、制作图表,不仅耗时费力,还容易出现人为错误。特别是面对多维度数据对比、利润率计算、月度账单波动分析等复杂任务时,传统方式的局限性更加明显。 随着智能化办公需求的增长,企业迫切需要一种能够自动化处理数据分析任务的解决方案,既要保证计算精度,又要提供直观的可视化展示。

业务需求

在实际推进中,企业对这类解决方案的期望非常明确。一方面,他们希望从手工处理中彻底解放出来,特别是在利润率、占比、同比环比等财务常规计算上,系统应该具备自动运算能力,不仅提升效率,更减少人为出错。另一方面,数据本身不能只是堆叠在表格里,而要通过图表、指标和趋势曲线清晰呈现,帮助使用者快速掌握业务脉络。财务、运营人员也希望系统具备一定的语义理解力,能看懂括号表示负值、自动识别币种符号等细节,避免格式混乱带来的误判。 在兼顾计算能力和可视化的同时,这个系统还要能处理多种数据格式,比如 Excel 或 CSV,最好还能嵌入现有的业务平台之中,减少切换成本。对于一些技术能力强的团队来说,他们还会关注底层是否支持代码执行,以满足定制化的数据处理逻辑。

解决方案

方案背景

GLM-4-AllTools 是专门为支持智能体和相关任务而进一步优化的模型版本。代码沙盒 Code Interpreter 工具很大程度加强 GLM-4-AllTools 模型的数据计算能力,处理日常的数据分析已经完全没有问题。

1、分析行业收入数据

这个案例中,我们想要对2024年上半年各行业企业统计数据做图表分析。

收入数据可视化

首先,根据各行业营收统计数据,绘制成可视化的图表。代码示例:
from zai import ZhipuAiClient

client = ZhipuAiClient(api_key="YOUR API KEY")  # 请填写您自己的APIKey

def test_alltools(prompt):
    response = client.chat.completions.create(
        model="glm-4-alltools",  # 填写需要调用的模型名称
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ],
        max_tokens=40000,
        stream=True,
        tools=[
            {
                "type": "code_interpreter"
            }
        ]
    )
    for chunk in response:
        print(chunk)

# 数据表头
title = "[煤炭开采和洗选业  石油和天然气开采业  黑色金属矿采选业   有色金属矿采选业   非金属矿采选业    开采专业及辅助性活动 其他采矿业  农副食品加工业    食品制造业  酒、饮料和精制茶制造业    烟草制品业  纺织业    纺织服装、服饰业   皮革、毛皮、羽毛及其制品和制鞋业   木材加工和木、竹、藤、棕、草制品业  家具制造业  造纸和纸制品业    印刷和记录媒介复制业 文教、工美、体育和娱乐用品制造业   石油、煤炭及其他燃料加工业  化学原料和化学制品制造业   医药制造业  化学纤维制造业    橡胶和塑料制品业   非金属矿物制品业   黑色金属冶炼和压延加工业   有色金属冶炼和压延加工业   金属制品业  通用设备制造业    专用设备制造业    汽车制造业  铁路、船舶、航空航天和其他运输设备制造业   电气机械和器材制造业 计算机、通信和其他电子设备制造业   仪器仪表制造业    其他制造业  废弃资源综合利用业  金属制品、机械和设备修理业  电力、热力生产和供应业    燃气生产和供应业   水的生产和供应业]"
# 各行业收入数据
data1 = "[15586.20  6157.20    2675.20    1739.50    1690.00    1260.40    9.40   24423.80   10441.30   8189.20    8019.70    11300.40   5681.60    3982.10    4132.50    3101.80    6992.10    3118.20    6401.30    29609.30   44340.10   12352.70   5709.90    14113.80   24307.40   39727.70   40792.70   22070.80   22757.80   17713.00   47672.20   6791.20    49705.40   73651.90   4698.90    995.80     5703.10    1059.40    47642.60   10086.60   2238.50 ]"
# 各行业利润数据
data2 = "[3168.60   2049.10    341.30     430.30     159.50     7.40   0.30   507.60     847.10     1597.40    1133.10    323.30     240.60     171.70     126.30     137.80     227.90     154.20     281.80     (159.90)   2041.10    1805.90    126.50     744.10     726.50     (3.10) 1454.60    722.50     1521.30    1242.20    2377.00    470.20     2582.20    2942.00    447.40     62.60  49.40  83.60  3304.50    442.70     221.70 ]"

userprompt = """
表头是各行业名:{0}
各行业收入数据:{1}
各行业利润数据:{2}
根据各行业的收入数据,绘制成可视化的图表。
""".format(title, data1, data2)

test_alltools(userprompt)
绘制图表如下: Description

利润数据可视化

同样的,我们也可以将行业利润数据绘制可视化图表,prompt修改为:
### 数据表头
title = "[煤炭开采和洗选业  石油和天然气开采业  黑色金属矿采选业   有色金属矿采选业   非金属矿采选业    开采专业及辅助性活动 其他采矿业  农副食品加工业    食品制造业  酒、饮料和精制茶制造业    烟草制品业  纺织业    纺织服装、服饰业   皮革、毛皮、羽毛及其制品和制鞋业   木材加工和木、竹、藤、棕、草制品业  家具制造业  造纸和纸制品业    印刷和记录媒介复制业 文教、工美、体育和娱乐用品制造业   石油、煤炭及其他燃料加工业  化学原料和化学制品制造业   医药制造业  化学纤维制造业    橡胶和塑料制品业   非金属矿物制品业   黑色金属冶炼和压延加工业   有色金属冶炼和压延加工业   金属制品业  通用设备制造业    专用设备制造业    汽车制造业  铁路、船舶、航空航天和其他运输设备制造业   电气机械和器材制造业 计算机、通信和其他电子设备制造业   仪器仪表制造业    其他制造业  废弃资源综合利用业  金属制品、机械和设备修理业  电力、热力生产和供应业    燃气生产和供应业   水的生产和供应业]"### 各行业收入数据
data1 = "[15586.20  6157.20    2675.20    1739.50    1690.00    1260.40    9.40   24423.80   10441.30   8189.20    8019.70    11300.40   5681.60    3982.10    4132.50    3101.80    6992.10    3118.20    6401.30    29609.30   44340.10   12352.70   5709.90    14113.80   24307.40   39727.70   40792.70   22070.80   22757.80   17713.00   47672.20   6791.20    49705.40   73651.90   4698.90    995.80     5703.10    1059.40    47642.60   10086.60   2238.50 ]"### 各行业利润数据
data2 = "[3168.60   2049.10    341.30     430.30     159.50     7.40   0.30   507.60     847.10     1597.40    1133.10    323.30     240.60     171.70     126.30     137.80     227.90     154.20     281.80     (159.90)   2041.10    1805.90    126.50     744.10     726.50     (3.10) 1454.60    722.50     1521.30    1242.20    2377.00    470.20     2582.20    2942.00    447.40     62.60  49.40  83.60  3304.50    442.70     221.70 ]"

userprompt = """
表头是各行业名:{0}
各行业收入数据:{1}
各行业利润数据:{2}

根据各行业的利润数据,绘制成可视化的图表。
""".format(title,data1,data2)
可以看到,财务数据的(数字)表示负利润,GLM-4-AllTools 无需额外指令,模型也能够准确理解:

计算利润率并排序

最后,我们让 GLM-4-Alltools 模型计算出各行业利润率,按照利润率从高到低生成图表。
### 数据表头
title = "[煤炭开采和洗选业  石油和天然气开采业  黑色金属矿采选业   有色金属矿采选业   非金属矿采选业    开采专业及辅助性活动 其他采矿业  农副食品加工业    食品制造业  酒、饮料和精制茶制造业    烟草制品业  纺织业    纺织服装、服饰业   皮革、毛皮、羽毛及其制品和制鞋业   木材加工和木、竹、藤、棕、草制品业  家具制造业  造纸和纸制品业    印刷和记录媒介复制业 文教、工美、体育和娱乐用品制造业   石油、煤炭及其他燃料加工业  化学原料和化学制品制造业   医药制造业  化学纤维制造业    橡胶和塑料制品业   非金属矿物制品业   黑色金属冶炼和压延加工业   有色金属冶炼和压延加工业   金属制品业  通用设备制造业    专用设备制造业    汽车制造业  铁路、船舶、航空航天和其他运输设备制造业   电气机械和器材制造业 计算机、通信和其他电子设备制造业   仪器仪表制造业    其他制造业  废弃资源综合利用业  金属制品、机械和设备修理业  电力、热力生产和供应业    燃气生产和供应业   水的生产和供应业]"### 各行业收入数据
data1 = "[15586.20  6157.20    2675.20    1739.50    1690.00    1260.40    9.40   24423.80   10441.30   8189.20    8019.70    11300.40   5681.60    3982.10    4132.50    3101.80    6992.10    3118.20    6401.30    29609.30   44340.10   12352.70   5709.90    14113.80   24307.40   39727.70   40792.70   22070.80   22757.80   17713.00   47672.20   6791.20    49705.40   73651.90   4698.90    995.80     5703.10    1059.40    47642.60   10086.60   2238.50 ]"### 各行业利润数据
data2 = "[3168.60   2049.10    341.30     430.30     159.50     7.40   0.30   507.60     847.10     1597.40    1133.10    323.30     240.60     171.70     126.30     137.80     227.90     154.20     281.80     (159.90)   2041.10    1805.90    126.50     744.10     726.50     (3.10) 1454.60    722.50     1521.30    1242.20    2377.00    470.20     2582.20    2942.00    447.40     62.60  49.40  83.60  3304.50    442.70     221.70 ]"

userprompt = """
表头是各行业名:{0}
各行业收入数据:{1}
各行业利润数据:{2}

根据收入和利润数据,计算出各行业利润率,按照利润率从高到低做成折线图。
""".format(title,data1,data2)
绘制图表如下,数据结果计算非常准确: Description

2、统计平台月度账单

BigModel 平台的账单数据一直都困扰着大家,可以尝试用 GLM-4-AllTools 来帮助我们统计。 下面的示例中,用我的7月和8月账单数据,如果想要统计你的平台账单,可以从平台的费用明细 导出月度明细数据。 注意删除明细数据中把自己的 API key 列,防止泄漏给别人!

上传账单给沙盒

首先需要用上传文件的API 把7月和8月的明细账单上传并得到 fileid。代码示例如下:
def test_upload_file():
    resp = client.files.create(file=open("/.../智谱AI开放平台费用明细2024-08_1725874453364.xlsx","rb"),
        purpose="code-interpreter")
        
    print(resp)
    return resp.id

统计7月账单数据

将两个文件的 fileid 提供给 GLM-4-AllTools 模型,让模型统计 7月的账单数据和用量。为了让模型更好的理解账单明细含义,我们可以将数据说明作为背景提供给模型参考。代码示例如下:
from zai import ZhipuAiClient

client = ZhipuAiClient(api_key="YOUR API KEY")  # 请填写您自己的APIKey

def test_alltools(prompt, fileids):
    response = client.chat.completions.create(
        model="glm-4-alltools",  # 填写需要调用的模型名称
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ],
        max_tokens=40000,
        stream=True,
        tools=[
            {
                "type": "code_interpreter",
                "code_interpreter": {
                    "file_ids": fileids
                }
            }
        ]
    )

    model_output = ""

    for chunk in response:
        print(chunk)
        if chunk.choices[0].delta.content is not None:
            if chunk.choices[0].delta.role == "assistant":
                mtmp = str(chunk.choices[0].delta.content)
                if mtmp is not None:
                    model_output = model_output + mtmp

    return model_output

introduce = """
    # 明细数据说明
    账单费用明细中尽可能提供了客户对账所需的数据字段。
    ## 账期和入账时间
    - **账期**:账期是自然日,指的是这一条明细属于哪一天的账单。
    - **入账时间**:入账时间是指这一条明细具体计费发生的时间,精确到时分秒。
    ## 产品类型
    平台目前有几种产品类型:模型推理、模型训练、私有实例,以及资源包。
    模型推理、模型训练、私有实例的产品名是按照模型区分的。
    ## 模型编码和模型产品名
    - **模型编码**:模型编码是对应模型推理API时调用的model code。
    - **模型产品名**:模型产品名是计费产品名,账单以模型产品名为准,包括了模型推理、训练、私有实例和资源包等各种类型。
    ## 付费类型
    - **预付费**:预付费是指用户需要先购买才能使用,比如资源包是预付费类型。
    - **后付费**:后付费是指用户先使用后再计费,比如模型推理、模型训练、私有实例是后付费类型。
    ## 单价和用量
    - **单价**:账单明细中的单价,是实际计费的价格,即折后价。
    - **用量**:用量为实际使用量,比如 Tokens、次数或者个数。
    ## 消费金额和应付金额
    - **消费金额**:消费金额是指需要结算的总金额。
    - **应付金额**:实际结算时可能由赠金抵扣部分后,实际的应付金额 = 消费金额 - 赠金抵扣金额。
    ## 已付款和待付款金额
    应付金额分为 已付款金额 和 待付款金额。
    - 如果账单已全部付款,则结算成功。
    - 如果没有足够的余额支付,则状态为 未结算,即出现欠费。
    ## 抵扣资源包
    如果实际使用量是通过资源包抵扣,则账单会展示抵扣包的信息和抵扣用量。
"""

userprompt = """   
上传的两个文件分别是智谱开放平台7月账单和8月账单明细数据

数据字段的说明可以参考:
{0}

根据7月账单明细数据,统计7月中每个产品的总消费金额和总用量。
""".format(introduce)

bill7 = "1726211483_83b320c819a84ed2aea0fb6b745ddbaa"  # 7月账单
bill8 = "1726211565_f53fbad8e3154e8cb14cd55fcf143f2f"  # 8月账单

print(test_alltools(userprompt, [bill7, bill8]))
看下模型的统计结果,再对比下Excel的统计,全部一致!
以下是按产品汇总的2024年7月的总消费金额和总用量:

| 模型产品名称 | 总消费金额 (元) | 总用量 |
|------------------|--------------|--------|
| CogVideoX30次体验包(1个月) | 9.90 | 1 |
| 【cogview-3】模型推理 | 0.00 | 2 |
| 【glm-3-turbo:472519605::bmzmpmff】私有实例 | 150.00 | 1 |
| 【glm-4-0520】模型推理 | 25.67870 | 264,281 |
| 【glm-4-alltools】模型推理 | 9.93430 | 103,897 |
| 【glm-4-flash】模型推理 | 0.017664 | 178,267 |
| 【glm-4v】模型推理 | 0.44300 | 10,610 |
| 【glm-4】模型推理 | 0.00000 | 196 |
| 【其他模型】模型推理 | 5.37500 | 1,240 |
| 开发者pro版权益套餐(月包) | 99.00000 | 1 |

请注意,上述表格中的数值已经四舍五入到了小数点后五位。如果需要原始精度的数据或有进一步的要求,请告知我。

统计8月账单数据

使用同样方式,我们统计了8月份的账单金额和用量:
以下是2024年8月份的产品使用情况总结:

| 产品名称                            | 总消费金额 (元) | 总用量 |
|-----------------------------------|--------------|------|
| 1000元GLM-4-0520通用模型推理资源包              | 0.000000     | 1    |
| 1000元GLM-4-Flash微调模型训练资源包            | 0.000000     | 1    |
| 200元GLM-4-Flash微调模型推理资源包             | 0.000000     | 1    |
| glm-4-flash模型训练                   | 0.003100     | 125  |
| 【cogvideox】模型推理                 | 0.000000     | 18   |
| 【cogview-3-plus】模型推理            | 0.120000     | 2    |
| 【cogview-3.5】模型推理               | 0.480000     | 8    |
| 【cogview-3】模型推理                 | 0.700000     | 7    |
| 【cogview】模型推理                   | 0.150000     | 1    |
| 【embedding-2】模型推理               | 0.089423     | 274997 |
| 【embedding-3】模型推理               | 0.000000     | 178765 |
| 【glm-4-0520】模型推理                | 81.804100    | 7394022 |
| 【glm-4-alltools】模型推理            | 0.000000     | 445957 |
| 【glm-4-assistant】模型推理           | 81.645200    | 816452 |
| 【glm-4-flash】模型推理               | 0.211896     | 2604994 |
| 【glm-4-long】模型推理                | 0.000000     | 240   |
| 【glm-4-plus】模型推理                | 0.000000     | 3340  |
| 【glm-4v-plus】模型推理               | 0.000000     | 65465 |
| 【glm-4v】模型推理                    | 0.000000     | 5908  |
| 【glm-4】模型推理                     | 0.000000     | 3316142 |
| 内测包                               | 0.010000     | 1    |
| 老客回馈资源包                        | 0.000000     | 1    |

请注意,某些产品的消费金额为0,这可能意味着这些服务在当月免费或使用了完全的资源包抵扣。

分析账单数据波动

最后我需要 GLM-4-AllTools 帮我对比两个月的账单,找出哪些产品消费数据显著增加或降低。prompt修改为:
userprompt = """   
上传的两个文件分别是智谱开放平台7月账单和8月账单明细数据

数据字段的说明可以参考:
{0}

根据账单数据,分别统计7月和8月每个产品的总消费金额和总用量。
然后进一步找出 8月比较7月账单中,消费金额或者用量有显著波动的产品数据。
列出波动产品的原因。
""".format(introduce)
由于任务复杂,模型推理花了会时间,最终为我找出来8月相对7月的波动产品,经过验证变化百分比准确!
以下是在对比7月份与8月份账单期间发现的消费金额或用量上有显著波动的产品:

| 模型产品名称                          | 消费金额变化百分比 | 用量变化百分比 |
|-------------------------------------|-------------------|--------------|
| CogVideoX30次体验包(1个月)            | -100.00%          | -100.00%     |
| glm-4-flash模型训练                   | ∞                 | ∞            |
| 【cogvideox】模型推理                  | ∞                 | ∞            |
| 【cogview-3-plus】模型推理              | ∞                 | ∞            |
| 【cogview-3.5】模型推理                | ∞                 | ∞            |
| 【cogview-3】模型推理                  | ∞                 | 250.00%      |
| 【embedding-2】模型推理                | ∞                 | ∞            |
| 【glm-3-turbo:472519605::bmzmpmff】私有实例 | -100.00%         | -100.00%     |
| 【glm-4-0520】模型推理                 | 218.57%           | 2697.79%     |
| 【glm-4-alltools】模型推理             | -100.00%         | 329.23%      |
| 【glm-4-assistant】模型推理            | ∞                 | ∞            |
| 【glm-4-flash】模型推理                | 1099.59%          | 1361.29%     |
| 【glm-4v】模型推理                     | -100.00%         | -43.17%      |
| 【开发者pro版权益套餐(月包)】           | -100.00%         | -100.00%     |

这些变动可能是由于多种原因造成的。例如:
- 由于季节性需求导致的用量增加。
- 新客户的加入或是现有客户的使用模式改变导致的新增用量。
- 市场活动推广导致某些服务的使用增加。

为了更准确地解释这些变化背后的确切原因,通常需要对市场动态、企业策略调整及外部经济因素等进行深入分析。需要注意的是,这里的“∞”表示从零开始的变化,所以显示为无限大,实际上应该理解为从无用到有的变化情况。

写在最后的 TIPS

代码沙盒 Code Interpreter 工具很大程度加强了模型的计算能力,可以看到 GLM-4-AllTools 处理日常的数据分析已经完全没有问题了! 但使用过程中仍然有些限制,在这里分享下:
  • GLM-4-AllTools模型建议在 user message 中增加指令要求,在 System 指令中容易和模型自身工具指令冲突。
  • 处理数据分析的任务,数据字段的描述务必准确,虽然模型自身会去理解,也具备在代码出错时反思的能力,但是会额外消耗tokens。
  • 尽量每个任务只做一种数据分析,比如案例中的两个月账单统计完成后,可以直接给 GLM-4-AllTools模型分析波动,而不用 COT 多步骤完成。
毕竟 AllTools模型中间使用工具过程的tokens都会计费,单价也比较贵,能省则省。

方案亮点

此方案最大的优势在于,它不是一个需要用户学习的工具,而是一个能适应用户语言、理解用户意图的“分析型助手”。用户不再需要掌握公式或写查询语句,只需要提出问题,系统就能基于原始数据完成计算和图表生成。这种自然交互方式,大幅降低了使用门槛,尤其适合业务团队直接使用。 更关键的是,它对财务语境的适配能力远超普通数据工具。它能准确识别诸如“括号表示负值”这类行业约定俗成的写法,避免错误解释带来的误导。在图表呈现方面,它不仅能自动选择合适的可视化方式,还支持格式自定义和模板套用,方便用于内部沟通和对外汇报。 此外,该助手具备强大的集成能力,能嵌入现有的BI系统或OA流程,无需另起一套工具体系,也不会打断现有工作方式。这种“无缝接入+深度理解”的组合,让它不仅是一款工具,更像是一位懂业务的团队成员,帮你做事,替你思考。