Mục lục bài viết
- Giới Thiệu
- Reasoning Là Gì?
- Yêu Cầu Trước Khi Bắt Đầu
- Cài Đặt Dependencies
- Hướng Dẫn Triển Khai Chi Tiết
- Code Hoàn Chỉnh
- Kết Quả Mẫu
- Các Ứng Dụng Tiềm Năng
- Kết Luận
Giới Thiệu
Tính năng reasoning mới của Claude 3.7 Sonnet, nghĩa là bạn có thể nhìn thấy quá trình suy luận từng bước của AI. Bên dưới là cách xây dựng một ứng dụng Python để tận dụng khả năng này thông qua Amazon Bedrock.
Reasoning Là Gì?
Reasoning là khả năng của Claude trong việc giải quyết các vấn đề phức tạp theo từng bước trước khi đưa ra câu trả lời. Khi được kích hoạt, Claude không chỉ cung cấp câu trả lời cuối cùng mà còn hiển thị toàn bộ quá trình suy luận, tương tự như cách con người “suy nghĩ” khi giải quyết vấn đề.
Tính Năng Chính:
- Chia nhỏ câu hỏi phức tạp thành các phần dễ quản lý
- Khám phá nhiều cách tiếp cận để giải quyết vấn đề
- Phân tích thông tin một cách có hệ thống
- Hiển thị các bước giải quyết, đặc biệt hữu ích cho các bài toán
- Xác định các lỗi tiềm ẩn trong quá trình suy luận
Yêu Cầu Trước Khi Bắt Đầu
- Tài khoản AWS với quyền truy cập Amazon Bedrock
- Python 3.x đã được cài đặt
- AWS CLI đã cài đặt và cấu hình
- Quyền truy cập Claude 3.7 Sonnet trong tài khoản của bạn
Lưu ý: Thời điểm hiện tại, Claude 3.7 có sẵn tại các region: us-east-1, us-east-2, và us-west-2.
Cài Đặt Dependencies
pip install boto3>=1.37.0
Hoặc thêm vào file requirements.txt:
boto3>=1.37.0
Hướng Dẫn Triển Khai Chi Tiết
Bước 1: Tạo Cấu Trúc File Cơ Bản
import boto3
from botocore.exceptions import ClientError
def reasoning_example():
# Chúng ta sẽ triển khai hàm này trong các bước tiếp theo
pass
if __name__ == "__main__":
# Chúng ta sẽ gọi hàm reasoning ở đây
pass
Bước 2: Thiết Lập Amazon Bedrock Client
# Tạo Amazon Bedrock runtime client
client = boto3.client("bedrock-runtime", region_name="us-east-1")
# Chỉ định model ID cho Claude 3.7 Sonnet
model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
Bước 3: Tạo Message Cho Claude
# Tạo message với prompt của người dùng
user_message = "Mô tả mục đích của chương trình 'hello world' trong một dòng."
conversation = [
{
"role": "user",
"content": [{"text": user_message}],
}
]
Bước 4: Cấu Hình Tham Số Reasoning
# Cấu hình tham số reasoning với ngân sách 2000 token
reasoning_config = {
"thinking": {
"type": "enabled",
"budget_tokens": 2000
}
}
Tham số budget_tokens xác định số token tối đa mà Claude có thể sử dụng cho quá trình suy luận.
Bước 5: Gửi Request Tới Claude
# Gửi message và cấu hình reasoning tới model
response = client.converse(
modelId=model_id,
messages=conversation,
additionalModelRequestFields=reasoning_config
)
Bước 6: Xử Lý Response
# Trích xuất danh sách content blocks từ response của model
content_blocks = response["output"]["message"]["content"]
reasoning = None
text = None
# Xử lý từng content block để tìm reasoning và response text
for block in content_blocks:
if "reasoningContent" in block:
reasoning = block["reasoningContent"]["reasoningText"]["text"]
if "text" in block:
text = block["text"]
return reasoning, text
Bước 7: Hiển Thị Kết Quả
if __name__ == "__main__":
# Thực thi ví dụ và hiển thị reasoning và response cuối cùng
reasoning, text = reasoning_example()
print("\n<thinking>")
print(reasoning)
print("</thinking>\n")
print(text)
Code Hoàn Chỉnh
import boto3
from botocore.exceptions import ClientError
def reasoning_example():
# Tạo Amazon Bedrock runtime client
client = boto3.client("bedrock-runtime", region_name="us-east-1")
# Chỉ định model ID
model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
# Tạo message với prompt của người dùng
user_message = "Mô tả mục đích của chương trình 'hello world' trong một dòng."
conversation = [
{
"role": "user",
"content": [{"text": user_message}],
}
]
# Cấu hình reasoning parameters
reasoning_config = {
"thinking": {
"type": "enabled",
"budget_tokens": 2000
}
}
try:
# Gửi request
response = client.converse(
modelId=model_id,
messages=conversation,
additionalModelRequestFields=reasoning_config
)
# Xử lý response
content_blocks = response["output"]["message"]["content"]
reasoning = None
text = None
for block in content_blocks:
if "reasoningContent" in block:
reasoning = block["reasoningContent"]["reasoningText"]["text"]
if "text" in block:
text = block["text"]
return reasoning, text
except (ClientError, Exception) as e:
print(f"LỖI: Không thể gọi '{model_id}'. Lý do: {e}")
exit(1)
if __name__ == "__main__":
reasoning, text = reasoning_example()
print("\n<thinking>")
print(reasoning)
print("</thinking>\n")
print(text)
Kết Quả Mẫu
<thinking>
Tôi cần giải thích mục đích của chương trình "Hello World" trong một dòng.
Một chương trình "Hello World" thường là chương trình đơn giản nhất có thể
được viết trong một ngôn ngữ lập trình. Mục đích của nó là:
1. Xác minh môi trường lập trình đã được cài đặt chính xác
2. Minh họa cú pháp tối thiểu cần thiết để tạo một chương trình hoạt động
3. Cung cấp phần giới thiệu đơn giản về ngôn ngữ
4. Xuất ra dòng chữ "Hello, World!" hoặc một thông điệp tương tự
Tôi cần tóm tắt thông tin này thành một mô tả ngắn gọn trong một dòng.
</thinking>
Chương trình "Hello World" đóng vai trò như một bài giới thiệu đơn giản nhất
về ngôn ngữ lập trình bằng cách minh họa cú pháp cơ bản đồng thời xác minh
môi trường hoạt động chính xác.
Các Ứng Dụng Tiềm Năng
- Điều Chỉnh Token Budget:
- Tăng ngân sách cho các vấn đề phức tạp hơn
- Tối ưu hóa chi phí cho các câu hỏi đơn giản
- Sử Dụng Cho Giáo Dục:
- Phân tích quá trình giải quyết vấn đề
- Hiểu cách tiếp cận chuyên gia
- Tích Hợp Nâng Cao:
- Kết hợp với function calling
- Xây dựng hệ thống phân tích tự động
- Phát Triển Ứng Dụng:
- Thêm giao diện người dùng
- Tích hợp với các dịch vụ AWS khác
Kết Luận
Tính năng reasoning của Claude 3.7 Sonnet mở ra nhiều khả năng mới trong việc tương tác với AI. Bằng cách theo dõi quá trình suy luận, chúng ta không chỉ nhận được câu trả lời mà còn hiểu được cách AI đạt đến kết luận đó.
Cảm ơn các bạn rất nhiều đã đọc đến cuối bài viết!
Để lại một bình luận