第 15 章 · 推理 Reasoning 与思考模型
本章目标:理解 Agno 两种"让模型多想一步"的方式——内置推理流程与原生思考模型,学会用
reasoning_model接入 DeepSeek-R1 类模型,并判断什么任务值得付出推理开销。
15.1 为什么需要推理
普通对话模型是"想到即输出":遇到多步数学、复杂规划、逻辑陷阱类任务,容易在第一步就走偏。**推理(Reasoning)**的本质是让模型先生成中间思考步骤(草稿、分解、自查),再给出最终答案——相当于把"思维过程"也变成了生成内容。
Agno 提供两条路径:
- Agent 内置推理流程:
reasoning=True,让 Agent 按步骤逐步推理(Cop 底层通过提示词与多轮调用实现,reasoning_min_steps/reasoning_max_steps控制步数); - 原生思考模型:直接使用 DeepSeek-R1 / deepseek-reasoner 这类自带思维链的模型,或用
reasoning_model参数指定一个专用模型负责推理。
15.2 直连思考模型
最简单的方式:把模型 id 换成思考模型即可,Agent 代码零改动:
# reasoning_direct.py
import os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
reasoning_agent = Agent(
model=OpenAIChat(
id="deepseek-reasoner", # DeepSeek 的思考模型
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
markdown=True,
)
reasoning_agent.print_response("一个 3x3 幻方每行每列和对角线都等于 15,请给出一种填法并验证。")运行时你会看到输出里先出现一段"思考过程"(思维链),然后才是最终答案。注意:思考模型通常不支持或不建议同时使用 temperature 等采样参数干预,也不适合做低延迟场景。
15.3 用 reasoning_model 组合"双模型"
reasoning_model 参数允许你指定一个独立模型专职推理,主模型负责最终表达——典型组合是"便宜模型干杂活,推理模型啃硬骨头",或者反过来"推理模型出方案,便宜模型写报告":
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
# 主模型:负责最终回复
model=OpenAIChat(
id="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
# 推理模型:遇到难题时先用它逐步推演(也接受 "provider:model_id" 字符串)
reasoning_model=OpenAIChat(
id="deepseek-reasoner",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
reasoning_min_steps=1,
reasoning_max_steps=10, # 推理步数上限,控制成本
markdown=True,
)
agent.print_response("三封信随机放进三个信封,全部装错的概率是多少?给出完整推导。")也可以只开 reasoning=True 让 Agent 使用内置的分步推理流程(reasoning_agent 参数还能传入一个自定义 Agent 充当"推理器"),但要注意这会显著增加调用轮数:
stepwise_agent = Agent(
model=OpenAIChat(
id="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
reasoning=True, # 开启内置分步推理流程
reasoning_max_steps=6, # 限制步数控制成本与耗时
markdown=True,
)15.4 推理的开销与适用场景
推理不是免费午餐,每次"多想"都意味着更多 token 和更长延迟:
| 任务类型 | 是否建议推理 | 原因 |
|---|---|---|
| 数学/逻辑/约束求解 | ✅ 强烈建议 | 思维链能显著提升正确率 |
| 多步规划、复杂决策 | ✅ 建议 | 分解与自查减少遗漏 |
| 闲聊、翻译、格式转换 | ❌ 不建议 | 纯增加延迟与费用 |
| 简单 RAG 问答 | ❌ 一般不需要 | 检索质量才是瓶颈 |
常见坑
- 对思考模型传
reasoning=True再叠加内置推理流程,等于"推理套推理",成本翻倍且容易超时; reasoning_max_steps设太大可能让一次run()挂起很久,生产环境务必配合超时;- 思考模型的输出里混有思维链内容,做结构化解析时只取最终答案字段。
15.5 与工具、RAG 的协同
推理和检索是互补能力:推理解决"怎么想",RAG 解决"知道什么"。典型组合是让思考模型在 Agentic RAG 中担任主控——先推理出"我需要查什么",再检索,最后综合:
agent = Agent(
model=OpenAIChat(
id="deepseek-reasoner",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
knowledge=knowledge, # 第 13 章构建的知识库
search_knowledge=True,
instructions=["先分析问题需要哪些信息,再检索知识库,最后作答并给出依据。"],
markdown=True,
)本章小结
- 推理 = 让模型生成中间思考步骤再作答,可显著提升逻辑类任务正确率;
- 直连方式:模型 id 换成
deepseek-reasoner等思考模型,代码零改动; reasoning_model可为 Agent 指定专职推理模型(支持 Model 对象或provider:model_id字符串),reasoning_min_steps/reasoning_max_steps控制步数;- 推理有真实成本:按任务类型判断是否值得,简单任务别滥用;
- 推理与 RAG/工具正交,可组合使用。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. Agno 中让 Agent 使用"专职推理模型"的参数是?
2. 以下哪类任务最不适合开启推理?
3. reasoning_min_steps 和 reasoning_max_steps 控制的是什么?
4. 关于思考模型的实践,下列说法错误的是?
🛠️ 动手实践
- 准备 5 道逻辑题,分别用
deepseek-chat和deepseek-reasoner回答,统计正确率差异。 - 用
reasoning_model配置双模型 Agent,把reasoning_max_steps分别设为 2 和 10,对比回答质量与耗时。 - 给第 13 章的 RAG Agent 换上思考模型,观察它检索关键词的选择是否更合理。
学会"想"之后,下一章解决"什么时候该停下来问人":第 16 章:人机协同与 Guardrails。