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

The agent loop explained

📖 Nội dung bài học

Video

Giải thích về agent loop

Bạn đã thực hiện các cuộc gọi API, nhưng một cuộc gọi duy nhất chỉ trả về một phản hồi. Nếu bạn muốn tự động hóa một quy trình làm việc, Claude cần hành động, xem xét kết quả, quyết định bước tiếp theo và tiếp tục. Mô hình đó chính là điều mọi người muốn nói khi họ nhắc đến quy trình làm việc agentic (tác nhân).

Agent thực sự là gì

Một agent (tác nhân) là một phiên bản tự động của Claude, chạy cả hai phía của vòng lặp nhắn tin mà không có con người ở giữa. Một agent nhận một nhiệm vụ, chọn một tool và thực thi code trong một vòng lặp cho đến khi Claude quyết định nhiệm vụ đã hoàn thành.

Cách dễ nhất để triển khai một agent loop trông như sau:

  1. Gửi một tin nhắn đến Claude với các tool có sẵn.
  2. Claude phản hồi bằng một câu trả lời cuối cùng hoặc một yêu cầu sử dụng một tool bạn đã định nghĩa.
  3. Code của bạn thực thi tool đó.
  4. Bạn gửi kết quả trở lại Claude.
  5. Lặp lại cho đến khi stop reason (lý do dừng)end_turn.

Hãy nghĩ về nó như một cuộc trò chuyện với các lượt luân phiên: người dùng bắt đầu, agent gọi một tool, tool trả về kết quả và agent tiếp tục cho đến khi có câu trả lời.

Một ví dụ hoạt động tối thiểu

Để xem vòng lặp này chạy từ đầu đến cuối mà không cần kéo theo database hay UI, chúng ta sẽ thiết lập một tool giả có tên get_weather và hỏi Claude xem nên mặc gì ở Austin hôm nay. Claude không thể tự biết thời tiết, vì vậy nó phải gọi tool, đọc kết quả, và sau đó đưa ra câu trả lời cho bạn.

Đây là toàn bộ script:

import anthropic

client = anthropic.Anthropic()

tools = [
    {
        "name": "get_weather",
        "description": "Get the current weather for a city.",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "The city to get weather for",
                }
            },
            "required": ["city"],
        },
    }
]

def run_tool(name, tool_input):
    if name == "get_weather":
        return f"Weather in {tool_input['city']}: 95F, sunny"
    raise ValueError(f"Unknown tool: {name}")

messages = [
    {"role": "user", "content": "What should I wear in Austin today?"}
]

while True:
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        tools=tools,
        messages=messages,
    )

    if response.stop_reason == "end_turn":
        # Claude đã hoàn thành. In văn bản cuối cùng và thoát.
        for block in response.content:
            if block.type == "text":
                print(block.text)
        break

    if response.stop_reason == "tool_use":
        # Tìm các khối tool use trong phản hồi và chạy từng khối.
        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                result = run_tool(block.name, block.input)
                tool_results.append(
                    {
                        "type": "tool_result",
                        "tool_use_id": block.id,
                        "content": result,
                    }
                )

        # Đẩy phản hồi của assistant và kết quả tool của chúng ta
        # trở lại vào messages, sau đó lặp lại để Claude có thể trả lời.
        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})

Ba điểm cần lưu ý:

  • Mảng tools cho Claude biết những gì có sẵn: một tên, một mô tả và một JSON schema cho các input.
  • run_tool chỉ là một hàm tra cứu được hardcode. Trong một ứng dụng thực tế, hàm này sẽ truy cập database, một API, hoặc bất cứ thứ gì khác.
  • Vòng lặp là agent loop. Mỗi lần lặp gửi các tin nhắn đến Claude và chuyển đổi dựa trên stop reason của phản hồi. Khi end_turn, Claude đã hoàn thành — in văn bản cuối cùng và thoát. Khi tool_use, tìm các khối tool use, chạy từng khối, đẩy phản hồi của assistant và kết quả tool của bạn trở lại vào messages, và lặp lại để Claude có thể trả lời.

Chạy ví dụ

Khi bạn chạy script, bạn sẽ thấy hai lượt:

  1. Lượt một: stop reason là tool_use. Claude yêu cầu get_weather cho Austin, và code của bạn trả về nhiệt độ và điều kiện.
  2. Lượt hai: stop reason là end_turn, và Claude nói bạn nên mặc đồ nhẹ và thoáng khí.

Đầu ra terminal của agent loop: lượt 1 dừng với tool_use và gọi get_weather cho Austin, sau đó lượt 2 dừng với end_turn và Claude in ra các khuyến nghị trang phục cuối cùng

Hai cuộc gọi API, một lần thực thi tool, một câu trả lời cuối cùng. Đó là toàn bộ vòng lặp. Mọi thứ bạn xây dựng với Claude API sẽ tương tự như thế này.

Vòng lặp tương tự trong môi trường sản xuất

Trong một môi trường thực tế, vòng lặp tương tự này cung cấp năng lượng cho một thứ gì đó như một endpoint tự động xem xét: một compliance agent đọc một báo cáo cấu trúc, tra cứu các building code liên quan thông qua một tool, và ghi lại các phát hiện rủi ro vào database từng cái một khi nó hoạt động.

Một bảng điều khiển xem xét tuân thủ liệt kê các báo cáo cấu trúc đã tải lên, mỗi báo cáo có một nút Run auto-review để khởi động agent

Hình dạng của vòng lặp giống hệt với những gì bạn vừa chạy. Sự khác biệt là:

  • Các tool thực tế thay vì một tra cứu thời tiết giả lập.
  • Kết quả được streaming trở lại UI dưới dạng server-sent events.
  • Các phát hiện được lưu trữ vào một bảng risk-finding.

Dấu vết xem xét của một compliance agent đang chạy: hàng chục cuộc gọi tool tìm kiếm thư viện building-code và tra cứu các phần code cụ thể khi vòng lặp lặp lại

Tóm tắt

  • Một agent là Claude trong một vòng lặp: quan sát, quyết định, hành động, lặp lại.
  • Vòng lặp rất đơn giản: gửi tin nhắn với các tool, chạy bất kỳ tool nào Claude yêu cầu, đưa kết quả trở lại và dừng khi stop reason là end_turn.
  • Bạn sở hữu vòng lặp và các tool. Claude sở hữu khả năng suy luận.
  • Hình dạng vòng lặp tương tự có thể mở rộng từ một bản demo thời tiết giả lập đến một production compliance agent — chỉ có các tool và hệ thống phụ trợ thay đổi.
  • Khi bạn không muốn tự sở hữu vòng lặp, các managed agent sẽ chạy vòng lặp chính xác này cho bạn trên hạ tầng của Anthropic.

🎬 Bản ghi video

Source video: tBIdyIoCQVU

Không có transcript — xem phần nội dung bài học bên trên.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

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