使用 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_20250429","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?"}]}'
使用 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_20250429","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?"}]}'
使用 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?"}]}'
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_20250429","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_20250429","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_20250429","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_20250429","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_20250429","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_20250429","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_20250429"
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: