ReasoningTools 工具包允许 Agent 在执行过程中的任何时间点像使用其他工具一样使用推理。与在开始时进行一次推理以创建固定计划的传统方法不同,这使得 Agent 在每一步之后都能进行反思,即时调整其思路和更新其操作。

我们发现这种方法显著提高了 Agent 解决复杂问题的能力,否则它将无法处理。通过为 Agent 提供“思考”其操作的空间,它可以更深入地检查自己的响应,质疑其假设,并从不同角度处理问题。

该工具包包含以下工具:

  • think:此工具用作 Agent 的记事本,用于推理问题并逐步解决。它有助于将复杂问题分解成更小、可管理的部分,并跟踪推理过程。
  • analyze:此工具用于分析推理步骤的结果并确定后续操作。

示例

以下是如何使用 ReasoningTools 工具包的示例:

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.reasoning import ReasoningTools
from agno.tools.yfinance import YFinanceTools

thinking_agent = Agent(
    model=Claude(id="claude-3-7-sonnet-latest"),
    tools=[
        ReasoningTools(add_instructions=True),
        YFinanceTools(
            stock_price=True,
            analyst_recommendations=True,
            company_info=True,
            company_news=True,
        ),
    ],
    instructions="尽可能使用表格",
    show_tool_calls=True,
    markdown=True,
)

thinking_agent.print_response("撰写一份比较 NVDA 和 TSLA 的报告", stream=True)

该工具包随附默认说明和少量示例,以帮助 Agent 有效地使用该工具。以下是启用它们的方法:

reasoning_agent = Agent(
    model=Claude(id="claude-3-7-sonnet-latest"),
    tools=[
        ReasoningTools(
            think=True,
            analyze=True,
            add_instructions=True,
            add_few_shot=True,
        ),
    ],
)

ReasoningTools 可与支持函数调用的任何模型提供商一起使用。以下是使用 OpenAIChat 的推理 Agent 的示例:

from textwrap import dedent

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

reasoning_agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    tools=[ReasoningTools(add_instructions=True)],
    instructions=dedent("""\
        你是一位专业的解决问题助手,拥有强大的分析能力!🧠

        你的解题方法:
        1. 首先,将复杂问题分解为组成部分
        2. 清楚地说明你的假设
        3. 制定结构化的推理路径
        4. 考虑多种观点
        5. 评估证据和反驳论点
        6. 得出有充分依据的结论

        在解决问题时:
        - 使用明确的逐步推理
        - 确定关键变量和约束条件
        - 探索替代方案
        - 突出不确定性领域
        - 清晰地解释你的思路过程
        - 考虑短期和长期影响
        - 明确评估权衡取舍

        对于定量问题:
        - 展示你的计算过程
        - 解释数字的意义
        - 在适当的时候考虑置信区间
        - 确定源数据的可靠性

        对于定性推理:
        - 评估不同因素如何相互作用
        - 考虑心理和社会动态
        - 评估实际约束
        - 解决价值考量
        \
    """),
    add_datetime_to_instructions=True,
    stream_intermediate_steps=True,
    show_tool_calls=True,
    markdown=True,
)

此 Agent 可用于提出需要深思熟虑的问题,例如:

reasoning_agent.print_response(
    "一家初创公司拥有 50 万美元的资金,需要在营销或产品开发之间进行选择。他们希望在 12 个月内最大限度地实现增长和用户获取。他们应该考虑哪些因素以及如何分析这个决策?",
    stream=True
)

或者,

reasoning_agent.print_response(
    "解决这个逻辑谜题:一个人必须带一只狐狸、一只鸡和一袋谷物过河。船只仅够容纳人和一件物品。如果无人看管,狐狸会吃鸡,鸡会吃谷物。人如何才能安全地将所有物品运过去?",
    stream=True,
)