让 AI 写个小脚本,把店里的订单按商品汇总,看上去只要几行代码。可一遇到缺字段或特殊数字,程序可能整份中断,或者在最后算错。我们用本机 Qwen 写了一个 CSV 汇总脚本,再用边界数据检查它;原稿两个问题都能复现,修正后自检通过。已有 Ollama 和模型时,不需要云端 API 或按次付费。
准备好样例和模型
这次用 Python 3.11、Ollama 0.35.1 和 Qwen3.8-27B。Python 自带 csv 和 decimal,不用额外安装库。Qwen 模型需要先下载;官方 Ollama 模型页列出 27B 版本约 18GB,运行也需要较多内存。电脑不够用时,选一个本机能运行的模型,先在小样本上验证。
| 准备项 | 本次环境 |
|---|---|
| 电脑 | M1 Max、64GB 内存 |
| 软件 | Python 3.11、Ollama 0.35.1 |
| 费用 | 本机推理不按请求计费;需要下载模型并占用电脑资源 |
| 时间 | 已安装模型后约 20 分钟;首次下载另计 |
从终端确认模型可用:
ollama list
如果列表里还没有 Qwen3.8,可以按 Ollama 安装教程的步骤安装并下载。这个例子使用的任务提示词在练习包里;想看模型原稿,可以直接打开初版 Python 脚本。
先用正常数据,再故意给它难题
让模型写代码时,把输入列名、价格规则、遇到坏数据怎么办、输出方式都说清楚。只说“帮我统计销售额”,AI 只能替你猜业务口径。这次要求它用标准库读取 product,quantity,unit_price 三列,金额用 Decimal,坏行提示行号并继续,且不能改原文件。
初稿有不少正确选择:用 utf-8-sig 读带 BOM 的 CSV,用 Decimal 算金额,也没有写入或覆盖文件。Python 的 csv.DictReader 能把每行映射为字段字典;金额使用 Decimal,可以避免二进制浮点数表示 0.1 时出现的精度误差。Python csv 文档和Decimal 文档都有这些行为的说明。
但只拿正常订单跑一遍,不够。先解压练习包,在终端进入解压后的目录,再运行初稿处理缺少字段的样例:
python3 sales_summary_ai.py missing_cells.csv
模型代码把 row.get("quantity") 的结果直接交给 .strip()。CSV 行缺少这一列时,DictReader 会给缺失字段一个 None,于是程序停止,后续的有效订单也没算进去。再试价格是 Infinity 的文件:
python3 sales_summary_ai.py infinity.csv
Decimal("Infinity") 可以成功创建,也不会满足“价格小于零”的判断;问题直到最后 quantize() 才变成异常。模型写得像样、样例也能运行,并不能替代对输入边界的检查。
修正后再跑一遍
修正版先检查字段是否缺失或多出,再逐行验证商品名、正整数数量和有限的非负金额。某一行有问题时,它会报告 CSV 行号并继续;金额只在输出时按明确的“四舍五入”规则保留两位。脚本只读输入文件,不会生成财务报表或改动订单。
打开修正版脚本,将它与初版逐项比较。在同一个练习目录里运行:
python3 selfcheck.py
python3 sales_summary.py sample_orders.csv
自检会先确认初版在缺列和 Infinity 两种输入下确实失败,再验证修正版能处理 UTF-8 BOM、重复商品、空行、错误价格和零数量。测试数据中,3 件 0.10 元的商品加 1 件 0.20 元,汇总应为 0.50 元;拿铁应为 26.00 元。输出总额与原始 CSV 保持不变。
以后让 AI 写代码,先过这几项
先把正确结果写下来,再让模型动手。然后检查正常输入、空值、缺字段、特殊数字、重复数据和异常格式;涉及金额时,把精度和舍入方式写进需求。重要脚本要用副本测试,检查它有没有删除、覆盖、联网或上传文件。最后把结果与原始订单或业务系统核对。
本例只是小数据演示,不适合直接用于收银、报税或正式账务。退款、优惠券、千分位格式、超大文件和不同币种都需要另定规则并测试。练习包内有初版代码、修正版、样例 CSV 和自检脚本;也可以继续看用 Python 调用本地大模型。