让模型先想再答
6 道容易错的题各跑 5 次,直接回答对 21 次,先写推理过程对 29 次,开启思考模式全对。讲清楚为什么先想再答有用,以及它要付出多少代价。
- 约 35 分钟
- 难度:入门
- 实测:2026-09-14 deepseek-flash
"9.11 和 9.9 哪个大?"这个问题,小学生都能答对,大模型却经常答错。上一个模块的实验里,deepseek-flash 关掉思考时就答成了 9.11。
同一个模型,换一种问法就能答对:让它先把推理过程写出来,再给答案。这一课用实验看看这招到底多有用、花多少钱,以及它和"思考模式"是什么关系。
为什么先写过程有用
回忆第 01 模块第 2 课:模型一次只生成一个词元,每个词元都基于前面所有的内容。
如果要求"只回答答案",模型必须在第一个词元就给出结论。比较 9.11 和 9.9,它没有地方"算",只能凭直觉。而它的直觉可能被训练数据里大量的版本号带偏了:在软件版本里,9.11 确实比 9.9 新。
如果让它先写过程,比如"9.9 可以写成 9.90,比较小数点后第一位,9 大于 1……",这些推理步骤就成了后面词元的输入。等到写结论时,它是在前面已经写好的推理基础上得出结论,而不是凭空猜。
所以,让模型先想再答,本质上是给它地方打草稿。它能"想"多少,取决于它写出来多少。
实验:三种做法对比
我挑了 6 道容易错的题:前面见过的比较小数、数字数、正方形面积、数字母,外加两道新的:
- 一根绳子对折三次,然后从正中间剪一刀,绳子变成了几段?(答案是 9:对折三次是 8 层,中间剪一刀有 16 个断口,加上原来的两个端头,组成 9 段)
- 我有 3 个苹果,吃掉 1 个,又买了 2 个,然后把一半送给朋友,还剩几个?(答案是 2)
三种做法,都用 deepseek-flash:
DIRECT = "只回答最终答案,一个数,不要任何解释。"
STEP_BY_STEP = "先一步一步写出推理过程,最后单独一行写“答案:”加上一个数。"
METHODS = [
("直接回答", DIRECT, False), # 关掉思考
("先推理再回答", STEP_BY_STEP, False), # 关掉思考,但要求在回答里写推理过程
("开启思考", DIRECT, True), # 打开思考模式,回答里只要答案
]
每道题每种做法各跑 5 次,从回答里取出"答案:"后面的数字,和标准答案比对(完整代码见 code/02-prompting/reasoning.py)。我运行的结果:
直接回答:21/30 正确,平均输出 1 词元,共 0.0003 美元
9.11 和 9.9 哪个大?(正确答案 9.9)→ ['9.11', '9.11', '9.11', '9.9', '9.9']
“秋天的叶子一片片落下”这句话有几个字?(正确答案 10)→ ['11', '11', '11', '11', '12']
单词 raspberry 里有几个字母 r?(正确答案 3)→ ['3', '2', '3', '3', '3']
先推理再回答:29/30 正确,平均输出 244 词元,共 0.0091 美元
9.11 和 9.9 哪个大?(正确答案 9.9)→ ['9.11', '9.9', '9.9', '9.9', '9.9']
开启思考:30/30 正确,平均输出 431 词元,共 0.0160 美元
读结果
直接回答错了 9 次。数字数的题 5 次全错,而且错得不一样,有 11 也有 12。比较小数的题 5 次错了 3 次。有意思的是,绳子和苹果这两道看起来更复杂的题,直接回答反而全对,可能是这类题在训练数据里见得多。
写出推理过程,错误从 9 次降到 1 次。只是在提示词里加了一句"先一步一步写出推理过程"。剩下的一次错误还是 9.11 那道,说明写了过程也不是万无一失:如果推理的第一步就走偏了(比如一开始就认定"11 比 9 大"),后面的推理只会顺着错下去。
思考模式全对。思考模式其实做的是同一件事,只是做得更彻底:模型在 reasoning_content 里先想一遍,这部分经过了专门的训练,会自己检查、发现矛盾时回头重来。最后的 content 里只放答案,我们处理起来也方便。
代价是词元。直接回答平均只输出 1 个词元,写推理过程要 244 个,开思考要 431 个。30 道题的花费从 0.0003 美元涨到 0.016 美元,是 50 多倍。响应时间也相应变长。
手动写过程还是开思考
截至 2026 年 9 月,DeepSeek 的主力模型都支持思考模式,所以大多数情况下直接开思考就好,不用在提示词里手动要求"一步一步想"。
手动要求写推理过程,在这些情况下仍然有用:
- 你用的模型不支持思考模式。
- 你想让用户看到推理过程,比如解题辅导、给出判断依据。思考模式的
reasoning_content是给开发者看的草稿,内容和格式都不受你控制,一般不直接展示给用户。 - 你想控制推理的方式,比如要求"先列出已知条件,再列出要求的量,再逐步计算"。
用手动方式时要注意一点:要让模型先写过程,后写答案。如果提示词要求"先给答案,再解释理由",模型会先凭直觉给出答案,然后为这个答案编一套理由,那样推理就白写了。
什么时候值得让模型想
先想再答不是免费的。本实验里,思考让花费增加了 50 多倍。
值得:多步计算、逻辑推理、需要仔细比对的任务、写代码、复杂的规划。这些任务答错的代价通常远高于多花的那点钱。
不值得:简单的分类、翻译、改写、从文本里提取一个字段、闲聊。这些任务模型凭"直觉"就能做好,思考只会增加延迟和费用。上一课的留言分类,关掉思考就答对了 20/20。
拿不准的时候,用第 01 模块第 6 课的方法:拿你的真实任务,开和不开各跑一遍,比较准确率和花费。
练习
- 在
reasoning.py的题目里加 3 道你觉得模型容易错的题(比如"一个星期后的星期几"、"两个时间相差多少分钟"),看看三种做法谁表现最好。 - 把
STEP_BY_STEP改成"先给出答案,再解释你的理由",最后一行仍然写"答案:"。跑一遍,准确率和原来比有什么变化? - 开启思考时,把
reasoning_content打印出来,看看模型在 9.11 那道题上是怎么想的。它有没有中途改变主意?
自测
1. 为什么要求模型"先写推理过程再给答案",能提高准确率?
模型每次只生成一个词元,后面的内容以前面写出的内容为基础。要求直接给答案时,模型在第一个词元就得下结论,只能凭直觉。先写推理过程,这些步骤就成为后续生成的输入,结论是在推理的基础上得出的。相当于给了模型打草稿的地方。
2. 如果提示词要求"先给出答案,再解释理由",会有什么问题?
模型会先凭直觉写出答案,后面的"理由"只是在为这个答案找依据,不会纠正它。推理必须写在答案前面,才能帮助得出答案。
3. 你的应用要把用户评论分成"好评""差评"两类,每天处理 10 万条。要不要开思考模式?
一般不需要。情感分类是简单任务,不开思考通常就能做得很好,开了思考花费会成倍增加,延迟也更长。可以先用一小批真实评论,开和不开各测一次,如果准确率差别不大,就关掉思考。
提问与讨论
这一课没看懂的地方,在这里问。看到别人的问题,也欢迎你来回答。
提问 +3 积分,回答别人 +6 积分。内容经审核后公开。
正在加载讨论…