📖 Nội dung bài học
Giảm cỡ chữ chú thích-
Tăng cỡ chữ chú thích+ hoặc =
Tóm tắt
Khi Claude quyết định dùng một tool, nó trả về một cấu trúc phản hồi đặc biệt cần được xử lý cẩn thận. Việc hiểu định dạng phản hồi này và triển khai quản lý hội thoại thích hợp là rất quan trọng để xây dựng các ứng dụng hỗ trợ tool mạnh mẽ.
Cấu hình Chọn Tool
Trước khi đi sâu vào các phản hồi, bạn nên hiểu cách kiểm soát khi nào Claude dùng tool. Tham số toolChoice cung cấp cho bạn ba tùy chọn:

- auto - Claude quyết định có dùng
toolhay không (hành vi mặc định) - any - Claude phải dùng
toolnhưng có thể chọntoolnào - specific tool - Buộc Claude dùng một
toolcụ thể theo tên
Tùy chọn thứ ba đặc biệt hữu ích để kiểm tra khi bạn muốn đảm bảo Claude gọi một hàm cụ thể.
Cấu trúc Tin nhắn Nhiều Phần
Khi Claude muốn dùng một tool, nó trả về một tin nhắn trợ lý với nhiều phần nội dung thay vì chỉ văn bản:

Phản hồi chứa hai phần:
- Phần Văn bản - Giải thích dễ đọc cho con người như "Tôi có thể giúp bạn tìm ra thời gian hiện tại. Để tôi tìm thông tin đó cho bạn"
- Phần ToolUse - Dữ liệu có cấu trúc cho bạn biết
toolnào cần chạy và với những đối số nào
Tìm hiểu về Phần ToolUse
Phần ToolUse chứa ba thông tin chính:

- toolUseId - Một định danh duy nhất bạn cần khi gửi lại kết quả
tool - name - Tên
toolchính xác từ lược đồ JSON của bạn mà Claude muốn gọi - input - Một từ điển các đối số Claude muốn truyền cho hàm
toolcủa bạn
Luồng Hội thoại với Tools
Việc dùng tool tuân theo một mẫu hội thoại cụ thể, yêu cầu duy trì toàn bộ lịch sử tin nhắn:

Khi bạn nhận được yêu cầu dùng tool, bạn cần:
- Trích xuất thông tin
tooltừ phần ToolUse - Chạy hàm
toolthực tế của bạn - Gửi lại tin nhắn ToolResult cùng với lịch sử hội thoại đầy đủ
- Bao gồm tin nhắn người dùng gốc và tin nhắn dùng
toolcủa trợ lý trong yêu cầu tiếp theo của bạn
Cập nhật Hàm Trợ giúp
Để xử lý đúng cách các tin nhắn nhiều phần, bạn cần cập nhật các hàm xử lý tin nhắn của mình. Sau đây là cách làm cho các hàm của bạn đủ linh hoạt để xử lý cả nội dung văn bản đơn giản và nội dung nhiều phần phức tạp:
def add_user_message(messages, content):
if isinstance(content, str):
user_message = {"role": "user", "content": [{"text": content}]}
else:
user_message = {"role": "user", "content": content}
messages.append(user_message)
def add_assistant_message(messages, content):
if isinstance(content, str):
assistant_message = {"role": "assistant", "content": [{"text": content}]}
else:
assistant_message = {"role": "assistant", "content": content}
messages.append(assistant_message)
Bạn cũng sẽ muốn cập nhật hàm chat của mình để trả về cả văn bản và danh sách đầy đủ các phần:
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
# ... existing setup code ...
response = client.converse(**params)
text = response["output"]["message"]["content"][0]["text"]
parts = response["output"]["message"]["content"]
return text, parts
Kiểm tra Lý do Dừng
Luôn kiểm tra trường stopReason trong phản hồi của Claude. Khi nó bằng "tool_use", bạn biết Claude muốn gọi một tool thay vì chỉ cung cấp phản hồi văn bản. Đây là tín hiệu của bạn để trích xuất thông tin tool và thực thi hàm được yêu cầu.
Với các mẫu này, bạn đã sẵn sàng xử lý các yêu cầu dùng tool của Claude và duy trì luồng hội thoại thích hợp trong suốt các tương tác tool nhiều lượt.
🔁 Bài học liên quan
- Bài tiếp: Running tool functions
- Bài trước: JSON Schema for tools
- Cùng section: Overview of Claude Models · Accessing the API · Making a request
- 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-in-amazon-bedrock/276764
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01