Claude 可以使用 Anthropic 定义的文本编辑器工具来查看和修改文本文件,帮助您调试、修复和改进代码或其他文本文档。这使 Claude 能够直接与您的文件交互,提供实际的帮助而不仅仅是建议更改。

使用文本编辑器工具之前

使用兼容的模型

Anthropic 的文本编辑器工具仅适用于 Claude 3.5 Sonnet 和 Claude 3.7 Sonnet:

  • Claude 3.7 Sonnet: text_editor_20250124
  • Claude 3.5 Sonnet: text_editor_20241022

两个版本提供相同的功能 - 您使用的版本应该与您正在使用的模型相匹配。

评估您的使用场景

以下是使用文本编辑器工具的一些示例:

  • 代码调试:让 Claude 识别和修复代码中的错误,从语法错误到逻辑问题。
  • 代码重构:让 Claude 通过有针对性的编辑来改进代码结构、可读性和性能。
  • 文档生成:要求 Claude 为您的代码库添加文档字符串、注释或 README 文件。
  • 测试创建:让 Claude 根据其对实现的理解为您的代码创建单元测试。

使用文本编辑器工具

使用 Messages API 向 Claude 提供文本编辑器工具(名为 str_replace_editor):

文本编辑器工具可以按以下方式使用:

1

向 Claude 提供文本编辑器工具和用户提示

  • 在您的 API 请求中包含文本编辑器工具
  • 提供可能需要检查或修改文件的用户提示,例如”您能修复我代码中的语法错误吗?”
2

Claude 使用工具检查文件或目录

  • Claude 评估需要查看的内容并使用 view 命令检查文件内容或列出目录内容
  • API 响应将包含带有 view 命令的 tool_use 内容块
3

执行查看命令并返回结果

  • 从 Claude 的工具使用请求中提取文件或目录路径
  • 读取文件内容或列出目录内容并将其返回给 Claude
  • 通过继续对话向 Claude 返回结果,新的 user 消息包含 tool_result 内容块
4

Claude 使用工具修改文件

  • 在检查文件或目录后,Claude 可能会使用 str_replace 等命令进行更改或使用 insert 在特定行号添加文本
  • 如果 Claude 使用 str_replace 命令,Claude 会构建一个格式正确的工具使用请求,其中包含旧文本和要替换的新文本
5

执行编辑并返回结果

  • 从 Claude 的工具使用请求中提取文件路径、旧文本和新文本
  • 在文件中执行文本替换
  • 将结果返回给 Claude
6

Claude 提供分析和解释

  • 在检查并可能编辑文件后,Claude 提供对发现内容和所做更改的完整解释

文本编辑器工具命令

文本编辑器工具支持几个用于查看和修改文件的命令:

view

view 命令允许 Claude 检查文件内容或列出目录内容。它可以读取整个文件或特定范围的行。

参数:

  • command:必须是 “view”
  • path:要查看的文件或目录的路径
  • view_range(可选):指定要查看的起始和结束行号的两个整数数组。行号从 1 开始,结束行为 -1 表示读取到文件末尾。此参数仅适用于查看文件,不适用于目录。

str_replace

str_replace 命令允许 Claude 将文件中的特定字符串替换为新字符串。这用于进行精确的编辑。

参数:

  • command:必须是 “str_replace”
  • path:要修改的文件路径
  • old_str:要替换的文本(必须完全匹配,包括空格和缩进)
  • new_str:替换旧文本的新文本

create

create 命令允许 Claude 创建具有指定内容的新文件。

参数:

  • command:必须是 “create”
  • path:新文件应创建的路径
  • file_text:要写入新文件的内容

insert

insert 命令允许 Claude 在文件的特定位置插入文本。

参数:

  • command:必须是 “insert”
  • path:要修改的文件路径
  • insert_line:在其后插入文本的行号(0 表示文件开头)
  • new_str:要插入的文本

undo_edit

undo_edit 命令允许 Claude 撤消对文件所做的最后一次编辑。

参数:

  • command:必须是 “undo_edit”
  • path:要撤消最后一次编辑的文件路径

示例:使用文本编辑器工具修复语法错误

此示例演示了 Claude 如何使用文本编辑器工具修复 Python 文件中的语法错误。

首先,您的应用程序向 Claude 提供文本编辑器工具和修复语法错误的提示:

Claude 将首先使用文本编辑器工具查看文件:

{
  "id": "msg_01XAbCDeFgHiJkLmNoPQrStU",
  "model": "claude-3-7-sonnet-20250219",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "我来帮您修复 primes.py 文件中的语法错误。首先让我看看文件以识别问题。"
    },
    {
      "type": "tool_use",
      "id": "toolu_01AbCdEfGhIjKlMnOpQrStU",
      "name": "str_replace_editor",
      "input": {
        "command": "view",
        "path": "primes.py"
      }
    }
  ]
}

您的应用程序应该读取文件并将其内容返回给 Claude:

行号

在上面的示例中,view 工具结果包含带有行号前缀的文件内容(例如,“1: def is_prime(n):”)。行号不是必需的,但对于成功使用 view_range 参数检查文件的特定部分和使用 insert_line 参数在精确位置添加内容至关重要。

Claude 将识别语法错误并使用 str_replace 命令修复它:

{
  "id": "msg_01VwXyZAbCdEfGhIjKlMnO",
  "model": "claude-3-7-sonnet-20250219",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "我在您的 primes.py 文件中找到了语法错误。在 `get_primes` 函数中,for 循环行末尾缺少冒号(:)。让我来修复这个问题。"
    },
    {
      "type": "tool_use",
      "id": "toolu_01PqRsTuVwXyZAbCdEfGh",
      "name": "str_replace_editor",
      "input": {
        "command": "str_replace",
        "path": "primes.py",
        "old_str": "    for num in range(2, limit + 1)",
        "new_str": "    for num in range(2, limit + 1):"
      }
    }
  ]
}

您的应用程序应该进行编辑并返回结果:

最后,Claude 将提供完整的修复说明:

{
  "id": "msg_01IjKlMnOpQrStUvWxYzAb",
  "model": "claude-3-7-sonnet-20250219",
  "stop_reason": "end_turn",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "我已经修复了您的 primes.py 文件中的语法错误。问题出在第 19 行的 `get_primes` 函数中。for 循环行末尾缺少冒号(:)。\n\n以下是我所做的更改:\n\n从:\n```python\nfor num in range(2, limit + 1)\n```\n\n改为:\n```python\nfor num in range(2, limit + 1):\n```\n\n在 Python 中,开始新代码块的语句末尾需要冒号,例如 for 循环、if 语句、函数定义等。没有冒号,Python 会报语法错误,因为它不知道代码块从哪里开始。\n\n您的代码现在应该可以正常运行了。该函数将正确生成指定限制内的质数列表。"
    }
  ]
}

实现文本编辑器工具

文本编辑器工具作为无模式工具实现,由 type: "text_editor_20250124" 标识。使用此工具时,您不需要像其他工具那样提供输入模式;模式已内置在 Claude 的模型中,无法修改。

1

初始化编辑器实现

创建辅助函数来处理文件操作,如读取、写入和修改文件。考虑实现备份功能以从错误中恢复。

2

处理编辑器工具调用

创建一个根据命令类型处理来自 Claude 的工具调用的函数:

def handle_editor_tool(tool_call):
    input_params = tool_call.input
    command = input_params.get('command', '')
    file_path = input_params.get('path', '')
    
    if command == 'view':
        # 读取并返回文件内容
        pass
    elif command == 'str_replace':
        # 替换文件中的文本
        pass
    elif command == 'create':
        # 创建新文件
        pass
    elif command == 'insert':
        # 在指定位置插入文本
        pass
    elif command == 'undo_edit':
        # 从备份恢复
        pass
3

实现安全措施

添加验证和安全检查:

  • 验证文件路径以防止目录遍历
  • 在进行更改前创建备份
  • 优雅地处理错误
  • 实现权限检查
4

处理 Claude 的响应

从 Claude 的响应中提取并处理工具调用:

# 处理 Claude 响应中的工具使用
for content in response.content:
    if content.type == "tool_use":
        # 根据命令执行工具
        result = handle_editor_tool(content)
        
        # 将结果返回给 Claude
        tool_result = {
            "type": "tool_result",
            "tool_use_id": content.id,
            "content": result
        }

在实现文本编辑器工具时,请记住:

  1. 安全性:该工具可以访问您的本地文件系统,因此要实施适当的安全措施。
  2. 备份:在允许编辑重要文件之前,始终创建备份。
  3. 验证:验证所有输入以防止意外更改。
  4. 唯一匹配:确保替换恰好匹配一个位置以避免意外编辑。

处理错误

使用文本编辑器工具时可能会发生各种错误。以下是如何处理这些错误的指导:

遵循实现最佳实践


定价和令牌使用

文本编辑器工具使用与其他 Claude 工具相同的定价结构。它遵循基于您使用的 Claude 模型的标准输入和输出令牌定价。

除了基本令牌外,文本编辑器工具还需要以下额外的输入令牌:

工具额外输入令牌
text_editor_20241022 (Claude 3.5 Sonnet)700 令牌
text_editor_20250124 (Claude 3.7 Sonnet)700 令牌

有关工具定价的更详细信息,请参阅工具使用定价

将文本编辑器工具与计算机使用集成

文本编辑器工具可以与计算机使用工具和其他 Anthropic 定义的工具一起使用。在组合这些工具时,您需要:

  1. 包含适当的测试版标头(如果与计算机使用一起使用)
  2. 将工具版本与您使用的模型匹配
  3. 考虑请求中包含的所有工具的额外令牌使用

有关在计算机使用上下文中使用文本编辑器工具的更多信息,请参阅计算机使用

更改日志

日期版本更改
2025 年 3 月 13 日text_editor_20250124引入独立的文本编辑器工具文档。此版本针对 Claude 3.7 Sonnet 进行了优化,但具有与之前版本相同的功能。
2024 年 10 月 22 日text_editor_20241022随 Claude 3.5 Sonnet 首次发布文本编辑器工具。提供通过 viewcreatestr_replaceinsertundo_edit 命令查看、创建和编辑文件的功能。

下一步

以下是一些如何以更方便和强大的方式使用文本编辑器工具的想法:

  • 集成到您的开发工作流程中:将文本编辑器工具构建到您的开发工具或 IDE 中
  • 创建代码审查系统:让 Claude 审查您的代码并进行改进
  • 构建调试助手:创建一个系统,让 Claude 帮助您诊断和修复代码中的问题
  • 实现文件格式转换:让 Claude 帮助您将文件从一种格式转换为另一种格式
  • 自动化文档:设置工作流程,让 Claude 自动为您的代码生成文档

当您使用文本编辑器工具构建应用程序时,我们很期待看到您如何利用 Claude 的功能来提升您的开发工作流程和生产力。