近期,Anthropic 公司推出了一种名为 "think" 的新工具,旨在增强 Claude 模型在复杂问题解决方面的能力。本文将深入探讨 "think" 工具的设计理念、性能表现以及实际应用中的最佳实践,并分析其对未来 AI 系统发展的潜在影响。
"think" 工具:让 Claude 停下来思考
在不断提升 Claude 解决复杂问题能力的过程中,Anthropic 发现了一种简单而有效的方法:引入 "think" 工具。"think" 工具为 Claude 提供了专门的空间,用于在处理复杂任务时进行结构化思考。
值得注意的是,"think" 工具与 Claude 先前推出的“扩展思维 (extended thinking)” 功能有所不同。“扩展思维” 强调的是 Claude 在生成响应 之前 的深度思考和迭代计划。而 "think" 工具则是在 Claude 开始生成响应之后 ,增加一个步骤,让它停下来思考是否已经掌握了所有必要的信息,以便继续推进。这在执行长时间的工具调用链或与用户进行多步骤对话时特别有用。
相比之下,"think" 工具更适用于 Claude 无法仅从用户查询中获得所有必要信息,而需要处理外部信息(例如工具调用结果)的情况。"think" 工具所执行的推理不如 “扩展思维” 全面,更侧重于模型发现的 新 信息。
Anthropic 建议在较简单的工具使用场景中使用 “扩展思维”,例如非顺序工具调用或直接的指令跟随。“扩展思维” 也适用于编码、数学和物理等不需要 Claude 调用工具的场景。"think" 工具则更适合 Claude 需要调用复杂工具、在长时间工具调用链中仔细分析工具输出、在具有详细指南的策略环境中导航,或进行每一步都建立在前一步基础上的顺序决策(错误代价高昂)的场景。
以下是使用 τ-Bench 标准工具规范格式的示例实现:
{
"name": "think",
"description": "使用该工具进行思考。它不会获取新信息或更改数据库,只会将想法附加到日志中。在需要复杂推理或某些缓存记忆时使用。",
"input_schema": {
"type": "object",
"properties": {
"thought": {
"type": "string",
"description": "一个需要思考的想法。"
}
},
"required": ["thought"]
}
}
τ-Bench 性能测试:显著提升
为了评估 "think" 工具的性能,Anthropic 使用了 τ-Bench (tau-bench) 进行测试。τ-Bench 是一个综合性基准测试,旨在测试模型在现实客户服务场景中使用工具的能力,其中 "think" 工具是评估标准环境的一部分。
τ-Bench 由 Sierra Research 团队开发,于近期发布,主要评估 Claude 在以下方面的能力:
- 模拟真实用户对话。
- 遵循复杂的客户服务代理策略指南。
- 使用各种工具访问和操作环境数据库。
τ-Bench 使用的主要评估指标是 passk,它衡量的是在给定任务中,所有 k 个独立任务试验都成功的概率,并在所有任务中取平均值。与其它 LLM 评估中常见的 pass@k 指标(衡量 k 个试验中至少有一个成功)不同,passk 评估的是一致性和可靠性——这对于客户服务应用至关重要,因为在这些应用中,始终遵守策略至关重要。
性能分析
Anthropic 的评估比较了以下几种不同的配置:
- 基线(无 "think" 工具,无扩展思维模式)
- 仅扩展思维模式
- 仅 "think" 工具
- 带有优化提示的 "think" 工具(针对航空领域)
结果显示,当 Claude 3.5 Sonnet 模型有效使用 "think" 工具时,在基准测试的 “航空” 和 “零售” 客户服务领域都取得了显著改进:
- 航空领域:带有优化提示的 "think" 工具在 pass1 指标上达到了 0.570,而基线仅为 0.370,相对提高了 54%。
- 零售领域:仅 "think" 工具就达到了 0.812,而基线为 0.783。
下表展示了 Claude 3.5 Sonnet 模型在 τ-Bench 评估的 "航空" 领域四种不同配置下的具体数据:
配置 | k =1 | k =2 | k =3 | k =4 | k =5 |
---|---|---|---|---|---|
"Think" + 提示词优化 | 0.584 | 0.444 | 0.384 | 0.356 | 0.340 |
仅"Think"工具 | 0.404 | 0.254 | 0.186 | 0.140 | 0.100 |
扩展思维 | 0.412 | 0.290 | 0.232 | 0.192 | 0.160 |
基线 | 0.332 | 0.206 | 0.148 | 0.116 | 0.100 |
在航空领域,通过将 “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>
特别值得关注的是不同方法的比较。使用带有优化提示的 “think” 工具比扩展思维模式(其性能与未提示的 “think” 工具相似)取得了显著更好的结果。单独使用 “think” 工具(没有提示)比基线提高了性能,但仍然不如优化方法。
"think" 工具与优化提示的结合提供了显著的最佳性能,这可能是由于基准测试中航空策略部分的高度复杂性,模型从 “思考” 示例中获益最多。
在零售领域,Anthropic 还测试了各种配置,以了解每种方法的具体影响:
下表展示了 Claude 3.5 Sonnet 模型在 τ-Bench 评估的 "零售" 领域三种不同配置下的具体数据:
Configuration | k =1 | k =2 | k =3 | k =4 | k =5 |
---|---|---|---|---|---|
仅"Think"工具 | 0.812 | 0.735 | 0.685 | 0.650 | 0.626 |
扩展思维 | 0.770 | 0.681 | 0.623 | 0.581 | 0.548 |
基线 | 0.783 | 0.695 | 0.643 | 0.607 | 0.583 |
即使没有额外的提示,"think" 工具也实现了最高的 pass1 得分 0.812。零售策略明显比航空领域更容易处理,Claude 能够通过拥有一个思考空间来提高性能,而无需进一步指导。
τ-Bench 分析的关键见解
Anthropic 的详细分析揭示了几个可以帮助有效实施 "think" 工具的模式:
- 在困难领域,提示词至关重要。仅仅提供 "think" 工具可能会稍微提高性能,但将其与优化的提示词配对可以在困难领域产生显著更好的结果。然而,较简单的领域可能仅仅通过使用 “think” 工具就能获益。
- 提高跨试验的一致性。使用 “think” 工具带来的改进在 passk 中保持到 k=5,这表明该工具帮助 Claude 更有效地处理边缘情况和异常场景。
SWE-Bench 性能测试:锦上添花
在评估 Claude 3.5 Sonnet 模型时,Anthropic 在 SWE-Bench 设置中添加了类似的 “think” 工具,使其达到了 0.623 的最新技术水平。修改后的 “think” 工具定义如下:
{
"name": "think",
"description": "使用该工具进行思考。它不会获取新信息或对存储库进行任何更改,只会记录想法。在需要复杂推理或集思广益时使用。例如,如果您探索存储库并发现了错误的根源,请调用此工具来集思广益几种独特的修复错误的方法,并评估哪些更改可能最简单和最有效。或者,如果您收到一些测试结果,请调用此工具来集思广益修复失败测试的方法。",
"input_schema": {
"type": "object",
"properties": {
"thought": {
"type": "string",
"description": "您的想法。"
}
},
"required": ["thought"]
}
}
Anthropic 的实验(n =30 个带有 "think" 工具的样本, n =144 个没有 "think" 工具的样本)表明,包含此工具的独立效果平均提高了 1.6% 的性能(Welch 的 t 检验: t (38.89) = 6.71, p < .001, d = 1.47)。
"think" 工具的适用场景
基于这些评估结果,Anthropic 确定了 Claude 从 "think" 工具中获益最大的特定场景:
- 工具输出分析:当 Claude 需要在行动之前仔细处理先前工具调用的输出,并且可能需要在其方法中回溯时。
- 策略密集型环境:当 Claude 需要遵循详细的指南并验证合规性时。
- 顺序决策:当每个行动都建立在前一个行动的基础上并且错误代价高昂时(通常出现在多步骤领域)。
最佳实践:充分利用 "think" 工具
为了充分利用 Claude 的 "think" 工具,Anthropic 根据其 τ-Bench 实验建议以下实施最佳实践。
1. 战略性提示与特定领域的例子
最有效的方法是提供关于何时以及如何使用 "think" 工具的明确说明,例如用于 τ-Bench 航空领域的说明。提供针对您的特定用例量身定制的示例可以显著提高模型使用 "think" 工具的效率:
- 推理过程中预期的详细程度。
- 如何将复杂指令分解为可操作的步骤。
- 处理常见场景的决策树。
- 如何检查是否已收集所有必要的信息。
2. 将复杂指南放在系统提示中
Anthropic 发现,当 "think" 工具的说明很长和复杂时,将它们包含在系统提示中比将它们放在工具描述本身中更有效。这种方法提供了更广泛的上下文,并帮助模型更好地将思维过程整合到其整体行为中。
何时不应使用 "think" 工具
虽然 “think” 工具可以提供实质性的改进,但它并不适用于所有工具使用场景,并且会增加提示长度和输出 token 的成本。具体来说,Anthropic 发现 “think” 工具在以下用例中没有任何改进:
- 非顺序工具调用:如果 Claude 只需要进行单个工具调用或多个并行调用来完成任务,那么添加 “think” 工具不太可能带来任何改进。
- 简单的指令跟随:当 Claude 不需要遵守很多约束,并且其默认行为已经足够好时,额外的 “think” 不太可能带来收益。
快速上手:简单几步,效果显著
"think" 工具是对 Claude 实现的一个简单补充,只需几个步骤即可产生有意义的改进:
- 使用代理工具使用场景进行测试。从具有挑战性的用例开始——那些 Claude 目前在策略合规性或长工具调用链中的复杂推理方面存在困难的用例。
- 添加工具定义。实现一个针对您的领域定制的 "think" 工具。它只需要最少的代码,但可以实现更结构化的推理。还可以考虑在系统提示中包含有关何时以及如何使用该工具的说明,并提供与您的领域相关的示例。
- 监控和改进。观察 Claude 在实践中如何使用该工具,并调整您的提示以鼓励更有效的思维模式。
最重要的是,添加此工具在性能结果方面几乎没有缺点。除非 Claude 决定使用它,否则它不会改变外部行为,也不会干扰您现有的工具或工作流程。
总结与展望
Anthropic 的研究表明,"think" 工具可以显著提高 Claude 3.5 Sonnet 模型在需要策略遵守和长工具调用链中进行推理的复杂任务上的性能。虽然 "think" 工具并非万能解决方案,但它为正确的用例提供了实质性的好处,而且实现复杂性极低。
我们期待看到开发者如何利用 "think" 工具构建更强大、更可靠、更透明的 AI 系统。未来,Anthropic 可能会进一步探索 "think" 工具与其他 AI 技术的结合,例如强化学习、知识图谱等,以进一步提升 AI 模型的推理和决策能力。同时,如何设计更有效的提示策略,以及如何将 "think" 工具应用于更广泛的领域,也将是值得研究的重要方向。