怎么选模型
排行榜告诉你模型的平均水平,却不能告诉你它在你的任务上怎么样。用 20 道题比较四种模型配置的准确率、速度和花费,学会用自己的小测试集做选择。
- 约 40 分钟
- 难度:入门
- 实测:2026-09-14 deepseek-flash,deepseek-v4-pro
新模型几乎每周都有,每一个都说自己在某个排行榜上拿了第一。选模型时看排行榜,就像招人时只看学历:有参考价值,但决定不了这个人能不能干好你这份活。
这一课讲一个更可靠的办法:准备 20 道你自己任务里的题,让候选模型都做一遍,看谁答得对、谁快、谁便宜。花不了多少钱,半小时就能出结果。
选模型时要看什么
| 维度 | 要问的问题 |
|---|---|
| 质量 | 在我的任务上答得对不对? |
| 价格 | 按我的真实用量,一个月多少钱? |
| 速度 | 用户要等多久?首字出来要多久,整段写完要多久? |
| 功能 | 支持工具调用吗?支持 JSON 输出吗?能看图吗?上下文够长吗? |
| 部署方式 | 能不能调用云端 API?数据能不能出公司?需不需要本地部署? |
| 稳定性 | 限流严不严?出过几次故障?模型会不会突然下线? |
质量排第一,但不是唯一。一个准确率 95% 但要等 10 秒的模型,放在聊天窗口里用户会嫌慢;一个准确率 90% 但便宜十倍的模型,对每天调用几十万次的后台任务可能更合适。
模型大致分几类
闭源和开放权重。闭源模型只能通过 API 调用,你拿不到模型本身。开放权重的模型把参数公开发布,你可以下载到自己的服务器上运行,数据不出门,但要自己准备显卡和运维。第 10 模块会讲怎么在本地部署开放权重的模型。
思考和不思考。以前通用模型和推理模型是分开的两个模型,现在很多模型用一个参数就能切换。DeepSeek 的 deepseek-flash 和 deepseek-v4-pro 都支持思考和非思考两种模式,默认开启思考。思考模式更准,但更慢更贵。
大和小。同一家的产品线里,通常有一个便宜快速的型号和一个更贵、能力更强的型号,比如 DeepSeek 的 flash 和 pro。直觉上贵的一定更好,但下面的实验会告诉你,不一定。
截至 2026 年 9 月,国内能直接用的主要选择有 DeepSeek、阿里云百炼(通义千问系列)、Kimi 等,第 00 模块第 2 课列了它们的接口地址。具体型号更新得很快,这里不列清单,去各家的文档里看最新的就好。重要的是下面这套比较方法,它不会过时。
实验:20 道题比较四种配置
我准备了 20 道有标准答案的题:算术、单位换算、数字母、数汉字、简单推理、古诗、Python 常识。然后让四种配置都做一遍:deepseek-flash 和 deepseek-v4-pro,各自开思考和不开思考。
程序的核心部分是这样的(完整代码在 code/01-llm-basics/model_eval.py,费用计算用的是第 4 课写的 cost_usd):
QUESTIONS = [
("17 乘以 23 等于多少?", ["391"]),
("9.11 和 9.9 哪个大?", ["9.9"]),
("“秋天的叶子一片片落下”这句话有几个字?", ["10"]),
("如果今天是星期三,100 天后是星期几?", ["星期五", "周五"]),
("鸡兔同笼,共 35 个头,94 只脚,兔子有几只?", ["12"]),
# ……一共 20 道
]
def normalize(text):
# 去掉空格和标点,再去掉结尾的单位和"大"这类多余的字,只比较核心答案。
# 注意不能去掉小数点,否则 9.9 和 99 就分不清了。
text = re.sub(r"[\s,。,!!??::“”\"'、]", "", text.lower()).rstrip(".")
return re.sub(r"(个字|个|人|只|天|平方厘米|厘米|摄氏度|度|次|大)$", "", text)
def run_one(model, thinking, question):
start = time.time()
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "只回答最终答案本身,不要写单位以外的任何解释。"},
{"role": "user", "content": question},
],
extra_body={"thinking": {"type": "enabled" if thinking else "disabled"}},
)
return response.choices[0].message.content.strip(), time.time() - start, response.usage
每种配置用 10 个线程并发做完 20 道题,统计答对几道、平均每题几秒、一共花多少钱,并把答错的题打印出来。我运行的结果:
deepseek-flash(不思考): 答对 19/20,平均 0.8 秒/题,20 题共 0.0002 美元
答错:9.11 和 9.9 哪个大? → 9.11
deepseek-flash(思考): 答对 20/20,平均 0.9 秒/题,20 题共 0.0026 美元
deepseek-v4-pro(不思考): 答对 16/20,平均 0.9 秒/题,20 题共 0.0009 美元
答错:9.11 和 9.9 哪个大? → 9.11
答错:“秋天的叶子一片片落下”这句话有几个字? → 9
答错:一个正方形的周长是 24 厘米,它的面积是多少平方厘米? → 9
答错:单词 raspberry 里有几个字母 r? → 2
deepseek-v4-pro(思考): 答对 20/20,平均 2.1 秒/题,20 题共 0.0114 美元
读结果
思考模式把错题全部纠正了。两个模型开了思考都是 20 题全对。不思考时出错的都是需要"一步一步来"的题:比较小数、数字数、先算边长再算面积。
贵的模型不一定更好。deepseek-v4-pro 关掉思考,只答对 16 道,比便宜的 flash 还少 3 道。在正方形那道题上,它回答"9",大概是把"周长 24"错当成了面积的线索。价格高的模型通常在更难、更开放的任务上有优势,但在你的具体任务上,它完全可能不如便宜的那个。这正是要自己测的原因。
同样全对,价格和速度差很多。flash 开思考和 pro 开思考都是 20/20,但 pro 贵了 4 倍多(0.0114 对 0.0026 美元),还慢了一倍多(2.1 对 0.9 秒)。对这组题来说,flash 开思考是明显更好的选择。
不思考的 flash 性价比最高。19/20 的准确率,花费只有开思考时的十分之一。如果你的任务里没有"比较小数"这类陷阱,它可能就够用了。
这个实验的局限
说完结论,也要说清楚这个实验靠不住的地方。
20 道题太少。答对 16 道和 17 道的差距,可能只是运气。我前后运行了两次,deepseek-v4-pro 不思考的成绩一次是 17 道,一次是 16 道,错的题也不完全一样。20 道题适合发现"明显差很多"的情况,要区分"差不多"的两个模型,需要更多的题,而且每题多跑几次。
评分脚本自己也会错。我第一次运行时,flash 开思考被判了两道错题:一道回答的是"9.9 大",一道是"10个字"。答案其实是对的,只是我的 normalize 函数没有去掉"大"和"个字"这样的尾巴。修好之后重新运行,才得到上面的结果。所以一定要把判错的题一道道看过去,确认是模型错了,而不是评分错了。
这些题不是你的任务。算术、数字母、古诗,和你要做的客服、写代码、提取合同信息都不一样。这组题只是演示方法。给你自己的项目选模型,题目必须来自你的真实任务。
给自己的项目选模型
- 收集 20 道真实的题。从你的真实场景里挑:用户真实问过的问题、真实要处理的文档。要有简单的,也要有你知道模型容易出错的。
- 想好怎么判对错。有标准答案的最好,用程序自动比对。开放性的回答(比如写一段客服回复),可以写一个打分标准人工评,或者让另一个模型来评,06 模块第 2 课会讲怎么做。
- 挑 2~4 个候选。一般是一个便宜的、一个贵的,再加上开关思考的组合。
- 跑一遍,看错题。不要只看准确率,每道错题都看一下,判断是模型的问题还是题目或评分的问题。
- 按真实用量算钱。用第 4 课的
cost_usd,按每天调用多少次估算月费用。 - 选能满足要求的最便宜的那个。准确率达标之后,再看速度和价格。
这 20 道题不要扔。以后换模型、改提示词、升级版本,每次都拿它们跑一遍,就知道有没有变差。06 模块会把它扩展成一个完整的评估集。
练习
- 在
model_eval.py的QUESTIONS里加 5 道你觉得模型容易错的题,比如多步的日期计算、带陷阱的逻辑题,看看四种配置谁表现最好。 - 如果你有别家的 API 密钥,给
CONFIGS加上别家的模型(要改一下run_one,让它能用不同的客户端,并去掉别家不认识的thinking参数),比较一下结果。 - 把
model_eval.py对同一个配置连续跑 3 次,看每次答对的数量一样吗?哪几道题时对时错?
自测
1. 一个模型在排行榜上排第一,为什么还要用自己的题测一遍?
排行榜测的是模型在通用题目上的平均水平,而你关心的是它在你的具体任务上的表现。两者可能差很多。本课实验里,更贵的 deepseek-v4-pro 在不思考模式下反而比便宜的 flash 错得多。只有用自己任务里的真实题目测,才知道哪个模型适合你。
2. 用 20 道题测出来模型 A 答对 17 道,模型 B 答对 16 道。能说明 A 比 B 好吗?
不能。20 道题太少,一两道的差距可能只是随机波动,同一个模型跑两次成绩都可能不一样。小测试集适合发现差距明显的情况。要区分接近的模型,需要更多的题,并且每题多跑几次取平均。
3. 你的评估脚本显示模型答错了 3 道题。下一步应该做什么?
逐一查看这 3 道题的原始回答,确认是模型真的答错了,还是评分脚本判错了(比如回答里多了单位、多了标点)。也要检查题目和标准答案本身有没有问题。确认之后,再根据错题的类型决定要不要换模型、开思考或者改提示词。
提问与讨论
这一课没看懂的地方,在这里问。看到别人的问题,也欢迎你来回答。
提问 +3 积分,回答别人 +6 积分。内容经审核后公开。
正在加载讨论…