一个合成矩形包装内衬,面积40平方厘米,长比宽多3厘米。列方程解出来,根是−8和5。负根在代数上完全成立:对应长度−5,乘积也是40。但物理尺寸还得再过一道筛子。
![]()
这次本地演示里,Spark-X2.5-1.7B从合成需求中抽出了两个参数,同一份保存下来的响应随后进入SymPy计算。加上正尺寸检查后,留下的是宽5厘米、长8厘米,原始面积和差值都验证通过。
问题就出在那个负根上:它到底算不算模型出错?
两个项目各自干了什么
Spark-X2.5-1.7B是这里本地使用的语言模型,它的角色是参数抽取。一次实际的模型请求返回了:
{"area_cm2": 40, "gap_cm": 3}
Scientific Agent Skills是一个科学计算技能库,它出现在2026年10月16日抓取的GitHub Trending每日快照的第三条。演示跟随的是它的SymPy技能1.5版本,锁定在仓库提交a1043ef544e3a100c28e70a736b6cf32554d0677上:创建符号、使用精确数字、指定求解域、验证结果。
一个本地演示适配器把这两步连起来。它读取实际保存的模型JSON,检查字段名、整数类型和允许范围,然后用符号和Integer对象构造出SymPy表达式。这是本地实现的演示,不是两个项目之间的官方集成。
相关图片是model.png和solve.png的直接横向裁剪,也就是本期实际使用的终端录制末帧。它们展示的是同一次真实模型调用,以及随后读取该响应的符号计算。只裁剪了画面边界,输出文本没有改动。两条原始命令的退出码都是0。可见数据由公开的工具/模型信息和合成测试输入组成。
求解、代入,再检查任务约束
设x为宽,则长为x+3。宽乘以(宽加三)等于四十,括号把整个长度表达式括在一起。原始表达式是:
x × (x + 3) − 40 = 0
SymPy 1.14.0使用solveset并指定domain=S.Reals,返回−8和5。把任一根代回原始表达式,残差都是零。
按正宽度、正长度过滤后,保留5×8厘米。最后两项检查是5×8=40和8−5=3。这里的教训是把原始物理条件一路带进计算。负根并不说明模型出错。
正方会说:模型只负责抽参数,抽出来的是40和3,两个都对,方程也是自己列的,负根是数学的合法产物,凭什么怪模型?反方会说:任务描述里写的是"包装内衬",是物理对象,模型如果真理解需求,就该知道尺寸不能为负,负根出现在结果里,说明它只做了符号搬运,没做语义约束。
我的判断偏向正方,但有个前提。这次流程里,负根被明确保留、又被明确拒绝,理由写在检查步骤里——拒绝它的不是模型,是物理条件。真正危险的不是负根本身,而是把负根直接当成答案输出、不做任何约束检查的那种流程。这次演示恰好把这道检查显式化了。
实际环境与证据
本次运行使用Windows、Python 3.12、SymPy 1.14.0和mpmath 1.3.0。推理工具是llama.cpp b10833(9ac8c408a)。请求和响应都标识为Spark-X2.5-1.7B。权重是ngquocvinh社区Q4_K_M GGUF,派生自公开的XHToken模型。
模型请求使用temperature=0、关闭思考、整数JSON schema。这次演示记录了一次实际模型请求,HTTP 200。本地交付物保留了请求、原始响应、参数JSON、SymPy结果、命令退出码和原始录制。SymPy记录了它消费的参数文件的SHA-256。适配器使用精确整数,不评估模型生成的表达式字符串。
这个合成例子验证了一条具体的数据流:需求参数、符号计算、原始约束检查。它有用的产出是一个可核验的尺寸,以及拒绝另一个根的明确理由。单个例子不足以确立更广泛的准确率或业务性能结论。
从最小的检查开始
准备好带SymPy的Python,打开锁定版本的技能,对同一表达式跑一次真实域求解:
import sympy as sp
x = sp.symbols('x', real=True)
original = x * (x + sp.Integer(3)) - sp.Integer(40)
roots = sp.solveset(original, x, domain=sp.S.Reals)
print(roots)
for width in roots:
length = width + 3
print(width, length, sp.simplify(original.subs(x, width)),
bool(width > 0 and length > 0))
先确认根是{−8, 5},且两个代入残差都为零。然后要求正尺寸,并验证原始面积和差值。如果想连自然语言抽取那一步也复现,就用一个本地Spark-X2.5-1.7B推理服务,加上一个在传给SymPy之前先校验整数JSON的适配器。演示脚本model-call.mjs和solve-sizing.py保留在本地交付目录里。公开的起点是所链接的模型和技能。
视频:https://www.youtube.com/shorts/QYTkE-Np6kg
音乐:《Trumpet Canon and Fugue No.1293》,Michel Rondeau作曲、演奏并出版(两支小号);IMSLP #1065200;CC BY-SA 4.0。经过片段截取、静音移除、交叉淡化、电平调整和旁白混音。
录制来源:https://imslp.org/wiki/Trumpet_Canon_and_Fugue_No.1293_(Rondeau,_Michel)#IMSLP1065200
许可:https://creativecommons.org/licenses/by-sa/4.0/
同步这段录音的中英文视听剪辑以CC BY-SA 4.0提供。软件和模型保留各自的许可。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.