curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool","max_characters":10000}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
使用 Messages API 向 Claude 提供文本编辑器工具(名为 str_replace_based_edit_tool)。
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool","max_characters":10000}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
使用 Messages API 向 Claude 提供文本编辑器工具(名为 str_replace_editor):
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-3-7-sonnet-20250219","max_tokens":1024,"tools":[{"type":"text_editor_20250124","name":"str_replace_editor"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
使用 Messages API 向 Claude 提供文本编辑器工具(名为 str_replace_editor):
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-H"anthropic-beta: computer-use-2024-10-22"\-d '{"model":"claude-3-5-sonnet-20241022","max_tokens":1024,"tools":[{"type":"text_editor_20241022","name":"str_replace_editor"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
文本编辑器工具可以按以下方式使用:
1
向 Claude 提供文本编辑器工具和用户提示
在您的 API 请求中包含文本编辑器工具
提供可能需要检查或修改文件的用户提示,例如”您能修复我代码中的语法错误吗?”
2
Claude 使用工具检查文件或目录
Claude 评估需要查看的内容,并使用 view 命令检查文件内容或列出目录内容
API 响应将包含带有 view 命令的 tool_use 内容块
3
执行 view 命令并返回结果
从 Claude 的工具使用请求中提取文件或目录路径
读取文件内容或列出目录内容
如果在工具配置中指定了 max_characters 参数,则将文件内容截断到该长度
通过继续对话并使用包含 tool_result 内容块的新 user 消息将结果返回给 Claude
str_replace 命令允许 Claude 用新字符串替换文件中的特定字符串。这用于进行精确编辑。
参数:
command:必须是 “str_replace”
path:要修改的文件路径
old_str:要替换的文本(必须完全匹配,包括空白和缩进)
new_str:要插入以替换旧文本的新文本
{"type":"tool_use","id":"toolu_01A09q90qw90lq917835lq9","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):"}}
{"type":"tool_use","id":"toolu_01A09q90qw90lq917835lq9","name":"str_replace_editor","input":{"command":"insert","path":"primes.py","insert_line":0,"new_str":"\"\"\"Module for working with prime numbers.\n\nThis module provides functions to check if a number is prime\nand to generate a list of prime numbers up to a given limit.\n\"\"\"\n"}}
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
Claude 将首先使用文本编辑器工具查看文件:
{"id":"msg_01XAbCDeFgHiJkLmNoPQrStU","model":"claude-opus-4-1-20250805","stop_reason":"tool_use","role":"assistant","content":[{"type":"text","text":"I'll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."},{"type":"tool_use","id":"toolu_01AbCdEfGhIjKlMnOpQrStU","name":"str_replace_based_edit_tool","input":{"command":"view","path":"primes.py"}}]}
然后您的应用程序应该读取文件并将其内容返回给 Claude:
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"},{"role":"assistant","content":[{"type":"text","text":"I'\''ll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."},{"type":"tool_use","id":"toolu_01AbCdEfGhIjKlMnOpQrStU","name":"str_replace_based_edit_tool","input":{"command":"view","path":"primes.py"}}]},{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01AbCdEfGhIjKlMnOpQrStU","content":"1: def is_prime(n):\n2: \"\"\"Check if a number is prime.\"\"\"\n3: if n <= 1:\n4: return False\n5: if n <= 3:\n6: return True\n7: if n % 2 == 0 or n % 3 == 0:\n8: return False\n9: i = 5\n10: while i * i <= n:\n11: if n % i == 0 or n % (i + 2) == 0:\n12: return False\n13: i += 6\n14: return True\n15: \n16: def get_primes(limit):\n17: \"\"\"Generate a list of prime numbers up to the given limit.\"\"\"\n18: primes = []\n19: for num in range(2, limit + 1)\n20: if is_prime(num):\n21: primes.append(num)\n22: return primes\n23: \n24: def main():\n25: \"\"\"Main function to demonstrate prime number generation.\"\"\"\n26: limit = 100\n27: prime_list = get_primes(limit)\n28: print(f\"Prime numbers up to {limit}:\")\n29: print(prime_list)\n30: print(f\"Found {len(prime_list)} prime numbers.\")\n31: \n32: if __name__ == \"__main__\":\n33: main()"}]}]}'
{"id":"msg_01VwXyZAbCdEfGhIjKlMnO","model":"claude-opus-4-1-20250805","stop_reason":"tool_use","role":"assistant","content":[{"type":"text","text":"I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."},{"type":"tool_use","id":"toolu_01PqRsTuVwXyZAbCdEfGh","name":"str_replace_based_edit_tool","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):"}}]}
然后您的应用程序应该进行编辑并返回结果:
response = client.messages.create( model="claude-opus-4-1-20250805", max_tokens=1024, tools=[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}], messages=[# Previous messages...{"role":"assistant","content":[{"type":"text","text":"I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."},{"type":"tool_use","id":"toolu_01PqRsTuVwXyZAbCdEfGh","name":"str_replace_based_edit_tool","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):"}}]},{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01PqRsTuVwXyZAbCdEfGh","content":"Successfully replaced text at exactly one location."}]}])
最后,Claude 将提供修复的完整解释:
{"id":"msg_01IjKlMnOpQrStUvWxYzAb","model":"claude-opus-4-1-20250805","stop_reason":"end_turn","role":"assistant","content":[{"type":"text","text":"I've fixed the syntax error in your primes.py file. The issue was in the `get_primes` function at line 19. There was a missing colon (:) at the end of the for loop line.\n\nHere's what I changed:\n\nFrom:\n```python\nfor num in range(2, limit + 1)\n```\n\nTo:\n```python\nfor num in range(2, limit + 1):\n```\n\nIn Python, a colon is required at the end of statements that start a new code block, such as for loops, if statements, function definitions, etc. Without the colon, Python raises a syntax error because it doesn't know where the code block begins.\n\nYour code should now run correctly. The function will properly generate a list of prime numbers up to the specified limit."}]}
此示例演示了 Claude 4 模型如何使用文本编辑器工具修复 Python 文件中的语法错误。
首先,您的应用程序向 Claude 提供文本编辑器工具和修复语法错误的提示:
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"}]}'
Claude 将首先使用文本编辑器工具查看文件:
{"id":"msg_01XAbCDeFgHiJkLmNoPQrStU","model":"claude-opus-4-1-20250805","stop_reason":"tool_use","role":"assistant","content":[{"type":"text","text":"I'll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."},{"type":"tool_use","id":"toolu_01AbCdEfGhIjKlMnOpQrStU","name":"str_replace_based_edit_tool","input":{"command":"view","path":"primes.py"}}]}
然后您的应用程序应该读取文件并将其内容返回给 Claude:
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}],"messages":[{"role":"user","content":"There'\''s a syntax error in my primes.py file. Can you help me fix it?"},{"role":"assistant","content":[{"type":"text","text":"I'\''ll help you fix the syntax error in your primes.py file. First, let me take a look at the file to identify the issue."},{"type":"tool_use","id":"toolu_01AbCdEfGhIjKlMnOpQrStU","name":"str_replace_based_edit_tool","input":{"command":"view","path":"primes.py"}}]},{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01AbCdEfGhIjKlMnOpQrStU","content":"1: def is_prime(n):\n2: \"\"\"Check if a number is prime.\"\"\"\n3: if n <= 1:\n4: return False\n5: if n <= 3:\n6: return True\n7: if n % 2 == 0 or n % 3 == 0:\n8: return False\n9: i = 5\n10: while i * i <= n:\n11: if n % i == 0 or n % (i + 2) == 0:\n12: return False\n13: i += 6\n14: return True\n15: \n16: def get_primes(limit):\n17: \"\"\"Generate a list of prime numbers up to the given limit.\"\"\"\n18: primes = []\n19: for num in range(2, limit + 1)\n20: if is_prime(num):\n21: primes.append(num)\n22: return primes\n23: \n24: def main():\n25: \"\"\"Main function to demonstrate prime number generation.\"\"\"\n26: limit = 100\n27: prime_list = get_primes(limit)\n28: print(f\"Prime numbers up to {limit}:\")\n29: print(prime_list)\n30: print(f\"Found {len(prime_list)} prime numbers.\")\n31: \n32: if __name__ == \"__main__\":\n33: main()"}]}]}'
{"id":"msg_01VwXyZAbCdEfGhIjKlMnO","model":"claude-opus-4-1-20250805","stop_reason":"tool_use","role":"assistant","content":[{"type":"text","text":"I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."},{"type":"tool_use","id":"toolu_01PqRsTuVwXyZAbCdEfGh","name":"str_replace_based_edit_tool","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):"}}]}
然后您的应用程序应该进行编辑并返回结果:
response = client.messages.create( model="claude-opus-4-1-20250805", max_tokens=1024, tools=[{"type":"text_editor_20250728","name":"str_replace_based_edit_tool"}], messages=[# Previous messages...{"role":"assistant","content":[{"type":"text","text":"I found the syntax error in your primes.py file. In the `get_primes` function, there is a missing colon (:) at the end of the for loop line. Let me fix that for you."},{"type":"tool_use","id":"toolu_01PqRsTuVwXyZAbCdEfGh","name":"str_replace_based_edit_tool","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):"}}]},{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01PqRsTuVwXyZAbCdEfGh","content":"Successfully replaced text at exactly one location."}]}])
最后,Claude 将提供修复的完整解释:
{"id":"msg_01IjKlMnOpQrStUvWxYzAb","model":"claude-opus-4-1-20250805","stop_reason":"end_turn","role":"assistant","content":[{"type":"text","text":"I've fixed the syntax error in your primes.py file. The issue was in the `get_primes` function at line 19. There was a missing colon (:) at the end of the for loop line.\n\nHere's what I changed:\n\nFrom:\n```python\nfor num in range(2, limit + 1)\n```\n\nTo:\n```python\nfor num in range(2, limit + 1):\n```\n\nIn Python, a colon is required at the end of statements that start a new code block, such as for loops, if statements, function definitions, etc. Without the colon, Python raises a syntax error because it doesn't know where the code block begins.\n\nYour code should now run correctly. The function will properly generate a list of prime numbers up to the specified limit."}]}
此示例演示了 Claude Sonnet 3.7 如何使用文本编辑器工具修复 Python 文件中的语法错误。
首先,您的应用程序向 Claude 提供文本编辑器工具和修复语法错误的提示:
import anthropicclient = anthropic.Anthropic()response = client.messages.create( model="claude-3-7-sonnet-20250219", max_tokens=1024, tools=[{"type":"text_editor_20250124","name":"str_replace_editor"}], messages=[{"role":"user","content":"There's a syntax error in my primes.py file. Can you help me fix it?"}])print(response)
Claude Sonnet 3.7 示例遵循与上面 Claude 4 示例相同的格式,使用相同的工具调用和响应,但使用 text_editor_20250124 工具类型和 str_replace_editor 名称。
文本编辑器工具作为无模式工具实现。使用此工具时,您不需要像其他工具那样提供输入模式;模式内置于 Claude 的模型中,无法修改。
工具类型取决于模型版本:
Claude 4:type: "text_editor_20250728"
Claude Sonnet 3.7:type: "text_editor_20250124"
Claude Sonnet 3.5(已弃用):type: "text_editor_20241022"
1
初始化您的编辑器实现
创建辅助函数来处理文件操作,如读取、写入和修改文件。考虑实现备份功能以从错误中恢复。
2
处理编辑器工具调用
创建一个基于命令类型处理来自 Claude 的工具调用的函数:
defhandle_editor_tool(tool_call, model_version): input_params = tool_call.input command = input_params.get('command','') file_path = input_params.get('path','')if command =='view':# Read and return file contentspasselif command =='str_replace':# Replace text in filepasselif command =='create':# Create new filepasselif command =='insert':# Insert text at locationpasselif command =='undo_edit':# Check if it's a Claude 4 modelif'str_replace_based_edit_tool'in model_version:return{"error":"undo_edit command is not supported in Claude 4"}# Restore from backup for Claude 3.7/3.5pass
3
实现安全措施
添加验证和安全检查:
验证文件路径以防止目录遍历
在进行更改之前创建备份
优雅地处理错误
实现权限检查
4
处理 Claude 的响应
从 Claude 的响应中提取和处理工具调用:
# Process tool use in Claude's responsefor content in response.content:if content.type=="tool_use":# Execute the tool based on command result = handle_editor_tool(content)# Return result to Claude tool_result ={"type":"tool_result","tool_use_id": content.id,"content": result}
如果 Claude 尝试查看或修改不存在的文件,请在 tool_result 中返回适当的错误消息:
{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01A09q90qw90lq917835lq9","content":"Error: File not found","is_error":true}]}
如果 Claude 的 str_replace 命令匹配文件中的多个位置,请返回适当的错误消息:
{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01A09q90qw90lq917835lq9","content":"Error: Found 3 matches for replacement text. Please provide more context to make a unique match.","is_error":true}]}
如果 Claude 的 str_replace 命令在文件中不匹配任何文本,请返回适当的错误消息:
{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01A09q90qw90lq917835lq9","content":"Error: No match found for replacement. Please check your text and try again.","is_error":true}]}
如果在创建、读取或修改文件时出现权限问题,请返回适当的错误消息:
{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01A09q90qw90lq917835lq9","content":"Error: Permission denied. Cannot write to file.","is_error":true}]}
当要求 Claude 修复或修改代码时,要具体说明需要检查哪些文件或需要解决哪些问题。清晰的上下文有助于 Claude 识别正确的文件并进行适当的更改。
不太有用的提示:“您能修复我的代码吗?”
更好的提示:“我的 primes.py 文件中有一个语法错误,阻止它运行。您能修复它吗?”
在需要时清楚地指定文件路径,特别是如果您正在处理多个文件或不同目录中的文件。
不太有用的提示:“查看我的辅助文件”
更好的提示:“您能检查我的 utils/helpers.py 文件是否有任何性能问题吗?”
在您的应用程序中实现备份系统,在允许 Claude 编辑文件之前创建文件副本,特别是对于重要或生产代码。
defbackup_file(file_path):"""Create a backup of a file before editing.""" backup_path =f"{file_path}.backup"if os.path.exists(file_path):withopen(file_path,'r')as src,open(backup_path,'w')as dst: dst.write(src.read())
defsafe_replace(file_path, old_text, new_text):"""Replace text only if there's exactly one match."""withopen(file_path,'r')as f: content = f.read() count = content.count(old_text)if count ==0:return"Error: No match found"elif count >1:returnf"Error: Found {count} matches"else: new_content = content.replace(old_text, new_text)withopen(file_path,'w')as f: f.write(new_content)return"Successfully replaced text"
Claude 对文件进行更改后,通过运行测试或检查代码是否仍按预期工作来验证更改。
defverify_changes(file_path):"""Run tests or checks after making changes."""try:# For Python files, check for syntax errorsif file_path.endswith('.py'):import astwithopen(file_path,'r')as f: ast.parse(f.read())return"Syntax check passed"except Exception as e:returnf"Verification failed: {str(e)}"
The text editor tool uses the same pricing structure as other tools used with Claude. It follows the standard input and output token pricing based on the Claude model you’re using.
In addition to the base tokens, the following additional input tokens are needed for the text editor tool: