跳转到内容

Agno 推理引擎与逐步思考

Agno 推理引擎与逐步思考

学习目标

本章将分析 Agno 的推理系统:

  • reasoning=True 启用默认推理引擎
  • reasoning_model / reasoning_agent 自定义推理模型
  • reasoning_min_steps / reasoning_max_steps 控制思考深度
  • 10+ 提供商的推理实现

前置知识

建议先阅读:

下文假设你已理解上述概念,直接聚焦 Agno 的具体实现。


项目实践

三种推理模式

Agno 支持三种推理配置:

# 模式 1:启用默认推理引擎
agent = Agent(
model=OpenAIResponses(id="gpt-4o"),
reasoning=True, # 使用默认推理引擎
)
# 模式 2:自定义推理模型
agent = Agent(
model=OpenAIResponses(id="gpt-4o"),
reasoning_model=OpenAIResponses(id="o3"), # 使用专门的推理模型
)
# 模式 3:自定义推理 Agent
agent = Agent(
model=OpenAIResponses(id="gpt-4o"),
reasoning_agent=Agent( # 完全自定义推理逻辑
model=AnthropicClaude(id="claude-opus-4-8"),
instructions="请逐步分析问题,考虑多种可能性。",
),
)

步数控制

agent = Agent(
reasoning=True,
reasoning_min_steps=1, # 最少思考步数
reasoning_max_steps=10, # 最多思考步数
)

步数含义

  • min_steps=1:即使问题简单,也至少进行一步推理
  • max_steps=10:防止无限思考循环

推理管线

推理在主管线步骤 8 执行(handle_reasoning),在模型调用之前:

推理结果作为额外的上下文注入系统提示,帮助主模型做出更好的决策。

提供商实现

Agno 的 reasoning/ 目录包含 10+ 提供商的推理实现:

提供商文件推理方式
OpenAIopenai.pyo 系列模型的 reasoning_content
Anthropicanthropic.py扩展思考(extended thinking)
Geminigemini.py推理模式
DeepSeekdeepseek.pyDeepSeek-R1 推理
Groqgroq.py推理模型
Ollamaollama.py本地推理模型
Azure AI Foundryazure_ai_foundry.pyAzure 推理
Vertex AIvertexai.pyGoogle 推理

推理与工具调用的交互

推理步骤在工具调用之前执行。这意味着:

  • 推理结果可以帮助 Agent 更好地选择工具
  • 推理不会在工具调用之间重复执行(只执行一次)
  • 如果工具返回的结果需要进一步推理,由主循环决定是否需要新一轮推理

问题与规避

1. 推理步骤的额外延迟

每一步推理都需要一次 LLM 调用。max_steps=10 可能增加 10 倍的延迟。

规避

  • 对于简单任务,设置 reasoning_max_steps=1
  • 使用更便宜的推理模型(如通过 reasoning_model 指定)
  • 监控推理效果与延迟的权衡

2. 推理结果注入上下文导致膨胀

推理过程可能产生大量中间文本,占用上下文窗口。

规避

  • 推理引擎可以配置摘要模式(只保留最终推理结果)
  • 结合上下文压缩(compress_tool_results=True
  • 使用支持更大上下文窗口的模型

3. 推理与结构化输出的冲突

如果 Agent 同时启用了推理和结构化输出(output_schema),推理结果可能影响结构化输出的格式。

规避:推理结果注入系统提示,不影响输出格式。但如果推理 Agent 的输出格式与期望不符,可能导致解析失败。确保推理 Agent 的指令包含格式要求。

设计取舍

为什么推理在工具调用之前?

优势:推理帮助 Agent 做出更好的工具选择决策,避免盲目调用 代价:如果工具返回的结果需要进一步推理,无法在工具调用后自动触发新一轮推理 替代方案:在每次工具调用后都进行推理——更全面但延迟更高

为什么默认 reasoning_min_steps=1

优势:确保即使简单问题也有一定的思考深度 代价:对于显而易见的问题(如”1+1=?”),推理步骤可能是不必要的开销 替代方案:默认 0——让模型直接回答,不调用推理

参考来源