目录

13 - 推理能力:让 Agent “想清楚再回答”

一句话总结:通过 reasoning=Truereasoning_modelReasoningTools 三种方式,让 Agent 从”脱口而出”升级为”深思熟虑”。


快思考 vs 慢思考

你有没有发现,大模型有时候回答得太”快”了?

问它”一个商品先打八折再打九折,最终是几折”,它可能直接说”七折” – 错了。问它一个需要多步推理的逻辑题,它也经常跳步骤,给你一个看起来像回答但经不起推敲的结果。

这不是模型笨,而是它在”快思考”模式下跳过了推理过程。就像你口算 17 x 23,脑子里不打草稿很容易算错一样。

Agno 提供了三种方式给 Agent 加上”慢思考”能力,让它先想清楚再开口。


方法一:reasoning=True(最简单)

最直接的做法 – 加一个参数就行。Agno 会在 Agent 生成最终回答之前,先让它进行一轮逐步推理。

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),
    reasoning=True,
    instructions="你是一个逻辑推理专家,解决问题时要展示思考过程",
    markdown=True,
)

agent.print_response(
    "一个房间里有3只猫,每只猫看到2只其他猫。房间里一共有几只猫?",
    stream=True,
)

开了 reasoning=True 之后,Agent 不会直接蹦出答案。它会先把问题拆开,一步一步想,最后再给你结论。你在输出里能看到类似”思考过程”的内容。

控制推理步数

默认情况下,Agent 最少推理 1 步,最多 10 步。你可以调整:

agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),
    reasoning=True,
    reasoning_min_steps=2,   # 至少想2步
    reasoning_max_steps=5,   # 最多想5步
    markdown=True,
)

步数越多,思考越深入,但延迟也越高。简单问题 2-3 步就够了,复杂分析可以开到 5-10 步。

显示完整推理过程

调用 print_response 时可以控制推理过程的展示:

agent.print_response(
    "一个农民有17只羊,除了9只都死了。还剩几只?",
    stream=True,
    show_full_reasoning=True,  # 展示完整推理过程
)

show_full_reasoning=True 会把每一步推理的细节都打印出来,方便你调试和观察 Agent 的思维链。


方法二:reasoning_model(用更强的模型来想)

这个思路很妙 – 用一个便宜的模型负责最终输出,用一个更强的模型负责背后的推理。就像公司里实习生写报告,但有个资深员工帮他理清思路。

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),       # 便宜模型:负责最终回答
    reasoning_model=OpenAIChat(id="gpt-4o"),   # 强模型:负责推理思考
    instructions="你是一个数学老师,用中文解释解题过程",
    markdown=True,
)

agent.print_response(
    "如果一个商品打8折后又打9折,最终是原价的几折?",
    stream=True,
)

执行流程是这样的:

  1. 用户的问题先发给 reasoning_model(gpt-4o),让它深入思考、拆解问题
  2. 推理结果传给主 model(gpt-4o-mini),由它组织语言、生成最终回答

这样做的好处是:推理质量高(因为用了更强的模型),但最终输出的成本低(因为用的是便宜模型)。对于大部分场景,这是性价比最好的方案。

配合 reasoning 参数一起用

reasoning_model 可以和 reasoning=True 以及步数参数组合使用:

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),
    reasoning_model=OpenAIChat(id="gpt-4o"),
    reasoning=True,
    reasoning_min_steps=2,
    reasoning_max_steps=5,
    markdown=True,
)

agent.print_response(
    "三个人住酒店,房费30元,每人交10元。后来老板说只要25元,"
    "让服务员退5元。服务员偷了2元,退给每人1元。"
    "每人实际交了9元,3x9=27,加上服务员的2元=29。少了1元去哪了?",
    stream=True,
    show_full_reasoning=True,
)

这个经典的”少了一块钱”的逻辑陷阱,模型在快思考模式下很容易掉进去。加了推理之后,它会先把账目一步步算清楚,然后告诉你这个问题本身的加法就是错的。


方法三:ReasoningTools(推理工具)

前两种方式是让 Agent 在回答之前先”内部思考”。第三种方式不太一样 – 它给 Agent 提供了两个工具:thinkanalyze,让 Agent 在解决问题的过程中随时可以”打草稿”。

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.reasoning import ReasoningTools

agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    tools=[ReasoningTools(add_instructions=True)],
    instructions="你是一个分析师,解决问题时要深思熟虑",
    markdown=True,
)

agent.print_response(
    "一个人要带狐狸、鸡和一袋谷物过河。"
    "船一次只能载人和一样东西。"
    "狐狸会吃鸡,鸡会吃谷物。"
    "怎么安全过河?",
    stream=True,
)

think 和 analyze 是什么

这两个工具的作用:

  • think – 打草稿。Agent 可以在这里写下”我觉得应该先带鸡过去”之类的中间想法,整理思路,规划下一步。就像你在纸上画示意图一样。
  • analyze – 评估结果。Agent 做完一步之后,用这个工具来检查”我刚才的推理对不对”“下一步该怎么走”。

关键的一点:这些推理步骤不会直接展示给用户。Agent 在内部用工具调用的方式完成思考,最终只把结论呈现给你。

和其他工具配合

ReasoningTools 的真正威力在于它可以和其他工具一起用。比如一个需要搜索信息再做分析的场景:

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.reasoning import ReasoningTools
from agno.tools.websearch import WebSearchTools

agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    tools=[
        ReasoningTools(add_instructions=True),
        WebSearchTools(enable_news=False),
    ],
    instructions="你是一个研究分析师,先搜索资料再做深入分析",
    markdown=True,
)

agent.print_response(
    "比较一下 Python 和 Rust 在 Web 后端开发中的优劣势",
    stream=True,
)

Agent 的执行流程大概是:

  1. 调用 think:”我需要从性能、生态、学习曲线等角度来比较”
  2. 调用 WebSearch 搜索相关资料
  3. 调用 analyze:”搜索结果显示 Rust 性能更好但生态较小…”
  4. 再调用 think:”还需要考虑开发效率和团队技能…”
  5. 最终输出结构化的对比分析

整个过程中,Agent 在”思考”和”行动”之间来回切换,每一步都有据可依。


三种方式怎么选

方式 原理 延迟 成本 适用场景
reasoning=True Agent 内部多步推理 简单逻辑题、数学题
reasoning_model 用更强模型做推理 中高 需要高质量推理但控制输出成本
ReasoningTools 工具调用式思考 复杂多步任务、需配合其他工具

简单的经验法则:

  • 只需要 Agent 想一想再回答?用 reasoning=True
  • 想要推理质量高但不想输出模型太贵?用 reasoning_model
  • Agent 需要边查资料边分析、多步骤协作?用 ReasoningTools

当然你也可以混合使用。比如 reasoning=True + reasoning_model 是很常见的组合。


什么时候不需要推理

推理能力不是免费的午餐,它带来更高的延迟和成本。以下场景完全不需要开:

  • 简单问答 – “Python 怎么读取 JSON 文件?”不需要推理。
  • 翻译 – 直来直去,不需要”想”。
  • 文本摘要 – 提炼信息不需要多步推理。
  • 闲聊 – “今天天气真好”不需要逻辑链。

推理最有用的场景:

  • 数学和逻辑题
  • 多步规划(”帮我设计一个系统架构”)
  • 需要权衡利弊的决策分析
  • 容易掉进陷阱的脑筋急转弯
  • 需要交叉验证信息的研究任务

性能考量

几个实用的建议:

  1. 不要给每个 Agent 都开推理 – 大部分 Agent 不需要。只有那些真正处理复杂问题的才需要。

  2. 先试 reasoning=True – 最轻量,如果效果够用就不需要升级到其他方案。

  3. reasoning_model 选对模型很重要 – 推理模型不需要和主模型是同一个提供商。你可以用 OpenAI 的模型做推理,用更便宜的模型做输出。

  4. ReasoningTools 的开销最大 – 每次 think/analyze 都是一次工具调用,会增加 token 消耗。只在确实需要”边做边想”的场景下使用。

  5. 调整 max_steps – 默认 10 步对大部分场景偏多。从 3-5 步开始试,按需调整。


今天学了什么

回顾一下关键要点:

  • reasoning=True 是最简单的方式,让 Agent 在回答前先进行逐步推理
  • reasoning_model 允许你用一个更强的模型专门负责推理,主模型负责输出
  • ReasoningTools 提供 thinkanalyze 两个工具,让 Agent 在执行过程中随时”打草稿”
  • reasoning_min_steps / reasoning_max_steps 控制推理步数
  • show_full_reasoning=True 可以在输出中展示完整的推理过程
  • 推理不是万金油,只在需要深度思考的场景下使用
  • 三种方式可以按需组合,不冲突

下一篇预告

14 - 学习系统:让 Agent 从经验中进步

推理让 Agent 想得更深,但每次都从零开始想。如果 Agent 能从过去的经验中学习,下次遇到类似问题直接用之前的最佳策略呢?下一篇我们聊 Agno 的学习系统 – 让 Agent 越用越聪明。