Chuyển đến nội dung chính

Claude Sonnet 4: Hướng dẫn thực hành dành cho nhà phát triển

Khám phá các tính năng dành cho nhà phát triển của Claude Sonnet 4—thực thi mã, Files API và sử dụng công cụ—bằng cách xây dựng một tác nhân giải toán bằng Python.
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Gần đây Anthropic đã ra mắt các bản cập nhật Claude Sonnet 4.5, Claude Agents SDK và Imagine with Claude.

Với bản phát hành Claude Sonnet 4, các nhà phát triển hiện có quyền truy cập vào những khả năng mạnh mẽ mới—bao gồm thực thi mã gốc, Files API linh hoạt và sử dụng công cụ động. Các tính năng này mở ra nhiều khả năng thú vị để xây dựng ứng dụng AI vượt xa tương tác văn bản đơn thuần.

Trong hướng dẫn này, tôi sẽ giới thiệu các tính năng mới bằng cách xây dựng một tác nhân dựa trên Python có thể giải các bài toán toán học nâng cao ngay từ terminal. Bạn sẽ học cách dùng công cụ thực thi mã gốc mới được giới thiệu và Files API.

Kết thúc bài, bạn sẽ có một tác nhân hoạt động nhờ Claude Sonnet 4 để phân tích bài toán, viết và chạy mã Python, cũng như kết xuất trực quan như các ví dụ dưới đây.

Các biểu đồ mẫu được tạo bởi công cụ thực thi mã gốc của Claude 4 Sonnet

Xem kho GitHub của dự án này để xem toàn bộ mã nguồn xây dựng ứng dụng.

Nếu bạn mới bắt đầu hành trình xây dựng với các LLM như Claude, lộ trình nhà phát triển AI này phác thảo các công cụ, kỹ năng và lộ trình học cần thiết để bắt đầu.

Có gì mới trong Anthropic API

Trước khi vào phần hướng dẫn, hãy điểm qua các tính năng mới vừa ra mắt thông qua Anthropic API. Nếu bạn đã nắm rõ, có thể bỏ qua phần này.

Tôi cho rằng toàn bộ thông báo về Claude 4 có thể được tóm tắt trong một hình này:

Hình ảnh cho thấy các mô hình Claude 4 dẫn đầu trên SWE-bench Verified, một tiêu chuẩn đánh giá hiệu suất trên các tác vụ kỹ thuật phần mềm thực tế.

Các mô hình Claude 4 (Opus và Sonnet 4) vượt qua đối thủ ở các tác vụ kỹ thuật phần mềm đã được xác minh với khoảng cách đáng kể. Anthropic đạt được điều này bằng cách giới thiệu một số thay đổi quan trọng trong cách mô hình vận hành:

  1. Thời gian chạy dài: Cả hai mô hình hỗ trợ thực thi tác vụ liên tục trong nhiều giờ để giải bài toán với hàng nghìn bước.
  2. Tư duy mở rộng với việc dùng công cụ: Cả hai mô hình nay có thể dùng các công cụ như tìm kiếm web trong khi suy luận kéo dài, cho phép Claude luân phiên giữa lập luận và dùng công cụ để cải thiện phản hồi.
  3. Thực thi công cụ song song: Mô hình giờ có thể dùng nhiều công cụ đồng thời thay vì tuần tự.
  4. Theo sát hướng dẫn chính xác hơn: Khả năng điều hướng tăng cường cho phép người dùng kiểm soát tốt hơn cách triển khai và cách Claude đáp ứng yêu cầu.
  5. Khả năng ghi nhớ được cải thiện: Khi được cấp quyền truy cập tệp cục bộ, mô hình có thể trích xuất và lưu các dữ kiện quan trọng để duy trì tính liên tục và xây dựng tri thức ngầm theo thời gian.
  6. Giảm hành vi đi đường tắt: So với các phiên bản trước, cả hai mô hình ít có khả năng dùng lối tắt hoặc kẽ hở để hoàn thành tác vụ hơn 65% (xem bài thông báo đầy đủ để biết chi tiết).

Ngoài ra, trong thông báo về họ mô hình Claude 4, Anthropic đã bổ sung bốn tính năng mới để xây dựng tác nhân AI: công cụ thực thi mã, Files API, MCP connector và bộ nhớ đệm prompt mở rộng. Những công cụ này thay đổi cách nhà phát triển có thể xây dựng ứng dụng AI.

Công cụ thực thi mã: Chạy mã Python an toàn

Công cụ thực thi mã cho phép Claude chạy mã Python trong môi trường sandbox an toàn. Thay vì chỉ đưa gợi ý mã, giờ đây Claude có thể thực thi mã, phân tích kết quả và lặp lại lời giải.

Để dùng công cụ thực thi mã, thêm nó vào mảng tools và bao gồm header beta bắt buộc:

from anthropic import Anthropic

# Initialize client with the code execution beta header
client = Anthropic(
   default_headers={
       "anthropic-beta": "code-execution-2025-05-22"
   }
)

# Send a request that triggers code execution
response = client.messages.create(
   model="claude-sonnet-4-20250514",
   max_tokens=4096,
   messages=[{
       "role": "user",
       "content": "Solve the quadratic equation 2x² + 5x - 3 = 0 and plot the parabola"
   }],
   tools=[{
       "type": "code_execution_20250522",
       "name": "code_execution"
   }]
)

Khi Claude thực thi mã, phản hồi sẽ chứa cả mã đã tạo và kết quả thực thi. Dưới đây là cách phân tích các thành phần khác nhau:

# Parse the response to extract code and results
for item in response.content:
   if item.type == "server_tool_use":
       # This contains the actual Python code Claude wrote
       print(f"Code executed:\n{item.input['code']}")
   elif item.type == "code_execution_tool_result":
       # This contains the output from running the code
       print(f"Output:\n{item.content['stdout']}")
       if item.content.get('stderr'):
           print(f"Errors:\n{item.content['stderr']}")

Giới hạn sandbox: Môi trường thực thi mã có một số hạn chế bảo mật tích hợp. Claude chạy trong container cách ly, không có truy cập internet, tài nguyên tính toán giới hạn (1 GB RAM, 5 GB dung lượng đĩa và 1 CPU), và không thể truy cập hệ thống tệp cục bộ của bạn. Môi trường được cài sẵn các thư viện phổ biến như numpy, pandas, matplotlib và scipy, nhưng bạn không thể cài thêm gói trong lúc thực thi.

Files API: Ngữ cảnh tệp bền vững cho tác vụ phức tạp

Files API Files API cho phép bạn tải tài liệu một lần và tham chiếu chúng qua nhiều cuộc hội thoại. Điều này loại bỏ nhu cầu đưa tài liệu lớn vào mọi yêu cầu API.

Đầu tiên, tải tệp của bạn lên máy chủ của Anthropic:

# Upload a file once - this stores it on Anthropic's servers
uploaded_file = client.beta.files.upload(
   file=open("sales_data.csv", "rb"),
   purpose="user_upload"
)
# The uploaded_file.id can now be referenced in multiple conversations

Sau khi tải lên, tham chiếu tệp trong các lệnh gọi API bằng kiểu nội dung container_upload:

# Reference the uploaded file in a conversation
response = client.messages.create(
   model="claude-sonnet-4-20250514",
   max_tokens=4096,
   messages=[{
       "role": "user",
       "content": [
           {"type": "text", "text": "Create a quarterly sales report from this data"},
           {"type": "container_upload", "file_id": uploaded_file.id}
       ]
   }],
   tools=[{
       "type": "code_execution_20250522",
       "name": "code_execution"
   }]
)

Khi Claude tạo tệp trong quá trình thực thi mã (như biểu đồ hoặc dữ liệu đã xử lý), bạn có thể trích xuất và tải chúng xuống:

# Extract file IDs of any files Claude created during execution
def extract_created_files(response):
   file_ids = []
   for item in response.content:
       if item.type == 'code_execution_tool_result':
           content = item.content
           if content.get('type') == 'code_execution_result':
               # Look for file objects in the execution results
               for file_obj in content.get('content', []):
                   if 'file_id' in file_obj:
                       file_ids.append(file_obj['file_id'])
   return file_ids

# Download any files Claude created
created_files = extract_created_files(response)
for file_id in created_files:
   file_content = client.beta.files.download(file_id)
   file_content.write_to_file(f"output_{file_id}.png")

MCP connector: Kết nối Claude vào mọi quy trình

MCP connector mang hỗ trợ Model Context Protocol trực tiếp vào API. MCP cho phép Claude kết nối với các dịch vụ bên ngoài như cơ sở dữ liệu, API và công cụ năng suất mà không cần mã tích hợp tùy chỉnh.

Trước đây, kết nối tới máy chủ MCP yêu cầu xây dựng hạ tầng phía client. Giờ đây, bạn chỉ cần cung cấp URL máy chủ MCP từ xa trong yêu cầu API, và Claude sẽ tự động khám phá công cụ sẵn có, quản lý kết nối và xử lý xác thực.

Điều này mở ra quyền truy cập vào hệ sinh thái máy chủ MCP ngày càng lớn từ các công ty như Zapier và Asana, cho phép bạn xây dựng tác nhân có thể đọc lịch của bạn, cập nhật công cụ quản lý dự án hoặc tích hợp với hàng trăm dịch vụ khác.

Bắt đầu với Claude Sonnet 4: Tổng quan dự án và thiết lập

Giờ chúng ta đã hiểu các tính năng API mới, hãy xây dựng bộ giải bài toán tương tác. Ứng dụng sẽ kết hợp khả năng thực thi mã của Claude với xử lý tệp để tạo một trợ lý toán học hoàn chỉnh.

Ứng dụng của chúng ta sẽ nhận câu hỏi toán bằng ngôn ngữ tự nhiên, thực thi mã Python để giải, tạo biểu đồ trực quan và lưu các báo cáo đầy đủ.

Để có cách tiếp cận có hệ thống khi xây dựng các dự án như thế này, hãy xem lộ trình Developing AI Applications.

> Lưu ý: Vì chúng ta sẽ ngắt các khối mã dài để chèn giải thích, thụt đầu dòng trong đoạn trích có thể không hoàn toàn chính xác. Vì vậy, chúng tôi khuyên bạn mở kho GitHub của dự án trong một tab riêng khi theo dõi.

Bước 0: Thiết lập môi trường dự án Claude Sonnet 4

Trước khi viết mã, hãy thiết lập môi trường phát triển và phụ thuộc.

Tạo thư mục mới cho dự án và tạo các tệp cần thiết:

mkdir math-solver
cd math-solver
touch math_solver.py demo_problems.py requirements.txt README.md

Tạo tệp requirements.txt với các phụ thuộc cần thiết:

anthropic>=0.42.0

Cài đặt phụ thuộc:

pip install -r requirements.txt

Đặt khóa Anthropic API làm biến môi trường:

export ANTHROPIC_API_KEY="your-api-key-here"

Bước 1: Thiết kế cấu trúc ứng dụng

Hãy bắt đầu bằng cách tạo cấu trúc cơ bản cho lớp MathSolver. Lớp này sẽ xử lý toàn bộ chức năng chính: giao tiếp API, quản lý tệp và tương tác người dùng.

Trước tiên, thiết lập phần import và cấu trúc cơ bản:

#!/usr/bin/env python3
"""
Interactive Math Problem Solver using Claude 4 Code Execution Tool

This application allows users to ask math questions in natural language,
gets solutions using Claude's code execution capabilities, and saves
both visualizations and detailed markdown reports.
"""

import os
import json
import datetime
from pathlib import Path
from typing import List, Dict, Any
from anthropic import Anthropic

Giờ hãy định nghĩa cấu trúc lớp chính:

class MathSolver:
   def __init__(self, api_key: str = None):
       """Initialize the Math Solver with Anthropic client."""
       # API setup and directory creation will go here
       pass

   def solve_problem(self, question: str) -> Dict[str, Any]:
       """Send a math question to Claude and get solution with code execution."""
       pass
Here are the methods for file and report handling:
def extract_files_from_response(self, response) -> List[str]:
       """Extract file IDs from Claude's response."""
       pass

   def download_files(self, file_ids: List[str]) -> List[str]:
       """Download files created by code execution to local storage."""
       pass

   def extract_code_blocks(self, response) -> List[str]:
       """Extract all code blocks from the response."""
       Pass

Cuối cùng, thêm phần quản lý phiên và điểm vào chương trình:

def generate_markdown_report(self, result: Dict[str, Any], downloaded_files: List[str]) -> str:
       """Generate a comprehensive markdown report of the solution."""
       pass

   def run_interactive_session(self):
       """Run the main interactive session loop."""
       pass


def main():
   """Main entry point for the application."""
   pass

Cấu trúc này cho chúng ta một lộ trình rõ ràng: khởi tạo, giải bài toán, xử lý tệp, tạo báo cáo và tương tác người dùng. Mỗi phương thức có một trách nhiệm cụ thể trong quy trình giải toán.

Xây dựng bộ giải Toán với công cụ thực thi mã của Claude Sonnet 4

Bây giờ, hãy triển khai chức năng cốt lõi dùng công cụ thực thi mã của Claude và phản hồi streaming.

Bước 2: Khởi tạo Claude với header API an toàn

Hãy triển khai phương thức __init__() để xử lý thiết lập client API và tạo thư mục.

Đầu tiên, xử lý quản lý khóa API:

def __init__(self, api_key: str = None):
   """Initialize the Math Solver with Anthropic client."""
   if not api_key:
       api_key = os.getenv("ANTHROPIC_API_KEY")
       if not api_key:
           raise ValueError(
               "Please set ANTHROPIC_API_KEY environment variable or provide api_key"
           )

Tiếp theo, thiết lập client Anthropic với các header beta bắt buộc:

# Initialize client with both code execution and files API headers
   self.client = Anthropic(
       api_key=api_key,
       default_headers={
           "anthropic-beta": "code-execution-2025-05-22,files-api-2025-04-14"
       },
   )

Cuối cùng, tạo cấu trúc thư mục đầu ra:

# Create organized output directories
   self.output_dir = Path("math_solver_output")
   self.images_dir = self.output_dir / "images"
   self.reports_dir = self.output_dir / "reports"

   self.output_dir.mkdir(exist_ok=True)
   self.images_dir.mkdir(exist_ok=True)
   self.reports_dir.mkdir(exist_ok=True)

   print(f"📁 Output directories created:")
   print(f"   • Images: {self.images_dir}")
   print(f"   • Reports: {self.reports_dir}")

Khởi tạo này thực hiện ba việc quan trọng:

  1. Quản lý khóa API: Kiểm tra khóa trong biến môi trường trước, sau đó đến tham số truyền vào.
  2. Thiết lập client: Tạo client Anthropic với cả hai header beta cho thực thi mã và Files API.
  3. Cấu trúc thư mục: Tạo các thư mục có tổ chức để lưu hình ảnh và báo cáo.

Bước 3: Viết hàm giải cốt lõi

Phương thức solve_problem() là trung tâm của ứng dụng. Nó gửi yêu cầu tới Claude với hỗ trợ streaming.

Bắt đầu với chữ ký hàm và thiết lập ban đầu:

def solve_problem(self, question: str) -> Dict[str, Any]:
   """
   Send a math question to Claude and get solution with code execution.
   """
   print(f"\n🤔 Thinking about: {question}")

   try:
       # Use streaming to show real-time progress
       with self.client.messages.stream(
           model="claude-sonnet-4-20250514",
           max_tokens=4096,
Now we configure the message and tool specification:
messages=[
               {
                   "role": "user",
                   "content": f"""Solve this math problem using code execution:

Problem: {question}

Please:
1. Solve the problem with actual Python code
2. Create visualizations using matplotlib if helpful
3. Save any plots as PNG files using plt.savefig()
4. Show your calculations step by step
5. Use descriptive filenames for saved plots

Execute Python code to solve this problem.""",
               }
           ],
           tools=[{"type": "code_execution_20250522", "name": "code_execution"}],
       ) as stream:
The streaming event processing handles real-time updates:
print("\n💭 Claude is working...")

           # Process streaming events and show progress
           for event in stream:
               if event.type == "content_block_start":
                   if hasattr(event.content_block, "type"):
                       if event.content_block.type == "text":
                           print("\n📝 Response:", end=" ", flush=True)
                       elif event.content_block.type == "server_tool_use":
                           print(f"\n🔧 Using tool: {event.content_block.name}")

Chúng ta xử lý các loại sự kiện streaming khác nhau:

	elif event.type == "content_block_delta":
                   if hasattr(event.delta, "text"):
                       print(event.delta.text, end="", flush=True)

               elif event.type == "content_block_stop":
                   print("", flush=True)  # New line

               elif event.type == "message_delta":
                   if hasattr(event.delta, "stop_reason"):
                       print(f"\n✅ Completed: {event.delta.stop_reason}")

Cuối cùng, chúng ta trả về kết quả hoặc xử lý lỗi:

	# Get the final message
           final_message = stream.get_final_message()

           return {
               "response": final_message,
               "question": question,
               "timestamp": datetime.datetime.now().isoformat(),
           }

   except Exception as e:
       print(f"❌ Error solving problem: {e}")
       return None

Hàm này minh họa một số khái niệm quan trọng:

  • Hỗ trợ streaming: Chúng ta dùng client.messages.stream() thay vì client.messages.create() để nhận phản hồi theo thời gian thực khi Claude xử lý bài toán.
  • Xử lý sự kiện: API streaming gửi các loại sự kiện khác nhau:
    • content_block_start: Khi Claude bắt đầu viết văn bản hoặc sử dụng công cụ
    • content_block_delta: Khi nội dung đang được tạo
    • content_block_stop: Khi một khối nội dung kết thúc
    • message_delta: Khi toàn bộ thông điệp hoàn tất
  • Khai báo công cụ: Chúng ta bao gồm công cụ thực thi mã trong mảng tools với kiểu chính xác "code_execution_20250522".
  • Nhắc nhở có cấu trúc: Prompt hướng dẫn rõ ràng Claude sử dụng thực thi mã và lưu mọi biểu đồ trực quan.

Bước 4: Giải bài toán với thực thi mã dạng streaming

Khi Claude tạo tệp trong lúc thực thi mã (như biểu đồ matplotlib), chúng ta cần trích xuất ID tệp của chúng và tải về máy.

Phương thức trích xuất tệp sẽ duyệt qua cấu trúc phản hồi:

def extract_files_from_response(self, response) -> List[str]:
   """Extract file IDs from Claude's response."""
   file_ids = []

   for item in response.content:
       if item.type == "code_execution_tool_result":
           content_item = item.content
          
           if isinstance(content_item, dict):
               if content_item.get("type") == "code_execution_result":
                   content_list = content_item.get("content", [])

Sau đó chúng ta tìm ID tệp trong nội dung:

  for file_item in content_list:
                       if isinstance(file_item, dict) and "file_id" in file_item:
                           file_ids.append(file_item["file_id"])

   return file_ids

Quy trình tải xuống sẽ lấy tệp và lưu về máy cục bộ:

def download_files(self, file_ids: List[str]) -> List[str]:
   """Download files created by code execution to local storage."""
   downloaded_files = []

   for file_id in file_ids:
       try:
           # Get file metadata and download content
           file_metadata = self.client.beta.files.retrieve_metadata(file_id)
           filename = file_metadata.filename
          
           file_content = self.client.beta.files.download(file_id)
           local_path = self.images_dir / filename
           file_content.write_to_file(str(local_path))

Chúng ta theo dõi các tệp đã tải và xử lý lỗi:

downloaded_files.append(str(local_path))
           print(f"✅ Downloaded: {filename}")

       except Exception as e:
           print(f"❌ Error downloading file {file_id}: {e}")

   return downloaded_files
  • Logic trích xuất tệp: Phương thức extract_files_from_response() duyệt qua cấu trúc phản hồi để tìm ID tệp. Kết quả thực thi mã được lồng theo định dạng cụ thể, trong đó tệp xuất hiện trong mảng content.
  • Quy trình tải tệp: Phương thức download_files():
    • Lấy siêu dữ liệu cho mỗi tệp (bao gồm tên tệp gốc)
    • Tải nội dung tệp bằng Files API
    • Lưu tệp vào cấu trúc thư mục có tổ chức
    • Trả về danh sách đường dẫn tệp cục bộ để dùng sau

Trích xuất kết quả từ Claude Sonnet 4: Mã, trực quan hóa và báo cáo

Giờ hãy tái sử dụng và kiểm tra mã cùng đầu ra do Claude tạo.

Bước 5: Tải về các đầu ra trực quan từ phản hồi của Claude

Đối với báo cáo markdown, chúng ta muốn bao gồm đoạn mã Python thực tế mà Claude đã thực thi:

def extract_code_blocks(self, response) -> List[str]:
   """Extract all code blocks from the response."""
   code_blocks = []

   for item in response.content:
       if item.type == "server_tool_use" and item.name == "code_execution":
           if (
               hasattr(item, "input")
               and isinstance(item.input, dict)
               and "code" in item.input
           ):
               code_blocks.append(item.input["code"])

   return code_blocks

Phương thức này tìm các mục server_tool_use có tên "code_execution" và trích xuất mã Python từ trường input. Điều này cung cấp đoạn mã thực tế mà Claude đã viết và thực thi.

Bước 6: Trích xuất mã của Claude để tái sử dụng và kiểm định

Trình tạo báo cáo của chúng ta sẽ tạo tài liệu toàn diện cho mỗi lời giải.

Đầu tiên, chúng ta trích xuất nội dung và thiết lập cấu trúc báo cáo:

def generate_markdown_report(self, result: Dict[str, Any], downloaded_files: List[str]) -> str:
   """Generate a comprehensive markdown report of the solution."""
   response = result["response"]
   question = result["question"]
   timestamp = result["timestamp"]

   # Extract text content and code blocks
   text_content = []
   code_blocks = self.extract_code_blocks(response)

   for item in response.content:
       if item.type == "text":
           text_content.append(item.text)

Tiếp theo, tạo tên tệp an toàn kèm dấu thời gian:

# Generate filename with timestamp
   safe_question = "".join(
       c for c in question[:50] if c.isalnum() or c in (" ", "-", "_")
   ).strip()
   filename = f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}_{safe_question.replace(' ', '_')}.md"
   filepath = self.reports_dir / filename

Chúng ta xây dựng nội dung markdown với phần đầu và phát biểu bài toán:

# Create markdown content
   markdown_content = f"""# Math Problem Solution Report

**Generated:** {timestamp}
**Question:** {question}

---

## Problem Statement

{question}

---

## Solution

"""
Add the solution explanation and code blocks:
# Add the main explanation
   for text in text_content:
       markdown_content += f"{text}\n\n"

   # Add code sections
   if code_blocks:
       markdown_content += "---\n\n## Code Used\n\n"
       for i, code in enumerate(code_blocks, 1):
           markdown_content += f"### Code Block {i}\n\n```python\n{code}\n```\n\n"

Bao gồm mọi trực quan hóa đã tạo:

# Add images section
   if downloaded_files:
       markdown_content += "---\n\n## Generated Visualizations\n\n"
       for file_path in downloaded_files:
           filename = Path(file_path).name
           relative_path = f"../images/{filename}"
           markdown_content += f"![{filename}]({relative_path})\n\n"
Finally, add metadata and save the report:
# Add footer
   markdown_content += f"""---

## Report Details

- **Generated by:** Claude 4 Math Solver
- **Model:** claude-sonnet-4-20250514
- **Timestamp:** {timestamp}
- **Files created:** {len(downloaded_files)} visualization(s)

---

*This report was automatically generated using Claude's code execution capabilities.*
"""

   # Save the report
   with open(filepath, "w", encoding="utf-8") as f:
       f.write(markdown_content)

   return str(filepath)

Trình tạo báo cáo này tạo ra tài liệu markdown có cấu trúc bao gồm:

  • Phát biểu bài toán và siêu dữ liệu
  • Phần giải thích lời giải từ phản hồi văn bản của Claude
  • Các khối mã hiển thị mã Python thực tế đã thực thi
  • Nhúng trực quan hóa bằng đường dẫn tương đối
  • Siêu dữ liệu báo cáo để theo dõi và tham chiếu

Phần tạo tên tệp sẽ tạo tên an toàn, có dấu thời gian để không xung đột với tệp hiện có.

Chạy bộ giải Toán tương tác

Tiếp theo, tập trung vào vòng lặp tương tác người dùng, công cụ demo và kiểm thử.

Bước 7: Quản lý phiên tương tác

Vòng lặp phiên tương tác xử lý đầu vào người dùng và điều phối mọi thành phần.

Chúng ta bắt đầu với thiết lập phiên và lời chào mừng:

def run_interactive_session(self):
   """Run the main interactive session loop."""
   print("🧮 Interactive Math Problem Solver with Claude 4")
   print("=" * 60)
   print("Ask me any math question and I'll solve it step by step!")
   print("I can handle algebra, calculus, statistics, geometry, and more.")
   print("Type 'quit', 'exit', or 'q' to end the session.")
   print("=" * 60)

   session_count = 0

Vòng lặp chính xử lý đầu vào và điều kiện thoát:

while True:
       try:
           # Get user input
           question = input(f"\n📝 Question #{session_count + 1}: ").strip()

           if question.lower() in ["quit", "exit", "q"]:
               print("\n👋 Thanks for using the Math Solver! Goodbye!")
               break

           if not question:
               print("Please enter a question.")
               continue

           session_count += 1

Với mỗi câu hỏi hợp lệ, chúng ta xử lý toàn bộ quy trình:

# Solve the problem
           result = self.solve_problem(question)
           if not result:
               continue

           # Extract and download any files created
           file_ids = self.extract_files_from_response(result["response"])
           downloaded_files = []
           if file_ids:
               print(f"📥 Downloading {len(file_ids)} file(s)...")
               downloaded_files = self.download_files(file_ids)

Chúng ta kết thúc với việc tạo báo cáo và phản hồi cho người dùng:

# Generate markdown report
           print(f"📝 Generating report...")
           report_path = self.generate_markdown_report(result, downloaded_files)

           print(f"\n✅ Solution complete!")
           print(f"📄 Report saved: {report_path}")
           if downloaded_files:
               print(f"🖼️  Visualizations: {len(downloaded_files)} file(s) saved")

       except KeyboardInterrupt:
           print("\n\n👋 Session interrupted. Goodbye!")
           break
       except Exception as e:
           print(f"❌ An error occurred: {e}")
           print("Please try again with a different question.")

Vòng lặp này minh họa quy trình hoàn chỉnh:

  1. Tương tác người dùng: Nhắc nhập câu hỏi và xử lý lệnh thoát
  2. Giải bài toán: Gọi phương thức solve_problem() của chúng ta
  3. Xử lý tệp: Trích xuất và tải xuống mọi tệp được tạo
  4. Tạo báo cáo: Tạo báo cáo markdown toàn diện
  5. Xử lý lỗi: Xử lý ngắt quãng và lỗi một cách mượt mà

Bước 8: Viết điểm vào ứng dụng

Cuối cùng, chúng ta cần hàm main() để khởi tạo và chạy ứng dụng:

def main():
   """Main entry point for the application."""
   try:
       solver = MathSolver()
       solver.run_interactive_session()
   except Exception as e:
       print(f"❌ Failed to initialize Math Solver: {e}")
       print("Make sure you have set the ANTHROPIC_API_KEY environment variable.")
       return 1

   return 0


if __name__ == "__main__":
   exit(main())

Điểm vào đơn giản này xử lý lỗi khởi tạo (như thiếu API key) và đưa ra thông điệp hữu ích.

Bước 9: Thêm trình tạo bài toán demo

Để giúp người dùng bắt đầu, hãy tạo một script riêng với các bài toán ví dụ. Tạo demo_problems.py.

Đầu tiên, định nghĩa các danh mục bài toán:

# demo_problems.py
#!/usr/bin/env python3
"""
Demo problems for the Interactive Math Problem Solver
"""

# Sample problems organized by difficulty and topic
DEMO_PROBLEMS = {
   "Beginner": [
       "What is 15% of 240?",
       "Solve for x: 3x + 7 = 22",
       "Find the area of a circle with radius 5",
       "Convert 45 degrees to radians",
       "Calculate the hypotenuse of a right triangle with legs 3 and 4",
   ],

Thêm các bộ bài toán trung cấp và nâng cao:

"Intermediate": [
       "Solve the quadratic equation: 2x^2 + 5x - 3 = 0",
       "Graph y = x^2 - 4x + 3 and find its vertex",
       "Calculate mean, median, and standard deviation of [12, 15, 18, 22, 25, 28]",
       "Find where f(x) = x^3 - 3x^2 + 2 crosses the x-axis",
       "Solve the system of equations: 2x + 3y = 7, x - y = 1",
   ],
   "Advanced": [
       "Find the derivative of sin(x) * e^x and plot both functions",
       "Calculate the integral of x^2 from 0 to 5",
       "Use Newton's method to find the root of x^3 - 2x - 5 = 0",
       "Perform linear regression on data points and plot the results",
       "Solve the differential equation dy/dx = x*y with initial condition y(0) = 1",
   ],
}

Tạo hàm trợ giúp để chọn ngẫu nhiên và hiển thị:

def get_random_problem(category=None):
   """Get a random problem from a specific category or all categories."""
   import random

   if category and category in DEMO_PROBLEMS:
       return random.choice(DEMO_PROBLEMS[category])
   else:
       # Pick from all problems
       all_problems = []
       for problems in DEMO_PROBLEMS.values():
           all_problems.extend(problems)
       return random.choice(all_problems)

Thêm hàm hiển thị tất cả bài toán có sẵn:

def print_demo_problems():
   """Print all demo problems organized by category."""
   print("🧮 Demo Problems for Interactive Math Solver")
   print("=" * 60)
   print("Here are example problems you can try, organized by difficulty:\n")

   for category, problems in DEMO_PROBLEMS.items():
       print(f"### {category}")
       print("-" * (len(category) + 4))
       for i, problem in enumerate(problems, 1):
           print(f"{i:2d}. {problem}")
       print()

   print("💡 Tips:")
   print("   • Copy and paste any question into the math solver")
   print("   • All visualizations and reports will be saved automatically")
   print("\n🚀 Start the solver with: python math_solver.py")


if __name__ == "__main__":
   print_demo_problems()

Script demo này cung cấp:

  • Bài toán phân loại theo cấp độ từ cơ bản đến nâng cao
  • Chọn bài ngẫu nhiên để kiểm thử
  • Hướng dẫn sử dụng cho người dùng mới

Bước 10: Chạy và kiểm thử ứng dụng

Giờ hãy kiểm thử toàn bộ ứng dụng! Chạy bộ giải toán:

python math_solver.py

Thử một số câu hỏi ví dụ:

  1. Tính toán cơ bản: “What is 15% of 240?”
  2. Đại số: “Solve for x: 3x + 7 = 22”
  3. Trực quan hóa: “Graph y = x² — 4x + 3 and find its vertex”
  4. Toán nâng cao: “Find the derivative of sin(x) * e^x and plot both functions”

Mỗi câu hỏi sẽ:

  • Hiển thị đầu ra streaming theo thời gian thực khi Claude làm việc
  • Tạo mọi trực quan hóa cần thiết
  • Lưu một báo cáo markdown toàn diện
  • Tải các tệp biểu đồ vào thư mục images của bạn

Bạn cũng có thể chạy script bài toán demo để xem tất cả ví dụ có sẵn:

python demo_problems.py

Chúng ta đã xây dựng gì với Claude Sonnet 4

Bộ giải bài toán của chúng ta minh họa nhiều tính năng mạnh mẽ của Claude 4 và các khả năng API mới:

  • Thực thi mã: Claude có thể viết và chạy mã Python để giải bài toán, lặp lời giải và xử lý tính toán phức tạp.
  • Tạo và quản lý tệp: Ứng dụng tự động xử lý việc tạo, tải xuống và tổ chức tệp với Files API.
  • Tương tác streaming: Phản hồi theo thời gian thực giúp trải nghiệm mượt mà và hấp dẫn.
  • Tài liệu hóa toàn diện: Mỗi lời giải đều được lưu trong báo cáo markdown chi tiết kèm mã và trực quan hóa.
  • Giao diện thân thiện: Giao diện dựa trên terminal đơn giản nhưng hiệu quả cho việc giải toán.

Dự án này cho thấy các khả năng mới của Claude 4 có thể kết hợp để tạo ra ứng dụng tinh vi vượt xa tương tác chat đơn giản. Công cụ thực thi mã, khi kết hợp với xử lý tệp phù hợp và streaming, tạo nên nền tảng mạnh mẽ cho khám phá và phân tích toán học.

Bạn cũng có thể học cách xây dựng các tác nhân tương tự bằng nền tảng khác qua khóa học Developing AI Systems with the OpenAI API.

Kết luận và các bước tiếp theo

Việc xây dựng bộ giải bài toán này đã cho thấy các khả năng mới của Claude 4 biến đổi những gì có thể làm được với ứng dụng AI như thế nào.

Ứng dụng của chúng ta xử lý mọi thứ từ tính toán cơ bản đến trực quan hóa toán học phức tạp, cho thấy cách các tính năng API này phối hợp để tạo trải nghiệm người dùng tốt. Đặc biệt, công cụ thực thi mã là nhân tố tạo bước ngoặt, cho phép Claude lặp lời giải và tạo đầu ra trực quan vốn trước đây cần công cụ riêng và tích hợp phức tạp.

Từ đây, bạn có thể mở rộng bộ giải này với giao diện web, tích hợp nguồn dữ liệu bên ngoài thông qua MCP, hoặc áp dụng các mẫu tương tự để xây dựng trợ lý theo lĩnh vực khác như phân tích dữ liệu, tính toán khoa học hoặc công cụ giáo dục.

Câu hỏi thường gặp

Điều gì khiến Claude 4 khác với các phiên bản trước?

Claude 4 giới thiệu thực thi mã gốc, tư duy mở rộng với việc dùng công cụ, thực thi công cụ song song, khả năng ghi nhớ được cải thiện và hỗ trợ nhiều giờ thực thi tác vụ liên tục. Những tính năng này giúp Claude 4 đặc biệt mạnh ở các tác vụ kỹ thuật phần mềm.

Claude 4 có thực sự chạy mã Python trong cuộc hội thoại không?

Có. Claude 4 có thể thực thi mã Python trong môi trường sandbox an toàn bằng công cụ thực thi mã mới. Nó có thể chạy tính toán, tạo trực quan hóa với matplotlib và lặp lời giải dựa trên kết quả thực thi.

Những hạn chế của môi trường thực thi mã của Claude là gì?

Sandbox không có truy cập internet, tài nguyên tính toán hạn chế và không thể truy cập hệ thống tệp cục bộ của bạn. Nó được cài sẵn các thư viện phổ biến như numpy, pandas và matplotlib, nhưng bạn không thể cài thêm gói.

Files API mới hoạt động thế nào với thực thi mã?

Files API cho phép bạn tải tài liệu một lần và tham chiếu qua các cuộc hội thoại. Khi Claude tạo tệp trong quá trình thực thi mã (như biểu đồ), bạn có thể trích xuất ID tệp của chúng và tải về máy cục bộ bằng API.

Tôi có cần quyền truy cập API đặc biệt để dùng tính năng thực thi mã của Claude 4 không?

Bạn cần bao gồm header beta "anthropic-beta": "code-execution-2025-05-22" trong yêu cầu API và dùng mô hình claude-sonnet-4-20250514. Công cụ thực thi mã được chỉ định là "code_execution_20250522" trong mảng tools.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Tôi là người sáng tạo nội dung về khoa học dữ liệu với hơn 2 năm kinh nghiệm và là một trong những tài khoản có lượng người theo dõi lớn nhất trên Medium. Tôi thích viết các bài chuyên sâu về AI và ML với chút giọng điệu mỉa mai, vì bạn cũng phải làm gì đó để chúng bớt khô khan. Tôi đã xuất bản hơn 130 bài viết và một khóa học trên DataCamp, cùng với một khóa nữa đang được thực hiện. Nội dung của tôi đã được hơn 5 triệu lượt xem, trong đó 20 nghìn người đã trở thành người theo dõi trên cả Medium và LinkedIn. 

Chủ đề
Trí tuệ Nhân tạo
Python

Học thêm về AI với các khóa học này!

Khóa học

Hiểu về Trí tuệ Nhân tạo

2 giờ
431.7K
Tìm hiểu các khái niệm cơ bản về Trí tuệ Nhân tạo như học máy, học sâu, NLP, AI tạo sinh và hơn thế nữa.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm