Bỏ qua đến nội dung chính

Sending tool results

📖 Nội dung bài học

Tóm tắt

Sau khi Claude yêu cầu một lời gọi tool, bạn cần thực thi hàm và gửi kết quả trở lại. Điều này hoàn thành quy trình tool use bằng cách cung cấp cho Claude thông tin mà nó đã yêu cầu.

Chạy hàm Tool

Khi Claude phản hồi bằng một khối tool use, bạn trích xuất các tham số đầu vào và gọi hàm của mình. Đây là cách truy cập các tham số của tool:

response.content[1].input

Điều này cung cấp cho bạn một dictionary chứa các đối số mà Claude muốn truyền vào hàm của bạn. Vì hàm của bạn mong đợi các tham số keyword thay vì một dictionary, bạn sử dụng cú pháp unpacking của Python:

get_current_datetime(**response.content[1].input)

Hình ảnh: Trích xuất tham số đầu vào từ phản hồi của Claude.

Khối Tool Result

Sau khi chạy hàm tool, bạn cần gửi kết quả trở lại Claude bằng cách sử dụng một khối tool result. Khối này nằm trong một tin nhắn người dùng và cho Claude biết điều gì đã xảy ra khi bạn thực thi tool.

Hình ảnh: Gửi kết quả tool trở lại Claude.

Khối tool result có một số thuộc tính quan trọng:

  • tool_use_id - Phải khớp với id của khối ToolUse mà ToolResult này tương ứng
  • content - Đầu ra từ việc chạy tool của bạn, được serialize thành chuỗi
  • is_error - True nếu có lỗi xảy ra

Xử lý nhiều lời gọi Tool

Claude có thể yêu cầu nhiều lời gọi tool trong một phản hồi duy nhất. Ví dụ, nếu người dùng hỏi "10 + 10 bằng mấy và 30 + 30 bằng mấy?", Claude có thể phản hồi bằng hai khối ToolUse riêng biệt.

Hình ảnh: Claude yêu cầu nhiều lời gọi tool.

Mỗi lời gọi tool nhận một ID duy nhất, và bạn phải khớp các ID này khi gửi lại kết quả. Điều này đảm bảo Claude biết kết quả nào tương ứng với yêu cầu nào, ngay cả khi các kết quả đến theo thứ tự khác nhau.

Hình ảnh: Gửi lại nhiều kết quả tool.

Xây dựng yêu cầu tiếp theo

Yêu cầu tiếp theo của bạn gửi đến Claude phải bao gồm toàn bộ lịch sử hội thoại cộng với kết quả tool mới. Đây là cấu trúc:

messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,
        "content": "15:04:22",
        "is_error": False
    }]
})

Lịch sử tin nhắn hoàn chỉnh hiện chứa:

  • Tin nhắn người dùng ban đầu
  • Tin nhắn trợ lý với khối tool use
  • Tin nhắn người dùng với khối tool result

Thực hiện yêu cầu cuối cùng

Khi gửi yêu cầu tiếp theo, bạn vẫn phải bao gồm schema của tool mặc dù bạn không mong đợi Claude thực hiện một lời gọi tool khác. Claude cần schema để hiểu các tham chiếu tool trong lịch sử hội thoại của bạn.

client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema]
)

Hình ảnh: Gửi yêu cầu cuối cùng với schema của tool.

Sau đó, Claude sẽ phản hồi bằng một tin nhắn cuối cùng tích hợp các kết quả tool vào một phản hồi tự nhiên cho người dùng. Quy trình tool use hiện đã hoàn tất - bạn đã thành công giúp Claude truy cập thông tin thời gian thực thông qua hàm tùy chỉnh của mình.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?