Khóa học
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.

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:

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:
- 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.
- 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.
- 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ự.
- 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.
- 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.
- 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:
- 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.
- Thiết lập client: Tạo client Anthropic với cả hai header beta cho thực thi mã và Files API.
- 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ạocontent_block_stop: Khi một khối nội dung kết thúcmessage_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
toolsvớ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ảngcontent. - 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"\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:
- Tương tác người dùng: Nhắc nhập câu hỏi và xử lý lệnh thoát
- Giải bài toán: Gọi phương thức
solve_problem()của chúng ta - Xử lý tệp: Trích xuất và tải xuống mọi tệp được tạo
- Tạo báo cáo: Tạo báo cáo markdown toàn diện
- 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ụ:
- Tính toán cơ bản: “What is 15% of 240?”
- Đại số: “Solve for x: 3x + 7 = 22”
- Trực quan hóa: “Graph y = x² — 4x + 3 and find its vertex”
- 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.
- Nếu bạn là nhà phát triển muốn chứng nhận kỹ năng kỹ sư AI, hãy cân nhắc lộ trình Associate AI Engineer dành cho nhà phát triển, nhấn mạnh các triển khai cấp độ sản xuất như thế này.
- Các nhà khoa học dữ liệu quan tâm đến việc đưa LLM vào vận hành có thể theo lộ trình Associate AI Engineer dành cho nhà khoa học dữ liệu, kết nối giữa phân tích và triển khai AI.
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.
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.
