掘金 人工智能 07月07日 15:09
学习 Claude Code 的工具使用(三)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入介绍了Claude Code中用于解决复杂任务的四个关键工具:TodoRead、TodoWrite、Task和exit_plan_mode。详细阐述了这些工具的功能、使用场景,以及在处理多步骤任务、深度搜索和规划模式中的应用。文章还分享了如何通过这些工具更好地利用Claude Code,并提及了其扩展能力,帮助读者全面了解和掌握Claude Code。

✅ TodoRead和TodoWrite是与代办列表相关的工具,TodoWrite用于创建和管理结构化的待办列表,适用于复杂的多步骤任务、棘手任务以及用户明确要求使用待办列表的情况。TodoRead用于读取当前会话的代办列表,确保任务在正确的轨道上,但实际使用中较少触发。

✅ Task工具用于启动子智能体,解决需要深度搜索的复杂任务,如关键词搜索或文件查找。当Claude Code经过几次搜索未能找到匹配项时,会使用Task工具进行深度搜索,该工具会并行调用多个子智能体以最大化性能,但容易遇到限流错误和token消耗过大的问题。

✅ exit_plan_mode是Claude Code的规划模式,在该模式下,Claude Code不会执行任何修改操作,只能调用只读工具。它会分析用户问题并生成详细的执行计划,在用户确认后才会真正执行修改操作,类似于一个预演环节。

经过前两天的学习,我们已经掌握了 Claude Code 的命令执行、文件查找、文件读写、网络检索相关的工具,目前还剩下 TaskTodoWriteTodoReadexit_plan_mode 四个工具,今天就来学习下它们。这四个工具都是 Claude Code 用来解决复杂任务的,它们也代表着大模型在解决复杂任务时的几种不同的思路。

代办列表

代办列表(Todo List) 是一种组织复杂任务并跟踪处理进度的常用手段,Claude Code 在面对复杂的多步骤任务时,会使用代办列表将其分解成多个子项,然后按顺序依次处理:

和代办列表相关的工具有两个:

TodoRead 工具的描述中提到,Claude Code 应该主动且频繁地使用该工具,以了解当前代办列表的状态,确保一直处在正确的轨道上,特别是以下情况:

不过我测试下来发现很少触发 TodoRead 的调用,一直使用 TodoWrite 就足够完成整个任务,可能是我的任务都比较简单吧。但是我感觉 TodoRead 确实比较鸡肋,因为大模型在每次调用 TodoWrite 的时候,代办列表会反复出现在上下文中,还需要 TodoRead 再去查一次吗?

相对来说,TodoWrite 的使用场景就明确的多,比如下面这些情况:

代办列表中的每个待办事项有三种状态:

在任务处理的不同阶段实时地更新待办事项的状态:

TodoWrite 工具的描述中还给出了几个使用示例,供大家参考。

示例一:

用户:我想在应用程序设置中添加一个深色模式切换功能,完成后确保运行测试和构建!助手:我将帮你在应用程序设置中添加深色模式切换功能,让我创建一个待办列表来跟踪这个实现。*创建包含以下项目的待办列表:*1. 在设置页面创建深色模式切换组件2. 添加深色模式状态管理(上下文/存储)3. 为深色主题实现 CSS-in-JS 样式4. 更新现有组件以支持主题切换5. 运行测试和构建过程,解决发生的任何失败或错误*开始处理第一个任务*

示例二:

用户:帮我在项目中将函数 getCwd 重命名为 getCurrentWorkingDirectory助手:让我先搜索你的代码库以找到所有 getCwd 的出现位置。*使用grep或搜索工具定位代码库中getCwd的所有实例*助手:我在 8 个不同文件中找到了 15 个 getCwd 实例,让我创建一个待办列表来跟踪这些更改。*为每个需要更新的文件创建包含具体项目的待办列表*

示例三:

用户:我需要为我的电商网站实现这些功能:用户注册、产品目录、购物车和结账流程。助手:我将帮助实现这些功能。首先,让我们将所有功能添加到待办列表中。*创建一个待办列表,基于项目架构将每个功能分解为具体任务*助手:让我们从用户注册开始。这将涉及创建数据库模型、API端点和与你现有认证系统集成的前端表单。

示例四:

用户:你能帮助优化我的 React 应用程序吗?它渲染很慢,有性能问题。助手:我将帮助优化你的 React 应用程序。首先,让我检查你的代码库以识别潜在的性能瓶颈。*审查组件结构、渲染模式、状态管理和数据获取*助手:在分析你的代码库后,我识别出了几个性能问题。让我创建一个待办列表来跟踪我们的优化工作。*创建包含以下项目的待办列表:1) 为 ProductList 中的昂贵计算实现缓存,2) 为 Dashboard 中的长列表添加虚拟化,3) 优化 Gallery 组件中的图像加载,4) 修复 ShoppingCart 中的状态更新循环,5) 审查包大小并实现代码分割*让我们从为 ProductList 组件中的昂贵计算实现缓存开始。

子智能体

Task 工具用于启动一个子智能体,该子智能体可以访问除 Task 之外的其他 15 个工具,来解决 Deep Search 或 Deep Research 类的需要深度搜索的复杂任务。比如你正在搜索像 "config" 或 "logger" 这样的关键词,或者遇到 "哪个文件执行了X?" 这样的问题,很有可能就会触发使用这个工具。

在官方文档中,这个工具的名字叫做 Agent,但是看代码里,却叫做 Task

当 Claude Code 搜索关键词或文件时,如果经过几次搜索后还是没能找到匹配项或不能确定答案,就会使用 Task 工具来执行深度搜索。在下面的例子中,我位于 browser-use 的代码库中,想让 Claude Code 解释下 stealth=True 这个参数的含义,这个参数是 0.2.7 版本后才引入的,作用是通过 Playwright 绕过浏览器检测。但是我故意将代码切到老版本,看看它反应如何:

可以看到 Claude Code 先简单的使用 Grep 搜索了两次,发现都没有找到想要的结果,然后就开启了子智能体模式进行深度搜索。每个子智能体都是无状态的,Claude Code 会尽可能同时启动多个子智能体以最大化性能,从上图可以看到,在短短几分钟内就触发了 28 次工具调用。

注意,多个子智能体会并行调用,因此很容易遇到 rate_limit_error 限流错误,而且 token 消耗也非常大。

规划模式

这是 Claude Code 的一个隐藏功能,我翻遍官方文档,也没有找到关于它的详细说明,如果不是在请求报文中看到 exit_plan_mode 这个工具,我都不知道有这个模式。我们之前学过,在 Claude Code 的交互模式下有不少快捷键,比如按下 Shift + Tab 可以进入自动接受文件编辑的模式,如果你不小心按了两下,就会进入规划模式(下面显示 Plan mode 字样):

进入规划模式后,Claude Code 将不会执行任何修改操作,比如文件编辑、配置更改、提交代码等,只能调用搜索或文件读取这样的只读工具。Claude Code 会对用户的问题进行全面分析并生成详细的执行计划,之后,调用 exit_plan_mode 退出规划模式,同时向用户展示计划,得到用户确认后,才会真正地执行修改操作:

上面这个例子很好的展示了规划模式的工作步骤:先分析,再展示计划,等待用户确认。如果没问题,用户可以确认计划,退出规划模式;如果有问题,也可以要求 Claude Code 继续规划。

小结

至此,Claude Code 的 16 个工具总算学完了。通过深入了解每个工具的运行逻辑和使用场景,不仅能够帮助我们更好地发挥 Claude Code 的功能,也能快速定位和解决使用过程中可能出现的问题。对于常见的代码任务,内置工具通常足以应对,但如果遇到更复杂或超出内置功能范围的需求,Claude Code 还支持 MCP 协议,允许用户集成自定义工具和外部数据源,从而进一步拓展其能力边界。至于如何通过 MCP 集成外部工具,以及具体操作步骤,我们明天继续。

欢迎关注

如果这篇文章对您有所帮助,欢迎关注我的同名公众号:日习一技,每天学一点新技术

我会每天花一个小时,记录下我学习的点点滴滴。内容包括但不限于:

目标是让大家用5分钟读完就能有所收获,不需要太费劲,但却可以轻松获取一些干货。不管你是技术新手还是老鸟,欢迎给我提建议,如果有想学习的技术,也欢迎交流!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Claude Code 工具 Task TodoWrite exit_plan_mode
相关文章