ByteNoteByteNote
Agentic Coding 实战一:从零做销售数据看板
字

字节笔记本

2026年10月6日 · 约 15 分钟读完

Agentic Coding 实战一:从零做销售数据看板

API中转
¥120

本文是 Agentic Coding 实战系列的第一篇。这一篇带你从零做一个真实可用的销售数据看板:这是 Anthropic 报告里反复提到的「专家杠杆」经典场景,懂业务的人加上 Agent,把重复劳动变成自动化。全程跟着步骤走,你不需要懂一行代码,两小时后会得到一个能给老板看的网页看板。

Agentic Coding 实战一全流程:从规格到看板

一、项目背景:把每周两小时的 Excel 工作变成自动化

以一位会计的日常为例。她每周一都要花两小时做同一套动作:从 ERP 导出本周销售 Excel,手工剔除退款,按客户汇总,做趋势图,排出 Top 10 客户,最后写进 PPT 发给老板。

目标是做一个网页看板,周一早上打开就能看到所有数据。

这位会计的价值在哪里?在于她懂业务:

  • 哪些订单是退款,要剔除
  • 毛利率该用什么口径
  • 老板想看 Top 几个客户
  • 哪些数字异常要预警

这些知识,Agent 永远不会自己知道。懂业务的人加上 Agent,每周省 2 小时,一年就是 104 小时。这种投入一次、长期回报的自动化,正是普通人用 Agent 最划算的切入点。

二、第一步:写项目规格(RFC)

动工前先按 RFC 框架把规格写清楚:R 是角色与背景,F 是功能,C 是验收标准。

markdown
# 销售看板项目规格

## R - 角色 / 背景
我是公司会计。每周要从 ERP 导出的销售 Excel 里,
做一份给老板的看板。希望做成网页,每周一早上自动生成。

## F - 功能
读取 sales.csv(ERP 导出格式),生成网页看板:

数据清洗规则(我的专业!):
- amount 为负的行是退款,单独统计但不算入销售
- 客户名为空视为散户,归到「未分类」
- date 列要解析成日期
- product 列去前后空格

展示内容:
1. 4 个 KPI 卡片:总销售额 / 有效订单数 / 客单价 / 毛利率
2. 销售趋势:按周汇总的折线图
3. Top 10 客户表格(按销售额降序)
4. 异常预警:环比下降超过 20% 的客户标红

界面:
- 单页 HTML,能本地打开
- 简洁商务风(蓝灰主色)
- 手机也能看

## C - 验收标准
- 给定 sales.csv 跑一遍,生成 dashboard.html
- 用真实数据核对:总销售额要等于 Excel 里 SUMIF(amount>0),
  Top 1 客户要对得上,毛利率要符合行业 25%-35% 的常识

把这份规格保存为项目里的 SPEC.md。规格写得越具体,Agent 的产出越接近你要的东西;其中的清洗规则和验收标准,恰恰全部来自你的业务知识。

三、第二步:任务分解

把项目拆成三个模块(L2),再拆成可以独立验证的小任务(L3):

markdown
# 销售看板 - 任务分解

## L2 模块
1. 数据层:读 CSV + 清洗
2. 计算层:KPI + Top 客户 + 趋势
3. 展示层:生成 HTML 看板

## L3 任务清单(节选)
- 1.1 写 load_data():读 sales.csv
- 1.2 写 clean_data():清洗规则
- 1.3 写测试验证清洗结果
- 2.1 写 calc_kpis():4 个 KPI
- 2.2 写 top_customers():Top 10
- 2.3 写 weekly_trend():周趋势
- 2.4 写 detect_anomalies():异常预警
- 3.1 生成基础 HTML 框架
- 3.2 渲染 KPI 卡片
- 3.3 嵌入折线图(Chart.js)
- 3.4 渲染客户表格 + 红色预警

## MVP(最小可用版)
完成 1.1 + 1.2 + 2.1 + 3.1 + 3.2 就能跑起来。

先做 MVP,让看板尽快跑起来,再逐个补齐异常检测等增强功能。

四、第三步:环境与项目初始化

bash
mkdir sales-dashboard
cd sales-dashboard
git init

启动 Agent,输入:

text
在当前目录建一个 Python 项目,结构如下:
- data/            放 CSV 数据
- src/             放源代码
- tests/           放测试
- output/          放生成的 HTML
- SPEC.md          项目规格
- .gitignore       忽略规则
- requirements.txt 依赖清单

先创建好这些目录和空文件,再写一份示例 sales.csv 放 data/ 里
(10 行假数据,含中文客户名、有退款行、有空字段)。

Agent 会创建出上述结构,并生成类似这样的示例数据:

csv
date,customer,product,amount,cost
2026-06-01,北京科技有限公司,服务A,15000,9000
2026-06-02,上海贸易,产品B,8000,5600
2026-06-03,,产品A,3000,1800
2026-06-04,深圳科技,服务A,22000,13000
2026-06-05,北京科技有限公司,产品B,-5000,-3000

注意有一行金额是负数(退款),有一行客户名为空,这正是后面要清洗的对象。初始化完成后做第一次存档:

bash
git add .
git commit -m "项目初始化:目录结构 + 示例数据"

五、第四步:实现数据层,用业务常识验证

新开一个会话,让 Agent 全新开始,然后下达任务:

text
任务:实现数据层(SPEC.md 里的模块 1)

请实现 src/data_loader.py,包含两个函数:
1. load_data(file_path):用 pandas 读 CSV,date 列解析为日期,
   amount 列转 float
2. clean_data(df):amount 大于 0 为有效订单,小于 0 为退款;
   customer 为空的填「未分类」,返回有效订单、退款单和散单数量

并写 tests/test_data_loader.py,至少 5 个测试用例:正常数据、
含退款、含空客户名、缺失 amount 字段、空文件。跑通测试后告诉我。

Agent 会写出类似这样的代码,大致扫一眼即可:

python
# src/data_loader.py
import pandas as pd

def load_data(file_path):
    df = pd.read_csv(file_path, encoding='utf-8-sig')
    df['date'] = pd.to_datetime(df['date'], errors='coerce')
    df['amount'] = df['amount'].astype(float)
    return df

def clean_data(df):
    valid = df[df['amount'] > 0].copy()
    refunds = df[df['amount'] < 0].copy()
    valid['customer'] = valid['customer'].fillna('未分类').str.strip()
    unknown = (valid['customer'] == '未分类').sum()
    return {'valid': valid, 'refunds': refunds,
            'unknown_customer_count': unknown}

先跑测试确认全绿:

bash
python -m pytest tests/ -v

更关键的是业务验证,这是你的专业价值所在。让 Agent 用真实数据跑一遍,报告有效订单数、退款数、散单数和总金额,然后自己心算核对:这周大概 50 单有效,退款一般 3 到 5 单,总销售应该在 50 万上下。如果 Agent 报告「有效 50 单、退款 4 单、总销售 48 万」,业务验证通过。验证完立刻存档:git commit。

六、第五步:实现计算层,重点验证毛利率

同样新开会话,实现计算层 src/calculator.py,包含四个函数:

  • calc_kpis:总销售额、有效订单数、客单价、毛利率
  • top_customers:按客户聚合销售额,降序取前 10
  • weekly_trend:按周聚合的日期与销售额
  • detect_anomalies:找出本周销售额环比下降超过 20% 的客户

同样配上测试:正常 KPI 计算、Top 客户排序是否正确、周趋势数据点数量、异常检测能否识别下降的客户。

这里的业务验证重点是毛利率。让 Agent 用真实数据跑 calc_kpis:报告 27%,对照行业常识(成本率通常 65% 到 75%,毛利 25% 到 35%),落在合理区间。如果 Agent 报出 85% 的毛利率,必有 bug,一眼就能看出来。验证通过后 commit。

七、第六步:实现展示层,生成看板

最后一个模块是展示层:

text
任务:实现展示层(SPEC.md 里的模块 3)

请实现 src/render.py,生成 output/dashboard.html:
1. 单页 HTML,所有 CSS/JS 内联,不依赖外部文件
2. 用 Chart.js(CDN 引入)画折线图
3. 顶部 4 个 KPI 卡片并排,中间销售趋势折线图,下方 Top 10 客户表格
4. 主色 #2563eb,背景 #f8fafc,文字 #1e293b
5. 异常客户在表格里整行标红(背景 #fef2f2)
6. 响应式,手机也能看

入口 main.py 调用所有模块,生成最终 dashboard.html。
写完跑 python main.py,确认文件生成成功。

python main.py 之后用浏览器打开 output/dashboard.html,做最终的业务核对:

  1. 总销售额对得上 Excel 里的 SUMIF
  2. Top 1 客户对得上
  3. 毛利率 27% 落在合理区间
  4. 退款没有算进销售
  5. 异常客户确实是那几个在下降的

全部通过后 commit。

数据流水线与最终产出:CSV 进,看板出

最终项目结构长这样:

text
sales-dashboard/
├── data/sales.csv
├── src/
│   ├── data_loader.py
│   ├── calculator.py
│   └── render.py
├── tests/
│   ├── test_data_loader.py
│   └── test_calculator.py
├── output/dashboard.html
├── main.py
├── SPEC.md
├── CLAUDE.md
├── requirements.txt
└── .gitignore

main.py 把三个模块串起来:读数据、清洗、计算、渲染,最后打印总销售额和毛利率。看不懂代码没关系,重要的是知道:跑这个脚本,看板就出来了。

八、加分项:让它每周一自动跑

看板做完后,还能让它每周一自动更新,这同样交给 Agent:

  • Mac 上用 cron:crontab -e 加一行 0 8 * * 1 cd /path/to/sales-dashboard && python main.py,每周一早上 8 点自动生成
  • Windows 上用任务计划程序:让 Agent 写一个 .bat 脚本,再加进任务计划
  • 进阶:在 main.py 末尾加发邮件功能,生成看板后把 dashboard.html 作为附件发出,SMTP 配置从 .env 读取,收件人可以填 boss@example.com 这类占位地址,实际部署时换成你自己的

九、常见坑与排错

  • 中文显示成方框:CSV 编码问题,让 Agent 改用 utf-8-sig 编码读取
  • 图表不显示:Chart.js 没加载成功,检查 CDN 链接,国内访问慢可以换 staticfile 的镜像地址
  • 金额算错:最常见的原因是没处理退款,检查 clean_data 是否正确过滤
  • 日期解析失败:CSV 里日期格式不一致,让 Agent 用 errors='coerce' 解析并丢掉解析失败的行

十、延伸玩法

基础版跑通后,每个小改进都是一个 L3 任务:多月份对比、销售目标与实际的差距、产品维度分析(哪个产品最好卖)、按销售员看的部门维度分析、毛利低于 20% 自动预警。一周加一个,慢慢迭代。这就是 Agentic Coding 的精髓:不用一次性做完,每个小改进都能立刻用上。

想更进一步,可以把项目改造成 Streamlit 应用,让用户上传 CSV、在线生成看板,免费部署到 Streamlit Cloud。这只需要一句提示词,Agent 会写出 app.py 并告诉你部署步骤。

小结

  1. 实战流程:规格,分解,逐步执行加验证加 commit。
  2. 业务知识是验证的核心:毛利率的合理区间、退款的处理口径,Agent 自己推不出来。
  3. 每完成一个 L3 任务立刻 commit,建立安全岛。
  4. MVP 先跑通,再加优化;真实数据验证胜过任何测试。

本文案例为基于真实会计与运营场景改编的教学案例。参考:Chart.js、pandas。

相关文章

分享: