Mục lục bài viết

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

  1. Tài khoản AWS với quyền truy cập Amazon Bedrock
  2. Python 3.x đã được cài đặt
  3. AWS CLI đã cài đặt và cấu hình
  4. 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

  1. Đ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
  2. 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
  3. 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
  4. 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!