📖 Nội dung bài học
Tóm tắt
Khi xây dựng ứng dụng với nhiều tools, bạn cần xử lý các tình huống mà Claude có thể cần gọi nhiều tools theo trình tự để trả lời một câu hỏi của người dùng. Ví dụ, nếu người dùng hỏi "103 ngày nữa là thứ mấy?", Claude cần lấy ngày hiện tại trước, sau đó cộng thêm 103 ngày.

Điều này tạo ra một mẫu hội thoại đa lượt (multi-turn conversation), nơi Claude thực hiện nhiều yêu cầu tool trước khi đưa ra câu trả lời cuối cùng. Ứng dụng của bạn cần xử lý điều này một cách tự động.
Mẫu Tool Đa Lượt (Multi-Turn Tool Pattern)
Đây là những gì xảy ra bên dưới khi Claude cần nhiều tools:
- Người dùng hỏi: "103 ngày nữa là thứ mấy?"
- Claude phản hồi với một khối sử dụng tool (tool use block), yêu cầu
get_current_datetime - Server của bạn gọi hàm và trả về kết quả
- Claude nhận ra cần thêm thông tin và yêu cầu
add_duration_to_datetime - Server của bạn gọi hàm đó và trả về kết quả
- Lúc này Claude đã có đủ thông tin để đưa ra câu trả lời cuối cùng

Xây Dựng Vòng Lặp Hội Thoại (Conversation Loop)
Để xử lý mẫu này, bạn cần một vòng lặp hội thoại tiếp tục cho đến khi Claude ngừng yêu cầu tools:
def run_conversation(messages):
while True:
response = chat(messages)
add_user_message(messages, response)
# Pseudo code
if response isn't asking for a tool:
break
tool_result_blocks = run_tools(response)
add_user_message(tool_result_blocks)
return messages

Tái Cấu Trúc Hàm Hỗ Trợ (Refactoring Helper Functions)
Trước khi triển khai vòng lặp hội thoại, bạn cần cập nhật các hàm hỗ trợ để xử lý nhiều khối tin nhắn (message blocks) đúng cách.
Cập Nhật Trình Xử Lý Tin Nhắn (Updating Message Handlers)
Các hàm add_user_message và add_assistant_message của bạn hiện đang giả định chúng luôn làm việc với văn bản thuần túy. Hãy cập nhật chúng để xử lý các đối tượng tin nhắn đầy đủ:
from anthropic.types import Message
def add_user_message(messages, message):
user_message = {
"role": "user",
"content": message.content if isinstance(message, Message) else message
}
messages.append(user_message)
Điều này cho phép bạn truyền vào một chuỗi, một danh sách các khối, hoặc một đối tượng tin nhắn hoàn chỉnh.
Cập Nhật Hàm Chat (Updating the Chat Function)
Sửa đổi hàm chat của bạn để chấp nhận một danh sách các tools và trả về tin nhắn đầy đủ thay vì chỉ văn bản:
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
params = {
"model": model,
"max_tokens": 1000,
"messages": messages,
"temperature": temperature,
"stop_sequences": stop_sequences,
}
if tools:
params["tools"] = tools
if system:
params["system"] = system
message = client.messages.create(**params)
return message
Trích Xuất Văn Bản Từ Tin Nhắn (Extracting Text from Messages)
Vì hàm chat giờ đây trả về các tin nhắn đầy đủ thay vì chỉ văn bản, hãy thêm một hàm trợ giúp để trích xuất văn bản khi cần:
def text_from_message(message):
return "\n".join(
[block.text for block in message.content if block.type == "text"]
)
Hàm này tìm tất cả các khối văn bản trong một tin nhắn và nối chúng lại với nhau, rất hữu ích khi bạn cần hiển thị câu trả lời cuối cùng cho người dùng.
Tại Sao Những Thay Đổi Này Quan Trọng
Các bước tái cấu trúc này chuẩn bị mã của bạn cho thực tế của các cuộc hội thoại có sử dụng tool:
- Nhiều khối cho mỗi tin nhắn - Phản hồi của Claude có thể chứa cả văn bản và các khối sử dụng tool.
- Xử lý tin nhắn linh hoạt - Các hàm của bạn giờ đây có thể hoạt động với nhiều định dạng tin nhắn khác nhau.
- Bảo toàn toàn bộ tin nhắn - Bạn giữ lại tất cả thông tin mà Claude cung cấp, không chỉ phần văn bản.
- Hỗ trợ danh sách tool - Hàm chat của bạn giờ đây có thể nhận và sử dụng nhiều tool.
Với những nền tảng này, bạn đã sẵn sàng để triển khai vòng lặp hội thoại đầy đủ, xử lý nhiều lần gọi tool tự động, tạo ra trải nghiệm liền mạch nơi Claude có thể sử dụng bất kỳ tool nào cần thiết để trả lời hoàn chỉnh câu hỏi của người dùng.
Tải xuống
🔁 Bài học liên quan
- Bài tiếp: Implementing multiple turns
- Bài trước: Sending tool results
- Cùng section: Making a request · Multi-turn conversations · Chat exercise
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-with-google-vertex/289178
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01