Claude Certification Guide
0% chương trình học đã hoàn thành
1.1

Vòng lặp Agentic

Những điều bạn cần biết

Một agentic loop là chu trình thực thi cốt lõi vận hành mọi agent dựa trên Claude. Đây là một mẫu luồng điều khiển tất định (deterministic) — không phải một mẹo prompt, không phải một vòng lặp thử lại, và không phải một lượt trò chuyện của chatbot. Hiểu vòng đời này là điều bắt buộc đối với kỳ thi và đối với các hệ thống sản xuất thực tế.

Vòng Đời Của Agentic Loop

Vòng lặp gồm bốn bước, lặp lại cho đến khi hoàn tất:

  1. Gửi một yêu cầu đến Claude thông qua Messages API. Yêu cầu này bao gồm lịch sử hội thoại (system prompt, các tin nhắn trước đó, và bất kỳ kết quả tool nào từ vòng lặp trước).

  2. Kiểm tra trường stop_reason trong phản hồi. Trường này là tín hiệu có thẩm quyền cho biết điều gì sẽ xảy ra tiếp theo. Nó có hai giá trị liên quan đến agentic loop:

    • "tool_use" — Claude muốn gọi một hoặc nhiều tool. Vòng lặp tiếp tục.
    • "end_turn" — Claude đã hoàn thành công việc của mình. Vòng lặp kết thúc.
  3. Nếu stop_reason"tool_use": thực thi (các) tool được yêu cầu, thêm kết quả tool vào lịch sử hội thoại dưới dạng một tin nhắn mới, và gửi cuộc hội thoại đã cập nhật trở lại cho Claude.

  4. Nếu stop_reason"end_turn": agent đã hoàn thành. Trình bày phản hồi cuối cùng cho người dùng.

Chi tiết quan trọng nằm ở bước 3: kết quả tool bắt buộc phải được thêm vào lịch sử hội thoại. Nếu không, Claude không thể suy luận về thông tin mới ở vòng lặp tiếp theo. Mô hình cần thấy tool đã trả về gì để quyết định bước tiếp theo cần làm gì.

Khái niệm chính

Trường stop_reason là tín hiệu đáng tin cậy duy nhất để điều khiển vòng lặp. Nó có tính tất định và không mơ hồ. Không bao giờ dùng việc phân tích ngôn ngữ tự nhiên, kiểm tra nội dung văn bản, hay giới hạn số vòng lặp tùy ý làm cơ chế dừng chính.

Ra Quyết Định Do Mô Hình Dẫn Dắt

Trong một agentic loop, Claude quyết định gọi tool nào dựa trên ngữ cảnh hiện tại. Đây là ra quyết định do mô hình dẫn dắt (model-driven decision-making) — mô hình suy luận về nhiệm vụ, đánh giá các tool có sẵn, và chọn tool phù hợp. Điều này trái ngược với cây quyết định được cấu hình sẵn hoặc chuỗi tool cố định, nơi nhà phát triển lập trình cứng tool nào chạy khi nào.

Kỳ thi ưu tiên các cách tiếp cận do mô hình dẫn dắt vì tính linh hoạt. Claude có thể thích ứng với các tình huống bất ngờ, xử lý các trường hợp biên (edge case), và nối chuỗi các tool theo cách mà nhà phát triển không lường trước được. Tuy nhiên, có một ngoại lệ quan trọng: khi logic nghiệp vụ đòi hỏi sự tuân thủ tất định (các nghiệp vụ tài chính, kiểm tra bảo mật, yêu cầu pháp lý), việc thực thi bằng chương trình sẽ được ưu tiên hơn tính linh hoạt do mô hình dẫn dắt. Nguyên tắc này được trình bày chi tiết trong Task Statement 1.4.

Ba Anti-Pattern

Kỳ thi liên tục kiểm tra ba anti-pattern cụ thể cho việc dừng vòng lặp. Hãy nắm vững những điều này.

Anti-Pattern 1: Phân tích tín hiệu ngôn ngữ tự nhiên. Kiểm tra xem Claude có nói "Tôi đã xong" hay "hoàn thành nhiệm vụ" để quyết định vòng lặp có nên kết thúc hay không. Điều này sai vì ngôn ngữ tự nhiên vốn dĩ mơ hồ. Claude có thể nói "Tôi đã phân tích xong tệp đầu tiên" trong khi vẫn có ý định tiếp tục với các tệp khác. Trường stop_reason tồn tại chính xác để loại bỏ sự mơ hồ này.

Anti-Pattern 2: Giới hạn số vòng lặp tùy ý làm cơ chế dừng chính. Đặt "dừng sau 10 vòng lặp" làm cách chính để kết thúc agent. Điều này sai vì nó hoặc cắt ngang công việc hữu ích (nếu nhiệm vụ thực sự cần 12 vòng lặp) hoặc chạy các vòng lặp không cần thiết (nếu nhiệm vụ hoàn thành trong 3 vòng). Mô hình báo hiệu sự hoàn thành thông qua stop_reason — hãy sử dụng tín hiệu đó. Giới hạn số vòng lặp chấp nhận được như một lưới an toàn (một giới hạn tối đa để ngăn agent chạy mất kiểm soát), nhưng không bao giờ nên là cơ chế điều khiển chính.

Anti-Pattern 3: Kiểm tra nội dung văn bản của assistant làm chỉ báo hoàn thành. Sử dụng response.content[0].type == "text" để quyết định vòng lặp đã kết thúc. Điều này sai vì Claude có thể trả về văn bản cùng với các khối tool_use. Một phản hồi có thể chứa văn bản giải thích ("Tôi sẽ tìm kiếm lịch sử đơn hàng của khách hàng ngay bây giờ") ngay sau đó là một lệnh gọi tool. Kiểm tra sự hiện diện của văn bản không cho bạn biết agent đã hoàn thành hay chưa.

Bẫy thi: Common Exam Distractor

Kỳ thi thường xuyên đưa ra giới hạn số vòng lặp như một giải pháp hợp lý cho việc kết thúc sớm. Hãy loại bỏ các đáp án này. Giới hạn số vòng lặp giải quyết vấn đề vòng lặp mất kiểm soát, không phải việc thoát sớm. Cách khắc phục cho việc kết thúc sớm luôn là kiểm tra stop_reason một cách chính xác.

Ví Dụ Thực Tế: Lỗi Kết Thúc Sớm

Một nhà phát triển xây dựng một agent hỗ trợ khách hàng. Nó hoạt động tốt với các truy vấn đơn giản nhưng đôi khi dừng giữa chừng ở các yêu cầu phức tạp. Đoạn mã kiểm tra if response.content[0].type == "text" để xác định sự hoàn thành.

Lỗi: Claude trả về một lời giải thích bằng văn bản ("Để tôi tra cứu đơn hàng của bạn") cùng với một khối tool_use yêu cầu tool lookup_order. Đoạn mã thấy văn bản ở vị trí [0], kết luận agent đã hoàn thành, và trả về phản hồi chưa đầy đủ cho người dùng.

Cách khắc phục: thay thế việc kiểm tra loại nội dung bằng việc kiểm tra stop_reason. Tiếp tục vòng lặp khi stop_reason == "tool_use", kết thúc khi stop_reason == "end_turn". Cách này hoạt động bất kể loại nội dung nào xuất hiện trong phản hồi.

Bẫy thi

Bẫy thi: Using response.content[0].type == 'text' to determine loop completion

Claude có thể trả về văn bản cùng với các khối tool_use trong cùng một phản hồi. Sự hiện diện của văn bản không cho biết sự hoàn thành. Trường stop_reason là tín hiệu có thẩm quyền.

Bẫy thi: Setting arbitrary iteration caps (e.g., 'stop after 10 loops') as the primary stopping mechanism

Giới hạn số vòng lặp hoặc cắt ngang công việc hữu ích hoặc chạy các vòng lặp không cần thiết. Chúng chấp nhận được như một lưới an toàn, không phải là cơ chế điều khiển vòng lặp chính. Hãy dùng stop_reason thay thế.

Bẫy thi: Parsing natural language phrases like 'I'm done' or 'task complete' to decide loop termination

Ngôn ngữ tự nhiên mơ hồ và không đáng tin cậy. Trường stop_reason cung cấp một tín hiệu tất định, không mơ hồ để điều khiển vòng lặp.

Bẫy thi: Forcing tool_choice to 'any' to prevent the agent from returning text

Điều này buộc phải sử dụng tool ngay cả khi agent thực sự đã hoàn thành, tạo ra một vòng lặp vô hạn. Cách tiếp cận đúng là để mô hình báo hiệu sự hoàn thành một cách tự nhiên thông qua stop_reason.

Tình huống luyện tập

Không tìm thấy câu hỏi luyện tập "q-1-1-001".

Bài tập thực hành

Xây dựng một Agent Loop Đa Tool

Bạn sẽ học được gì

  • Vòng đời của agentic loop hoạt động như thế nào với Messages API
  • Vì sao stop_reason là tín hiệu có thẩm quyền để điều khiển vòng lặp
  • Cách xử lý đúng các giá trị stop_reason là tool_use và end_turn
  • Cách thêm kết quả tool vào lịch sử hội thoại để thực thi nhiều lượt
  • Khi nào giới hạn số vòng lặp an toàn là phù hợp so với không phù hợp làm cơ chế dừng

Các bước

Vì sao: Thiết lập đa tool bộc lộ khả năng ra quyết định do mô hình dẫn dắt — Claude phải chọn đúng tool dựa trên ngữ cảnh, đây là điều cốt lõi của kiến trúc agentic.

Bạn sẽ thấy: Hai định nghĩa tool được đăng ký với input_schema theo JSON Schema hợp lệ, mỗi tool có name, description, và parameters.

Vì sao: Agentic loop là mẫu thực thi cốt lõi — kỳ thi kiểm tra xem bạn có dùng stop_reason (tất định) thay vì kiểm tra loại nội dung hoặc phân tích ngôn ngữ tự nhiên (không đáng tin cậy) hay không.

Bạn sẽ thấy: Một vòng lặp while gọi client.messages.create() và kiểm tra response.stop_reason sau mỗi lần lặp.

Vì sao: Đây là bước chuyển giao then chốt trong vòng lặp — kỳ thi kiểm tra cụ thể xem bạn có trích xuất đúng các lệnh gọi tool, thực thi chúng, và trả kết quả đúng định dạng tin nhắn hay không.

Bạn sẽ thấy: Khi Claude yêu cầu một tool, mã của bạn trích xuất khối tool_use, chạy hàm tương ứng, và thêm cả phản hồi của assistant lẫn một tin nhắn user chứa tool_result vào cuộc hội thoại.

Vì sao: end_turn là tín hiệu cho biết Claude đã hoàn thành nhiệm vụ — trích xuất đúng phản hồi văn bản cuối cùng sẽ đóng vòng lặp và trả kết quả cho người dùng.

Bạn sẽ thấy: Khi stop_reason là end_turn, vòng lặp của bạn thoát ra và trả về nội dung văn bản từ phản hồi cuối cùng.

Vì sao: Các lệnh gọi tool tuần tự kiểm tra toàn bộ vòng đời vòng lặp — agent phải hoàn thành một lệnh gọi tool, nhận kết quả, suy luận về nó, và quyết định gọi tool khác trước khi trả kết quả cuối cùng.

Bạn sẽ thấy: Ít nhất hai lần lặp gọi tool trước end_turn. Agent tìm kiếm trước, dùng kết quả tìm kiếm trong một phép tính, sau đó trả về câu trả lời kết hợp.

Vì sao: Kỳ thi phân biệt giới hạn an toàn (chấp nhận được như một lưới dự phòng) với việc dùng giới hạn làm cơ chế dừng chính (một anti-pattern). Giới hạn của bạn không bao giờ nên kích hoạt trong vận hành bình thường.

Bạn sẽ thấy: Một hằng số MAX_ITERATIONS, một bộ đếm tăng dần mỗi vòng lặp, và một log cảnh báo nếu chạm giới hạn. Các truy vấn bình thường nên kết thúc qua stop_reason từ lâu trước khi đạt đến 20.

Nguồn tham khảo