返回首页

通过代码实现精确的 LLM 算术运算

本文描述了一种在 LLM 中通过生成并在 Docker 沙箱中执行 Python 代码实现精确计算的方法。讨论了架构、水电费账单计算和估算分析等任务的典型问题及解决方案。实现 100% 算术准确率。

无计算错误的 LLM:生成代码
Advertisement 728x90

大模型中的精确计算:生成可执行代码

大语言模型(LLM)并非为精确计算而设计——其基于Transformer架构,通过概率预测下一个词元,而非执行数学运算。当输入“18 × 38.76”这类问题时,模型可能返回697.68,也可能因训练数据中的模式近似而输出错误结果如680。这并非模型性能下降,而是系统性局限。

解决方案:让大模型远离直接计算。模型仅负责生成用于任务的Python脚本,该脚本在隔离环境中运行。Python确保精度:18 * 38.76 永远精确返回697.68。

系统架构

处理流程:用户 → LLM → Python脚本 → Docker容器 → 结果(文本 + Excel文件)。

Google AdInline article slot

示例:计算托木斯克市的公用事业账单

  • 用户输入:«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')

费率从外部配置文件注入,由官方渠道更新——杜绝模型幻觉。

Google AdInline article slot

模型与沙箱选择

推荐模型:

  • 通义千问(阿里):免费API,适合简单任务的稳定代码生成。
  • 深度求索V3:适用于复杂场景(如文档分析),支持提示缓存。

GPT-4或Claude对20行以内的脚本而言属于过度配置。

沙箱环境:按需启动的Docker容器。

Google AdInline article slot
  • 用户间完全隔离。
  • 基础库: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

Advertisement 728x90

继续阅读