ai模型有哪些、各自的强项在哪,这类问题社区里每天都要被问一遍。但真到要把模型输出直接灌进数据库的那一刻,问题会立刻变得很具体:同一份 240 字段的 Schema,8 个模型各跑 50 次,严格通过率最高的 96%,最低的 38%,中间差了 58 个百分点。
下游是报价单表,240 个字段里 62 个是枚举、18 个是金额、7 个是日期。任何一个字段类型错,整批导入就回滚。所以判定标准不是"读起来像不像",而是 jsonschema.validate 一行都不报。
测试搭法很土但够用:
additionalProperties: false)→ 业务规则(金额两位小数、日期不得为未来)import json
from jsonschema import Draft202012Validator
def check(raw: str, schema: dict) -> tuple[bool, str]:
try:
data = json.loads(raw)
except json.JSONDecodeError as e:
return False, f"json@{e.lineno}:{e.colno}"
validator = Draft202012Validator(schema)
errors = sorted(validator.iter_errors(data), key=lambda e: list(e.path))
if errors:
first = errors[0]
path = "/".join(map(str, first.path)) or "<root>"
return False, f"schema@{path}:{first.validator}"
if not biz_ok(data):
return False, "biz@amount_scale"
return True, "ok"模型系 | 语法通过率 | 严格通过率 | 首错集中位置 | 单次耗水中位数 |
|---|---|---|---|---|
GPT 系 | 100% | 96% | — | 6.8s |
Claude 系 | 100% | 94% | enum | 7.4s |
Gemini 系 | 100% | 88% | 嵌套数组 | 5.9s |
DeepSeek 系 | 98% | 74% | 金额被写成字符串 | 4.1s |
Qwen 系 | 98% | 70% | enum | 3.6s |
GLM 系 | 96% | 62% | 必填字段缺失 | 3.2s |
Kimi 系 | 96% | 56% | 单引号 JSON | 5.2s |
一个 7B 开源模型 | 92% | 38% | 结构被拍平 | 2.4s |
语法层几乎全军 96% 以上,说明"能不能吐出 JSON"早就不是瓶颈了。真正拉开差距的全在语义层。
"1,240.00",带千分位还带引号。正则能救,但救完就不知道原值是不是 1.24 万。["月结","季结","现结"],模型返回 "月结30天"——它在语义上没做错,但下游字典表里没这个键。items[].specs[] 变成 "specs": "长120宽80",只剩一个字符串。[] 写成 null,NOT NULL 约束直接炸。前三类有个共同点:模型是在"努力把话说完整",而不是在"填表"。所以修的方向不是加更多形容词,是减少自由发挥的空间。
有效的手段只有三个,按收益排序:
def generate_with_retry(model, prompt, schema, max_retry=2):
last_err = None
for attempt in range(max_retry + 1):
if last_err is None:
p = prompt
else:
p = (
f"{prompt}\n\n上一次输出被校验器拒绝,错误:{last_err}\n"
"只修这一处,其余字段和顺序保持原样,不要重新组织内容。"
)
raw = model.complete(p, response_format={"type": "json_object"})
ok, last_err = check(raw, schema)
if ok:
return raw, attempt
raise ValueError(f"重试 {max_retry} 次仍不通过:{last_err}")1=月结 2=季结 3=现结,让它输出数字再映射,比让它抄中文稳。接上重试之后,整体严格通过率从 72.3% 抬到 94.6%,平均重试 0.42 次。最差那个 7B 从 38% 到 81%,代价是平均 1.6 次重试。400 次原始调用变成 568 次,token 成本涨了 41%,但省掉的是人工逐条改 JSON 的 3.5 小时——一批 400 条,人工改一条 30 秒。
跑这 8 个模型,接口等待只占 40 分钟里的 32 分钟,剩下 8 分钟全花在换账号、换 SDK、对计费口径上。每个模型一个 key、一套请求体、一种 response_format 写法,横评到第 5 个的时候人已经在做机械劳动了。
后来这批测试改成在 PRIVO 的桌面端里跑:164 个模型的 API 直连收在同一个下拉里,同一份 prompt 和 schema 换个选项就能重跑,40 次一组的批量任务挂着不用管。它有个细节对这类测试挺关键——能直接读本地目录,schema 文件放在 D:\schema\quote.json,提示词里写相对路径就能取到,不用每次把 240 个字段粘进对话框。
严格通过率这件事,模型之间差 58 个百分点是真的,但这个差距不是选型的唯一依据:GPT 系和 Claude 系差 2 个点,单次成本差一截;Qwen 系 70% 配两次错误回灌能到 92%,比直接上最贵的那个更划算。
如果你的场景是"输出必须过 Schema 才能入库",逻辑应该是:先用严格校验量出每个模型的真实通过率,再用重试把便宜模型的短板补齐,最后只把金额和枚举这类硬约束留给最强的模型。一个客户端能把 8 个模型放进同一套 prompt 里反复重跑,这件事本身就值回时间——测完再决定用哪个,比看榜单决定要靠谱得多。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。