大模型中的精确计算:生成可执行代码
大语言模型(LLM)并非为精确计算而设计——其基于Transformer架构,通过概率预测下一个词元,而非执行数学运算。当输入“18 × 38.76”这类问题时,模型可能返回697.68,也可能因训练数据中的模式近似而输出错误结果如680。这并非模型性能下降,而是系统性局限。
解决方案:让大模型远离直接计算。模型仅负责生成用于任务的Python脚本,该脚本在隔离环境中运行。Python确保精度:18 * 38.76 永远精确返回697.68。
系统架构
处理流程:用户 → LLM → Python脚本 → Docker容器 → 结果(文本 + Excel文件)。
示例:计算托木斯克市的公用事业账单
- 用户输入:«CW 320, HW 229, electricity 7422, prev: CW 302, HW 222, electricity 7133»。
- 配备系统提示(费率来自配置文件)的大模型生成计算脚本。
- 脚本计算用量、应用费率并生成表格。
- 在沙箱中执行,返回生成的文件。
简化后的生成代码如下:
# 水表读数
cold_current, cold_prev = 320, 302
hot_current, hot_prev = 229, 222
elec_current, elec_prev = 7422, 7133
# 用量计算
cold_usage = cold_current - cold_prev # 18 m³
hot_usage = hot_current - hot_prev # 7 m³
elec_usage = elec_current - elec_prev # 289 kWh
# 托木斯克2025年费率(来自配置文件,非模型内部)
tariffs = {
'cold_water': 38.76,
'hot_water': 142.63,
'electricity': 4.94,
'drainage': 27.04,
}
# 计算费用
cold_cost = cold_usage * tariffs['cold_water'] # 697.68
hot_cost = hot_usage * tariffs['hot_water'] # 998.41
elec_cost = elec_usage * tariffs['electricity'] # 1427.66
drain_cost = (cold_usage + hot_usage) * tariffs['drainage'] # 676.00
total = cold_cost + hot_cost + elec_cost + drain_cost # 3799.75
# 生成Excel文件
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['服务项目', '用量', '单价, ₽', '金额, ₽'])
ws.append(['冷水', f'{cold_usage} m³', tariffs['cold_water'], cold_cost])
ws.append(['热水', f'{hot_usage} m³', tariffs['hot_water'], hot_cost])
ws.append(['电力', f'{elec_usage} kWh', tariffs['electricity'], elec_cost])
ws.append(['排污', f'{cold_usage + hot_usage} m³', tariffs['drainage'], drain_cost])
ws.append(['总计', '', '', total])
wb.save('communal.xlsx')
费率从外部配置文件注入,由官方渠道更新——杜绝模型幻觉。
模型与沙箱选择
推荐模型:
- 通义千问(阿里):免费API,适合简单任务的稳定代码生成。
- 深度求索V3:适用于复杂场景(如文档分析),支持提示缓存。
GPT-4或Claude对20行以内的脚本而言属于过度配置。
沙箱环境:按需启动的Docker容器。
- 用户间完全隔离。
- 基础库:openpyxl、math、datetime。
- 30秒超时限制。
- 提示中禁用pandas/numpy。
常见问题与解决方法
| 问题 | 解决方案 |
|------|----------|
| 费率幻觉 | 从配置文件注入费率到提示中 |
| 直接计算无代码 | 添加验证逻辑 + 重试指令:“仅返回代码” |
| Excel乱码 | 使用 encoding='utf-8' 并进行后置校验 |
| 缺少导入 | 限制镜像和提示中允许的库 |
| UX:token计数错误 | 改用后端计数 |
| 代码错误 | 将stderr返回给模型,实现迭代修复 |
返回stderr可使调试迭代次数减少5倍——模型能分析错误堆栈并快速修正。
扩展功能:预算分析
用于检查预算(Excel文件,城市名)时,模型可生成150–200行代码。
- 可解析任意结构数据。
- 对比配置文件中的市场价。
- 自动检测算术错误。
- 使用openpyxl生成带颜色编码的报告。
示例:托木斯克市卫生间翻新预算——存在25.9%的超额收费,8项材料价格高出50%以上,差额达1–4卢布。
核心要点
- 数学计算100%准确:由Python执行。
- 费率来自外部数据,绝不依赖模型内部。
- 沙箱环境是安全必需。
- 利用stderr反馈可显著加速调试。
- 可扩展性强:更新配置无需重新训练模型。
— Editorial Team
暂无评论。