{"product_id":"agent-loop-nền-tảng-xay-dựng-ai-agent-với-claude","title":"Agent Loop — Nền tảng xây dựng AI Agent với Claude","description":"\n\u003cp\u003eNếu bạn đã từng dùng Claude để hỏi-đáp hoặc sinh văn bản, bạn mới chỉ khai thác một phần nhỏ sức mạnh của nó. Sức mạnh thực sự nằm ở khả năng biến Claude thành một \u003cstrong\u003eAI Agent\u003c\/strong\u003e — một hệ thống tự động suy nghĩ, hành động, quan sát kết quả và lặp lại cho đến khi hoàn thành nhiệm vụ. Trái tim của mọi AI Agent chính là \u003cstrong\u003eAgent Loop\u003c\/strong\u003e.\u003c\/p\u003e\n\n\u003ch2\u003eAgent Loop là gì?\u003c\/h2\u003e\n\u003cp\u003eAgent Loop là một vòng lặp gồm 4 bước cơ bản:\u003c\/p\u003e\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eThink (Suy nghĩ):\u003c\/strong\u003e Agent phân tích tình huống hiện tại, xem xét mục tiêu và quyết định bước tiếp theo cần làm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eAct (Hành động):\u003c\/strong\u003e Agent gọi một công cụ (tool) để thực hiện hành động cụ thể — đọc file, tìm kiếm web, tính toán, gọi API\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eObserve (Quan sát):\u003c\/strong\u003e Agent nhận kết quả trả về từ công cụ, phân tích xem kết quả có đúng như mong đợi không\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRepeat (Lặp lại):\u003c\/strong\u003e Nếu nhiệm vụ chưa hoàn thành, quay lại bước Think với thông tin mới\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003cp\u003eVòng lặp này tiếp tục cho đến khi agent xác định rằng nhiệm vụ đã hoàn thành, hoặc gặp điều kiện dừng (hết số lần lặp, lỗi quá nhiều, v.v.).\u003c\/p\u003e\n\u003cp\u003eHãy hình dung như thế này: bạn giao cho một nhân viên mới một nhiệm vụ phức tạp. Họ sẽ không làm xong trong một bước duy nhất. Họ sẽ suy nghĩ về cách tiếp cận, thực hiện bước đầu tiên, xem kết quả, rồi điều chỉnh kế hoạch cho bước tiếp theo. Agent Loop hoạt động y hệt như vậy — chỉ khác là \"bộ não\" ở đây là Claude.\u003c\/p\u003e\n\n\u003ch2\u003eTại sao Agent Loop quan trọng?\u003c\/h2\u003e\n\u003cp\u003eCó một cách đơn giản để hiểu kiến trúc agent: \u003cstrong\u003eClaude là bộ não, tools là đôi tay\u003c\/strong\u003e.\u003c\/p\u003e\n\u003cp\u003eClaude có khả năng suy luận (reasoning) cực mạnh — phân tích vấn đề, lập kế hoạch, ra quyết định. Nhưng bản thân Claude không thể tương tác trực tiếp với thế giới bên ngoài. Nó không thể đọc file trên máy tính của bạn, không thể truy cập internet, không thể chạy code. Đây là lúc tools phát huy vai trò.\u003c\/p\u003e\n\u003cp\u003eKhi kết hợp Claude (reasoning engine) với tools (execution layer) trong một vòng lặp, bạn tạo ra một hệ thống có thể:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTự động hoá quy trình phức tạp:\u003c\/strong\u003e thay vì bạn phải chạy từng bước thủ công, agent tự lặp lại cho đến khi xong\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eXử lý các tình huống bất ngờ:\u003c\/strong\u003e nếu một bước thất bại, agent có thể tự điều chỉnh phương án\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGiải quyết bài toán mở:\u003c\/strong\u003e những nhiệm vụ mà bạn không biết trước cần bao nhiêu bước\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTích lũy kiến thức qua từng bước:\u003c\/strong\u003e kết quả của bước trước trở thành input cho bước sau\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eSo với việc gửi một prompt duy nhất và nhận một câu trả lời, agent loop cho phép Claude giải quyết những bài toán phức tạp hơn nhiều lần — giống như sự khác biệt giữa việc hỏi một câu hỏi và việc thuê một chuyên gia làm việc cho bạn trong nhiều giờ.\u003c\/p\u003e\n\n\u003ch2\u003eAgent Loop tối giản bằng Python\u003c\/h2\u003e\n\u003cp\u003eDưới đây là một agent loop hoàn chỉnh chỉ trong khoảng 30 dòng code Python. Bạn có thể chạy ngay nếu đã cài thư viện \u003ccode\u003eanthropic\u003c\/code\u003e:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport anthropic\nimport json\n\nclient = anthropic.Anthropic()\ntools = [\n    {\n        \"name\": \"calculator\",\n        \"description\": \"Tính toán biểu thức toán học\",\n        \"input_schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"expression\": {\"type\": \"string\", \"description\": \"Biểu thức cần tính, ví dụ: 2 + 3 * 4\"}\n            },\n            \"required\": [\"expression\"]\n        }\n    }\n]\n\ndef run_tool(name, input_data):\n    if name == \"calculator\":\n        return str(eval(input_data[\"expression\"]))\n    return \"Tool not found\"\n\ndef agent_loop(task, max_iterations=10):\n    messages = [{\"role\": \"user\", \"content\": task}]\n\n    for i in range(max_iterations):\n        response = client.messages.create(\n            model=\"claude-sonnet-4-20250514\",\n            max_tokens=4096,\n            tools=tools,\n            messages=messages\n        )\n\n        # Nếu Claude trả về text thuần (không gọi tool) → hoàn thành\n        if response.stop_reason == \"end_turn\":\n            return response.content[0].text\n\n        # Xử lý tool calls\n        messages.append({\"role\": \"assistant\", \"content\": response.content})\n        for block in response.content:\n            if block.type == \"tool_use\":\n                result = run_tool(block.name, block.input)\n                messages.append({\n                    \"role\": \"user\",\n                    \"content\": [{\"type\": \"tool_result\", \"tool_use_id\": block.id, \"content\": result}]\n                })\n\n    return \"Đã đạt giới hạn số lần lặp.\"\n\n# Chạy agent\nprint(agent_loop(\"Tính tổng các số nguyên tố nhỏ hơn 20\"))\u003c\/code\u003e\u003c\/pre\u003e\n\u003cp\u003eGiải thích luồng hoạt động:\u003c\/p\u003e\n\u003col\u003e\n  \u003cli\u003eUser đưa nhiệm vụ vào \u003ccode\u003eagent_loop()\u003c\/code\u003e\n\u003c\/li\u003e\n  \u003cli\u003eClaude nhận nhiệm vụ, quyết định cần dùng calculator → gọi tool\u003c\/li\u003e\n  \u003cli\u003eCode nhận tool call, chạy calculator, trả kết quả về cho Claude\u003c\/li\u003e\n  \u003cli\u003eClaude xem kết quả, nếu cần tính thêm → gọi tool lần nữa; nếu đã đủ → trả lời text\u003c\/li\u003e\n  \u003cli\u003eVòng lặp kết thúc khi Claude trả về \u003ccode\u003eend_turn\u003c\/code\u003e hoặc đạt giới hạn lặp\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003ch2\u003eMở rộng: Thêm Tools cho Agent\u003c\/h2\u003e\n\u003cp\u003eSức mạnh thực sự của agent nằm ở bộ tools bạn cung cấp. Dưới đây là cách thêm 3 tools phổ biến vào agent:\u003c\/p\u003e\n\n\u003ch3\u003eTool 1: Đọc file\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003e{\n    \"name\": \"read_file\",\n    \"description\": \"Đọc nội dung một file trên máy tính\",\n    \"input_schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n            \"path\": {\"type\": \"string\", \"description\": \"Đường dẫn đến file\"}\n        },\n        \"required\": [\"path\"]\n    }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\u003cpre\u003e\u003ccode\u003edef handle_read_file(input_data):\n    try:\n        with open(input_data[\"path\"], \"r\", encoding=\"utf-8\") as f:\n            return f.read()\n    except FileNotFoundError:\n        return f\"Error: File '{input_data['path']}' không tồn tại\"\n    except Exception as e:\n        return f\"Error: {str(e)}\"\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eTool 2: Tìm kiếm web\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003e{\n    \"name\": \"web_search\",\n    \"description\": \"Tìm kiếm thông tin trên internet\",\n    \"input_schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n            \"query\": {\"type\": \"string\", \"description\": \"Từ khoá tìm kiếm\"}\n        },\n        \"required\": [\"query\"]\n    }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\u003cpre\u003e\u003ccode\u003eimport requests\n\ndef handle_web_search(input_data):\n    # Ví dụ dùng SerpAPI hoặc Tavily\n    api_key = \"YOUR_API_KEY\"\n    response = requests.get(\n        \"https:\/\/api.tavily.com\/search\",\n        params={\"query\": input_data[\"query\"], \"api_key\": api_key}\n    )\n    results = response.json().get(\"results\", [])\n    return json.dumps([{\"title\": r[\"title\"], \"snippet\": r[\"content\"]} for r in results[:3]])\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eTool 3: Calculator nâng cao\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003eimport math\n\ndef handle_calculator(input_data):\n    # Cho phép dùng các hàm math như sqrt, sin, cos, log\n    allowed = {\"math\": math, \"abs\": abs, \"round\": round, \"min\": min, \"max\": max}\n    try:\n        result = eval(input_data[\"expression\"], {\"__builtins__\": {}}, allowed)\n        return str(result)\n    except Exception as e:\n        return f\"Lỗi tính toán: {str(e)}\"\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eKhi đã có nhiều tools, hàm \u003ccode\u003erun_tool()\u003c\/code\u003e trở thành một dispatcher:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003edef run_tool(name, input_data):\n    handlers = {\n        \"calculator\": handle_calculator,\n        \"read_file\": handle_read_file,\n        \"web_search\": handle_web_search,\n    }\n    handler = handlers.get(name)\n    if handler:\n        return handler(input_data)\n    return f\"Unknown tool: {name}\"\u003c\/code\u003e\u003c\/pre\u003e\n\u003cp\u003eĐiểm hay là bạn không cần nói cho Claude biết khi nào dùng tool nào. Claude tự quyết định dựa trên description của mỗi tool và ngữ cảnh nhiệm vụ. Đây chính là sức mạnh của reasoning engine.\u003c\/p\u003e\n\n\u003ch2\u003eĐiều kiện dừng (Stop Conditions)\u003c\/h2\u003e\n\u003cp\u003eMột agent không có điều kiện dừng tốt sẽ lặp vô tận và tiêu tốn token (và tiền). Có 3 loại điều kiện dừng phổ biến:\u003c\/p\u003e\n\n\u003ch3\u003e1. Giới hạn số lần lặp (Max Iterations)\u003c\/h3\u003e\n\u003cp\u003eĐây là điều kiện dừng đơn giản nhất và bắt buộc phải có. Trong code ở trên, chúng ta đã dùng \u003ccode\u003emax_iterations=10\u003c\/code\u003e. Tuỳ độ phức tạp của nhiệm vụ, bạn có thể tăng lên 20-50 cho các tác vụ research, hoặc giảm xuống 3-5 cho tác vụ đơn giản.\u003c\/p\u003e\n\n\u003ch3\u003e2. Nhiệm vụ hoàn thành (Task Complete)\u003c\/h3\u003e\n\u003cp\u003eClaude tự nhận biết khi nào nhiệm vụ đã hoàn thành và trả về \u003ccode\u003estop_reason == \"end_turn\"\u003c\/code\u003e thay vì gọi thêm tool. Đây là cách tự nhiên nhất — để Claude tự quyết định. Bạn cũng có thể thêm một tool đặc biệt gọi là \u003ccode\u003etask_complete\u003c\/code\u003e để agent gọi khi xong:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e{\n    \"name\": \"task_complete\",\n    \"description\": \"Gọi khi nhiệm vụ đã hoàn thành. Trả về kết quả cuối cùng.\",\n    \"input_schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n            \"result\": {\"type\": \"string\", \"description\": \"Kết quả cuối cùng của nhiệm vụ\"}\n        },\n        \"required\": [\"result\"]\n    }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003e3. Ngưỡng lỗi (Error Threshold)\u003c\/h3\u003e\n\u003cp\u003eNếu agent liên tục gặp lỗi, việc tiếp tục lặp chỉ tốn tiền mà không tạo giá trị. Hãy đếm số lỗi liên tiếp và dừng khi vượt ngưỡng:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003edef agent_loop_with_error_handling(task, max_iterations=10, max_errors=3):\n    messages = [{\"role\": \"user\", \"content\": task}]\n    consecutive_errors = 0\n\n    for i in range(max_iterations):\n        response = client.messages.create(\n            model=\"claude-sonnet-4-20250514\",\n            max_tokens=4096,\n            tools=tools,\n            messages=messages\n        )\n\n        if response.stop_reason == \"end_turn\":\n            return response.content[0].text\n\n        messages.append({\"role\": \"assistant\", \"content\": response.content})\n        for block in response.content:\n            if block.type == \"tool_use\":\n                result = run_tool(block.name, block.input)\n                if result.startswith(\"Error\"):\n                    consecutive_errors += 1\n                    if consecutive_errors \u0026gt;= max_errors:\n                        return f\"Dừng sau {max_errors} lỗi liên tiếp. Lỗi cuối: {result}\"\n                else:\n                    consecutive_errors = 0  # Reset nếu thành công\n                messages.append({\n                    \"role\": \"user\",\n                    \"content\": [{\"type\": \"tool_result\", \"tool_use_id\": block.id, \"content\": result}]\n                })\n\n    return \"Đã đạt giới hạn số lần lặp.\"\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eVai trò của Claude trong Agent Loop\u003c\/h2\u003e\n\u003cp\u003eClaude đóng 3 vai trò quan trọng trong mỗi vòng lặp:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eQuyết định dùng tool nào:\u003c\/strong\u003e Dựa trên mô tả tools và ngữ cảnh hiện tại, Claude chọn tool phù hợp nhất. Nếu không cần tool nào, Claude trả lời trực tiếp.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eDiễn giải kết quả:\u003c\/strong\u003e Khi tool trả về dữ liệu thô (JSON, text, số liệu), Claude hiểu và tóm tắt kết quả theo cách có ý nghĩa.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eLập kế hoạch bước tiếp:\u003c\/strong\u003e Claude không chỉ phản ứng — nó lập kế hoạch. Nó biết mình cần làm gì tiếp theo dựa trên kết quả vừa nhận được và mục tiêu tổng thể.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eChính vì Claude xử lý phần \"suy nghĩ\" nên bạn — người lập trình — không cần viết logic điều kiện phức tạp. Bạn chỉ cần cung cấp tools và mô tả rõ ràng, Claude sẽ tự biết cách phối hợp.\u003c\/p\u003e\n\n\u003ch2\u003eSo sánh: Agent Loop vs Prompt Chaining vs Workflow\u003c\/h2\u003e\n\u003cp\u003eBa cách tiếp cận phổ biến khi xây dựng ứng dụng AI, mỗi cách phù hợp với bài toán khác nhau:\u003c\/p\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eTiêu chí\u003c\/th\u003e\n      \u003cth\u003eSimple Prompt\u003c\/th\u003e\n      \u003cth\u003ePrompt Chaining\u003c\/th\u003e\n      \u003cth\u003eAgent Loop\u003c\/th\u003e\n    \u003c\/tr\u003e\n  \u003c\/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003eCách hoạt động\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003e1 prompt → 1 response\u003c\/td\u003e\n      \u003ctd\u003eChuỗi prompt cố định: A → B → C\u003c\/td\u003e\n      \u003ctd\u003eVòng lặp linh hoạt, số bước không cố định\u003c\/td\u003e\n    \u003c\/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003eAi quyết định luồng?\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003eKhông có luồng\u003c\/td\u003e\n      \u003ctd\u003eLập trình viên (hardcode)\u003c\/td\u003e\n      \u003ctd\u003eClaude (tự quyết định)\u003c\/td\u003e\n    \u003c\/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003eXử lý lỗi\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003eKhông\u003c\/td\u003e\n      \u003ctd\u003eCó, nhưng phải code thủ công\u003c\/td\u003e\n      \u003ctd\u003eTự động (Claude tự retry hoặc đổi cách)\u003c\/td\u003e\n    \u003c\/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003eĐộ phức tạp code\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003eThấp\u003c\/td\u003e\n      \u003ctd\u003eTrung bình\u003c\/td\u003e\n      \u003ctd\u003eTrung bình (core loop đơn giản)\u003c\/td\u003e\n    \u003c\/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003eChi phí API\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003eThấp (1 call)\u003c\/td\u003e\n      \u003ctd\u003eTrung bình (N calls cố định)\u003c\/td\u003e\n      \u003ctd\u003eCao (N calls không cố định)\u003c\/td\u003e\n    \u003c\/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cstrong\u003ePhù hợp với\u003c\/strong\u003e\u003c\/td\u003e\n      \u003ctd\u003eQ\u0026amp;A, sinh text đơn giản\u003c\/td\u003e\n      \u003ctd\u003ePipeline có các bước rõ ràng\u003c\/td\u003e\n      \u003ctd\u003eNhiệm vụ mở, cần ra quyết định\u003c\/td\u003e\n    \u003c\/tr\u003e\n  \u003c\/tbody\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eQuy tắc chọn:\u003c\/strong\u003e Luôn bắt đầu với cách đơn giản nhất. Nếu simple prompt đủ tốt, không cần agent. Nếu bạn biết chính xác các bước cần thực hiện, dùng prompt chaining. Chỉ dùng agent loop khi số bước không xác định trước hoặc cần khả năng tự điều chỉnh.\u003c\/p\u003e\n\n\u003ch2\u003eKhi nào nên dùng Agent — và khi nào KHÔNG nên\u003c\/h2\u003e\n\n\u003ch3\u003eNên dùng Agent khi:\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eNhiệm vụ có nhiều bước, không biết trước số bước:\u003c\/strong\u003e ví dụ research một chủ đề, debug code, phân tích dữ liệu phức tạp\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCần tương tác với nhiều nguồn dữ liệu:\u003c\/strong\u003e đọc file, query database, gọi API bên ngoài\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCần khả năng tự sửa lỗi:\u003c\/strong\u003e agent có thể thử cách khác nếu cách đầu không hoạt động\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBài toán mở:\u003c\/strong\u003e \"Tìm hiểu đối thủ cạnh tranh\" thay vì \"Tóm tắt đoạn văn này\"\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eKHÔNG nên dùng Agent khi:\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eChi phí là ưu tiên hàng đầu:\u003c\/strong\u003e Mỗi vòng lặp là một API call. Agent chạy 15 vòng tốn gấp 15 lần simple prompt. Với tác vụ đơn giản, đây là lãng phí.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCần tốc độ phản hồi nhanh:\u003c\/strong\u003e Agent loop có độ trễ tích luỹ. Mỗi vòng mất 2-5 giây → 10 vòng = 20-50 giây. Không phù hợp cho chatbot real-time.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eYêu cầu tính nhất quán cao:\u003c\/strong\u003e Vì Claude tự quyết định, hai lần chạy cùng một input có thể cho kết quả khác nhau (số bước khác, tool khác). Nếu cần deterministic, dùng prompt chaining.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eNhiệm vụ đã có quy trình rõ ràng:\u003c\/strong\u003e Nếu bạn biết chính xác \"bước 1 làm A, bước 2 làm B, bước 3 làm C\" thì hardcode pipeline sẽ nhanh hơn, rẻ hơn và đáng tin cậy hơn.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eMột nguyên tắc thực tế: \u003cstrong\u003ebắt đầu không dùng agent\u003c\/strong\u003e. Chỉ khi bạn thấy mình đang viết quá nhiều logic điều kiện (\"nếu kết quả là X thì làm Y, nếu là Z thì làm W...\"), đó là lúc nên chuyển sang agent loop và để Claude xử lý logic đó.\u003c\/p\u003e\n\n\u003ch2\u003eBước tiếp theo\u003c\/h2\u003e\n\u003cp\u003eBạn đã hiểu nền tảng của Agent Loop — vòng lặp Think → Act → Observe → Repeat. Đây là building block cơ bản nhất mà mọi AI agent đều xây dựng trên đó. Từ đây, bạn có thể khám phá thêm:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMulti-agent systems:\u003c\/strong\u003e Nhiều agent phối hợp với nhau, mỗi agent chuyên một lĩnh vực (coding agent, research agent, review agent)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eEvaluation \u0026amp; testing:\u003c\/strong\u003e Cách đánh giá chất lượng agent một cách có hệ thống — không chỉ \"chạy thử xem ổn không\"\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eProduction deployment:\u003c\/strong\u003e Xử lý rate limiting, caching, logging, monitoring khi đưa agent lên production\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eExtended thinking:\u003c\/strong\u003e Bật chế độ thinking của Claude để agent suy luận sâu hơn trước mỗi quyết định\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eHãy bắt đầu bằng cách copy đoạn code agent loop tối giản ở trên, chạy thử, rồi dần thêm tools theo nhu cầu. Mỗi tool mới bạn thêm vào là một khả năng mới cho agent. Tham khảo thêm các bài hướng dẫn nâng cao tại \u003ca href=\"\/en\/collections\/nen-tang\"\u003eThư viện Nền tảng Claude\u003c\/a\u003e.\u003c\/p\u003e\n","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47730149228756,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/agent-loop-n_n-t_ng-xay-d_ng-ai-agent-v_i-claude.jpg?v=1774715275","url":"https:\/\/claude.vn\/en\/products\/agent-loop-n%e1%bb%81n-t%e1%ba%a3ng-xay-d%e1%bb%b1ng-ai-agent-v%e1%bb%9bi-claude","provider":"CLAUDE.VN","version":"1.0","type":"link"}