AI代理:思考工具 vs. 推理模型

在本文中,我将介绍一种专为代理使用设计的新思维方式,我们将展示为什么它更适合代理使用,它内部是如何运作的,最重要的是如何将其融入到你自己的使用中,比现有的代理设置更好。

如果你想查看我在工作中创建的一些示例,你需要访问这个 仓库。更喜欢视频?我的YouTube频道上有一段视频 这里

1、推理模型不适合代理使用

如果你之前使用过推理模型,你就会知道它们对于代理使用非常糟糕;从不使用提供的工具、遗漏重要细节,甚至直接不按顺序使用工具的情况都屡见不鲜。推理模型在代理应用方面表现得很差,特别是在工具使用方面——这是现代代理系统的重要组成部分。

1.1 为什么

这种现象的原因在于这些代理所使用的推理方式以及代理处理过程的变化程度。

如你所见,虽然用户定义了原始问题,但通过工具调用进入序列的额外信息完全改变了问题。这使得模型的原始思考变得过时,导致结果质量下降。

进来的新信息可能极其简单。例如,一个声称自己错过了航班的用户,而检查已预订航班的工具调用没有找到他们。正确的解决方案可能是简单地说明这个人可能预订了不同的航班,但如果推理模型已经决定要为他们重新安排航班,它会不管怎样调用该功能。

1.2 正确的方法

更好的解决方案是允许模型在工具调用信息到来后重新思考问题。这将使模型在重新安排根本不存在的航班之前重新考虑其计划。

2、引入思维工具

将这一想法扩展为一般性方法意味着我们需要给模型在生成过程中随时思考的能力。

为此,在我们提供给模型的所有不同工具中,我们包括了一个额外的“think”工具,其模式如下所示。

 {  
            "name": "think",  
            "description": """使用此工具来思考某事。  
            它不会获得新信息或更改数据库,只是将思想添加到日志中。  
            当需要复杂推理或某些缓存内存时使用它。""",  
            "input_schema": {  
                "type": "object",  
                "properties": {  
                    "thought": {  
                        "type": "string",  
                        "description": "要思考的一个想法。"  
                    }  
                },  
                "required": ["thought"]  
            }  
        }

正如你所看到的,它所做的只是告诉模型该工具的存在以及何时使用该工具。现在有了这个工具,模型可以在任何时候停下来重新思考

2.1 工具的结构

正如你现在可以想象的那样,该工具本身并不特别依赖于实现,并且只作为一个地方,让模型重新收集正在进行的过程并写出它的想法。实际上,我们甚至不需要将函数的输出(思维过程)返回给模型,因为由于我们将它附加到消息数组中,它已经是模型输入的一部分。

这是该工具的一个示例定义:

   # “think”工具 - 无需处理,只需确认  
    elif tool_name == "think":  
        # 我们不需要对“thought”输入做任何事情  
        # 它只是Claude的自我笔记  
        thought = tool_input.get("thought", "")  
        # 使用我们的丰富可视化工具显示想法  
        viz.display_think_process(thought)  
        logger.info("Claude 使用了 'think' 工具")  
        return None

正如我所说,我们不需要将函数的输出(思维过程)返回给模型,因为这已经包含在模型的输入中,因为我们把它附加到了消息数组中。

2.2 实际应用

模型倾向于使用这个工具来进行前瞻性思考。通常,Claude 3.7会利用这个机会;

  1. 概述至今的进展
  2. 概述前进的方向
  3. 证明前进方向的合理性(并解决任何明显的错误)
  4. 并概述下一步行动

正如你所想象的,这一步对于挽救偏离轨道的代理执行过程至关重要。

在下面的例子中(你可以通过文章顶部的GitHub仓库自己获取这个文件),模型被赋予了一组客户订单数据。然后被要求处理一位想要退货的客户。

用户向Claude请求退款

随后,Claude从数据库中检索用户的订单并检查他们的客户状态。但出现了一个巨大的困惑点,模型意识到由于退款期限已过,买家无法获得退款。这种情况更加令人困惑,因为公司政策规定“某些高级客户可以获得特殊折扣”,而这位用户是高级客户。为了思考这种情况,模型使用我们的工具停下来,重新整理并思考。

正如你所看到的,模型使用这个工具来概述整个过程并规划一条前进的道路,这正是我们设计这个工具的目的。

3、指南

3.1 指令的重要性

“think”工具的秘密在于系统指令。在他们的例子中,Anthropic列出了许多如何提示模型正确使用“think”工具的示例。我在这里呈现其中一个示例,只是为了清楚地说明在使用这个工具时需要多少提示。

使用“think”工具

在收到工具结果后采取任何行动或回应用户之前,请使用“think”工具作为草稿板:
- 列出适用于当前请求的具体规则
- 检查是否已收集所有必要信息
- 验证计划的操作是否符合所有政策
- 迭代工具结果以确保正确性 以下是一些在“think”工具中要迭代的内容示例:

<think_tool_example_1>
用户想取消航班ABC123
- 需要验证:用户ID、预订ID、原因
- 检查取消规则:
* 是否在预订后的24小时内?
* 如果不是,检查票务等级和保险
- 验证是否有已飞行或过去的航段
- 计划:收集缺失信息,验证规则,获得确认
</think_tool_example_1>

<think_tool_example_2>
用户想预订3张前往纽约的票,每张票有2件行李
- 需要用户ID来检查:
* 会员等级对于行李额度
* 哪些支付方式存在于个人资料中
- 行李计算:
* 经济舱 × 3位乘客
* 如果是普通会员:每人1个免费行李 → 3个额外行李 = $150
* 如果是银色会员:每人2个免费行李 → 0个额外行李 = $0
* 如果是金色会员:每人3个免费行李 → 0个额外行李 = $0
- 验证支付规则:
* 最多1张旅行证书,1张信用卡,3张礼品卡
* 所有支付方式必须存在于个人资料中
* 旅行证书剩余部分将作废
- 计划:
1. 获取用户ID
2. 验证会员等级以确定行李费用
3. 检查个人资料中的支付方式及其组合是否允许
4. 计算总费用:机票价格 + 任何行李费用
5. 获得明确的预订确认
</think_tool_example_2>

正如你所看到的,为了充分利用这个工具,需要包括一些相当详细的提示。

虽然一定程度的指导可以包含在函数模式中,但对于这个特定的工具来说,在系统提示中包含详细的指令是至关重要的,让模型知道何时使用该工具,并包括示例。

因为这是模型生成过程中的一个额外步骤,有时运行它的成本在大规模情况下并不值得。

3.2 何时添加“think”工具

添加“think”工具最合理的情况是属于以下任何一类的情况。

  1. 代理需要遵循复杂的工具使用指南(比如当代理只能在非常复杂的情况下做某些事情)
  2. 代理需要按照非常特定(顺序)的顺序调用工具
  3. 当函数返回复杂的数据,需要仔细分析并在继续前做出重要决策时。

相比之下,避免使用或添加“think”工具的情况是代理在进行工具调用时不一定需要遵循非常复杂的指南或者在输入和输出方面都非常简单的工具

在这种情况下,代理通常不会使用思维工具,或者只是在没有明显理由的时候使用它。


原文链接:New Thinking Method for Agents | Better than reasoning models

汇智网翻译整理,转载请标明出处