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-20250514","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-20250514","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
執行檢視命令並返回結果
從 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-20250514","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-20250514","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-20250514","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-20250514","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-20250514", 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-20250514","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-20250514","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-20250514","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-20250514","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-20250514","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-20250514", 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-20250514","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: