{"product_id":"building-effective-agents-với-claude-hướng-dẫn-kiến-truc","title":"Building Effective Agents với Claude — Hướng dẫn kiến trúc","description":"\n\u003ch2\u003eAI Agents là gì — và tại sao chúng quan trọng\u003c\/h2\u003e\n\u003cp\u003eMột \u003cstrong\u003eAI agent\u003c\/strong\u003e là hệ thống trong đó LLM không chỉ trả lời câu hỏi một lần mà điều phối một chuỗi hành động để hoàn thành mục tiêu phức tạp. Thay vì bạn phải break down task thủ công thành từng bước nhỏ, agent tự lên kế hoạch, thực thi từng bước, quan sát kết quả, và điều chỉnh kế hoạch nếu cần.\u003c\/p\u003e\n\n\u003cp\u003eNăm 2025-2026 đánh dấu sự chuyển dịch từ \"LLM as chatbot\" sang \"LLM as autonomous worker\". Claude, với khả năng reasoning mạnh, tool use reliable, và context window 200K token, là một trong những model phù hợp nhất để build agents production-grade.\u003c\/p\u003e\n\n\u003ch2\u003eAgentic Loop — Vòng lặp cơ bản của mọi agent\u003c\/h2\u003e\n\u003cp\u003eMọi AI agent đều hoạt động theo một vòng lặp cơ bản:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eObserve:\u003c\/strong\u003e Thu thập thông tin về trạng thái hiện tại (từ tools, environment, user)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePlan:\u003c\/strong\u003e Quyết định bước tiếp theo cần làm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eAct:\u003c\/strong\u003e Thực thi hành động (gọi tool, viết code, gọi API...)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReflect:\u003c\/strong\u003e Đánh giá kết quả, cập nhật hiểu biết\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRepeat:\u003c\/strong\u003e Lặp lại cho đến khi task hoàn thành hoặc cần human input\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Pseudo-code của agentic loop\nasync function agentLoop(task, tools, maxIterations = 20) {\n  const messages = [{ role: 'user', content: task }];\n  let iteration = 0;\n\n  while (iteration \u0026lt; maxIterations) {\n    const response = await claude.complete({\n      system: AGENT_SYSTEM_PROMPT,\n      messages,\n      tools\n    });\n\n    \/\/ Kiểm tra nếu agent đã xong\n    if (response.stop_reason === 'end_turn') {\n      return response.content;\n    }\n\n    \/\/ Xử lý tool calls\n    if (response.stop_reason === 'tool_use') {\n      const toolResults = await executeTools(response.tool_calls);\n      messages.push({ role: 'assistant', content: response.content });\n      messages.push({ role: 'user', content: toolResults });\n    }\n\n    iteration++;\n  }\n\n  throw new Error('Max iterations reached');\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eTool Use Fundamentals — Mắt, tai, và tay của agent\u003c\/h2\u003e\n\u003cp\u003eTools là cách agent tương tác với thế giới bên ngoài context window. Mỗi tool là một function mà Claude có thể gọi khi cần.\u003c\/p\u003e\n\n\u003ch3\u003eĐịnh nghĩa tool đúng cách\u003c\/h3\u003e\n\u003cp\u003eChất lượng mô tả tool ảnh hưởng trực tiếp đến độ chính xác của agent. Claude đọc \u003ccode\u003edescription\u003c\/code\u003e để quyết định khi nào và cách nào gọi tool:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003econst tools = [\n  {\n    name: \"search_web\",\n    description: \"Tìm kiếm thông tin trên internet.\n\" +\n      \"Dùng khi cần thông tin cập nhật, sự kiện gần đây,\n\" +\n      \"hoặc facts không có trong training data.\n\" +\n      \"KHÔNG dùng cho thông tin đã biết chắc chắn.\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        query: {\n          type: \"string\",\n          description: \"Search query, nên ngắn gọn và cụ thể\"\n        },\n        num_results: {\n          type: \"integer\",\n          description: \"Số kết quả cần lấy (1-10, default: 5)\",\n          default: 5\n        }\n      },\n      required: [\"query\"]\n    }\n  },\n  {\n    name: \"execute_code\",\n    description: \"Chạy Python code và trả về output.\n\" +\n      \"Dùng để tính toán, xử lý data, tạo charts.\n\" +\n      \"Code chạy trong sandbox an toàn, không có internet access.\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        code: {\n          type: \"string\",\n          description: \"Python code cần chạy\"\n        }\n      },\n      required: [\"code\"]\n    }\n  }\n];\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eTool design principles\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSingle responsibility:\u003c\/strong\u003e Mỗi tool làm đúng một việc, làm tốt\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eClear boundaries:\u003c\/strong\u003e Mô tả rõ tool này dùng khi nào, không dùng khi nào\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePredictable outputs:\u003c\/strong\u003e Format output nhất quán để Claude xử lý dễ dàng\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGraceful errors:\u003c\/strong\u003e Tool luôn trả về structured error thay vì throw exception\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eBuilding Blocks — Ba thành phần cốt lõi\u003c\/h2\u003e\n\n\u003ch3\u003e1. Planning — Lên kế hoạch trước khi hành động\u003c\/h3\u003e\n\u003cp\u003eVới task phức tạp, cho phép Claude \"think out loud\" trước khi bắt đầu thực thi:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eSYSTEM: Khi nhận task phức tạp, hãy bắt đầu bằng:\n1. Phân tích task: Task yêu cầu gì? Constraints là gì?\n2. Lên kế hoạch: Các bước cụ thể cần thực hiện theo thứ tự\n3. Identify risks: Điều gì có thể sai? Cần fallback gì?\nSau đó mới bắt đầu thực thi từng bước.\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eKỹ thuật này — còn gọi là \"plan-then-execute\" — giúp giảm đáng kể số lượng iterations thất bại và cải thiện task success rate.\u003c\/p\u003e\n\n\u003ch3\u003e2. Execution — Thực thi chính xác và có kiểm soát\u003c\/h3\u003e\n\u003cp\u003eTrong quá trình thực thi, agent cần:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eGọi tools theo đúng thứ tự logic (sequential khi có dependency, parallel khi độc lập)\u003c\/li\u003e\n  \u003cli\u003eValidate output của mỗi tool trước khi dùng trong bước tiếp theo\u003c\/li\u003e\n  \u003cli\u003eNhận diện khi nào kết quả không như mong đợi và điều chỉnh kế hoạch\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003e3. Reflection — Tự đánh giá và học từ lỗi\u003c\/h3\u003e\n\u003cp\u003eSau mỗi action hoặc sau khi hoàn thành task, agent nên tự đánh giá:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Reflection prompt sau khi hoàn thành subtask\n\"Vừa xong bước [X]. Kết quả có đúng như mong đợi không?\nNếu không, điều gì cần điều chỉnh trong kế hoạch tiếp theo?\"\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eMulti-Agent Architectures\u003c\/h2\u003e\n\u003cp\u003eKhi task quá phức tạp cho một agent, multi-agent architecture cho phép phân tán công việc.\u003c\/p\u003e\n\n\u003ch3\u003ePattern 1: Orchestrator + Workers\u003c\/h3\u003e\n\u003cp\u003eĐây là pattern phổ biến nhất. Một orchestrator agent nhận task gốc, phân tích, và giao phần việc cho các specialist workers:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Orchestrator nhận task phức tạp\nconst orchestratorTask = \"Phân tích thị trường smartphone Việt Nam Q1 2026:\n\" +\n  \"1. Search web để lấy sales data\n\" +\n  \"2. Phân tích market share\n\" +\n  \"3. Identify key trends\n\" +\n  \"4. Viết executive summary\";\n\n\/\/ Orchestrator quyết định giao cho workers:\n\/\/ - ResearchAgent: thu thập data\n\/\/ - AnalysisAgent: phân tích số liệu\n\/\/ - WritingAgent: viết báo cáo\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003ePattern 2: Pipeline (Sequential)\u003c\/h3\u003e\n\u003cp\u003eOutput của agent A là input của agent B — phù hợp khi workflow có thứ tự tuyến tính rõ ràng:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eRawData → [CleaningAgent] → CleanData\n       → [AnalysisAgent] → Insights\n       → [ReportAgent]   → FinalReport\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003ePattern 3: Debate \/ Critique\u003c\/h3\u003e\n\u003cp\u003eHai agents với perspective khác nhau cùng làm việc trên một task — một \"Proposer\" tạo solution, một \"Critic\" tìm lỗi và cải thiện. Hiệu quả đặc biệt cho code review và strategic decisions:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003econst proposerSystem = \"Bạn là software architect.\n\" +\n  \"Đề xuất architecture solution cho task được giao.\n\" +\n  \"Ưu tiên simplicity và maintainability.\";\n\nconst criticSystem = \"Bạn là senior engineer với 10 năm kinh nghiệm.\n\" +\n  \"Review solution được đề xuất. Chỉ ra:\n\" +\n  \"- Potential failure points\n\" +\n  \"- Scalability concerns\n\" +\n  \"- Security issues\n\" +\n  \"- Better alternatives nếu có.\";\n\n\/\/ Round 1: Proposer creates design\n\/\/ Round 2: Critic reviews\n\/\/ Round 3: Proposer revises\n\/\/ Round 4: Final critique + sign-off\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eError Handling và Retry Strategies\u003c\/h2\u003e\n\u003cp\u003eAgents trong production sẽ gặp lỗi — đây là thực tế không thể tránh. Hệ thống agent tốt cần có error handling đa lớp:\u003c\/p\u003e\n\n\u003ch3\u003eTool-level error handling\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003easync function executeToolSafely(toolName, input) {\n  try {\n    const result = await tools[toolName](input);\n    return { success: true, data: result };\n  } catch (error) {\n    return {\n      success: false,\n      error: error.message,\n      suggestion: getSuggestionForError(error)\n    };\n  }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eAgent-level retry với backoff\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003econst retryConfig = {\n  maxRetries: 3,\n  backoffMs: [1000, 3000, 9000], \/\/ exponential backoff\n  retryableErrors: ['rate_limit', 'timeout', 'tool_unavailable']\n};\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eFallback strategies\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eNếu tool A fails, thử tool B với cùng mục đích\u003c\/li\u003e\n  \u003cli\u003eNếu không thể hoàn thành subtask, đánh dấu và tiếp tục các subtask khác\u003c\/li\u003e\n  \u003cli\u003eKhi vượt quá retry limit, escalate lên human-in-the-loop\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eHuman-in-the-Loop — Khi nào cần con người\u003c\/h2\u003e\n\u003cp\u003eKhông phải mọi quyết định đều nên delegate hoàn toàn cho agent. Thiết kế tốt cần xác định rõ các \"checkpoint\" yêu cầu human approval:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003econst HUMAN_APPROVAL_REQUIRED = [\n  'delete_production_data',\n  'send_bulk_email',\n  'charge_customer',\n  'deploy_to_production',\n  'contact_external_partner'\n];\n\nasync function executeAction(action) {\n  if (HUMAN_APPROVAL_REQUIRED.includes(action.type)) {\n    const approved = await requestHumanApproval(action);\n    if (!approved) return { status: 'rejected' };\n  }\n  return await performAction(action);\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eNguyên tắc: Bất kỳ hành động nào không thể undo hoặc có tác động lớn đến tài chính\/uy tín đều nên có human checkpoint.\u003c\/p\u003e\n\n\u003ch2\u003eMCP — Model Context Protocol Integration\u003c\/h2\u003e\n\u003cp\u003eModel Context Protocol (MCP) là chuẩn mở do Anthropic phát triển, cho phép Claude kết nối với external data sources và tools theo cách chuẩn hóa. Thay vì viết custom integration cho mỗi tool, bạn dùng MCP server có sẵn:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Ví dụ: Kết nối Claude với database qua MCP\n\/\/ mcp-config.json\n{\n  \"mcpServers\": {\n    \"postgresql\": {\n      \"command\": \"npx\",\n      \"args\": [\"@modelcontextprotocol\/server-postgres\"],\n      \"env\": {\n        \"POSTGRES_CONNECTION_STRING\": \"postgresql:\/\/...\"\n      }\n    },\n    \"filesystem\": {\n      \"command\": \"npx\",\n      \"args\": [\"@modelcontextprotocol\/server-filesystem\"],\n      \"env\": {\n        \"ALLOWED_DIRECTORIES\": \"\/data\/reports\"\n      }\n    }\n  }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eMCP ecosystem đang phát triển nhanh — có sẵn MCP servers cho Google Drive, Slack, GitHub, Jira, database phổ biến, và nhiều hơn nữa. Điều này có nghĩa là bạn có thể build agent kết nối với tools của công ty mà không cần viết integration từ đầu.\u003c\/p\u003e\n\n\u003ch2\u003eProduction Considerations\u003c\/h2\u003e\n\n\u003ch3\u003eChi phí và tối ưu\u003c\/h3\u003e\n\u003cp\u003eAgents tiêu tốn nhiều tokens hơn single-turn completions vì mỗi iteration phải gửi lại toàn bộ conversation history. Một số kỹ thuật tối ưu chi phí:\u003c\/p\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eModel tiering:\u003c\/strong\u003e Dùng Haiku cho planning đơn giản, Sonnet cho execution, Opus chỉ khi cần reasoning phức tạp\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePrompt caching:\u003c\/strong\u003e Cache system prompt và document context để tránh tính phí lại\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eEarly stopping:\u003c\/strong\u003e Detect khi task đã xong thay vì chạy đủ maxIterations\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eLatency\u003c\/h3\u003e\n\u003cp\u003eMỗi iteration của agent loop = ít nhất 1-5 giây latency. Cho tasks cần 10-20 iterations, total time có thể là 1-2 phút. Strategies:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eParallel tool execution khi tools không có dependency\u003c\/li\u003e\n  \u003cli\u003eStreaming intermediate results về UI để user thấy progress\u003c\/li\u003e\n  \u003cli\u003eSet expectations rõ ràng với user về expected completion time\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSafety và guardrails\u003c\/h3\u003e\n\u003cp\u003eAgents có thể thực hiện hành động có tác động thực — quan trọng hơn nhiều so với chatbot thông thường:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eImplement resource limits (max API calls, max file size, max execution time)\u003c\/li\u003e\n  \u003cli\u003eSandbox environment cho code execution\u003c\/li\u003e\n  \u003cli\u003eAudit log mọi action của agent\u003c\/li\u003e\n  \u003cli\u003eRate limiting để prevent runaway loops\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eClaude Agent SDK — Overview\u003c\/h2\u003e\n\u003cp\u003eAnthropic cung cấp Claude Agent SDK để đơn giản hóa việc build agents. SDK xử lý:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eAgentic loop management tự động\u003c\/li\u003e\n  \u003cli\u003eTool execution và result injection\u003c\/li\u003e\n  \u003cli\u003eError handling và retry logic\u003c\/li\u003e\n  \u003cli\u003eConversation history management\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cpre\u003e\u003ccode\u003eimport Anthropic from '@anthropic-ai\/sdk';\n\nconst client = new Anthropic();\n\n\/\/ Định nghĩa tools\nconst tools = [\/* ... *\/];\n\n\/\/ Chạy agent với SDK\nconst result = await client.messages.create({\n  model: \"claude-opus-4\",\n  max_tokens: 8192,\n  tools: tools,\n  messages: [\n    { role: \"user\", content: \"Phân tích dữ liệu bán hàng tháng này và tạo báo cáo\" }\n  ]\n});\n\n\/\/ Developer cần tự implement agentic loop để handle tool_use responses\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eReal Examples — Agents hoạt động trong thực tế\u003c\/h2\u003e\n\n\u003ch3\u003eExample 1: Code Review Agent\u003c\/h3\u003e\n\u003cp\u003eAgent nhận GitHub PR link, tự động fetch code changes, phân tích theo checklist (security, performance, code style), và tạo review comments chi tiết. Tools cần: \u003ccode\u003efetch_github_pr\u003c\/code\u003e, \u003ccode\u003eanalyze_code\u003c\/code\u003e, \u003ccode\u003epost_github_comment\u003c\/code\u003e.\u003c\/p\u003e\n\n\u003ch3\u003eExample 2: Research Agent\u003c\/h3\u003e\n\u003cp\u003eAgent nhận topic, tự search web tìm sources, đọc và summarize mỗi source, cross-reference các claims, và tạo research report với citations. Tools cần: \u003ccode\u003esearch_web\u003c\/code\u003e, \u003ccode\u003efetch_url\u003c\/code\u003e, \u003ccode\u003eextract_content\u003c\/code\u003e, \u003ccode\u003ewrite_report\u003c\/code\u003e.\u003c\/p\u003e\n\n\u003ch3\u003eExample 3: Customer Support Agent\u003c\/h3\u003e\n\u003cp\u003eAgent kết nối với CRM và order management system, tự động xử lý 80% tickets thông thường (tracking, returns, FAQs), và chỉ escalate tickets phức tạp lên human agent. Tools cần: \u003ccode\u003elookup_order\u003c\/code\u003e, \u003ccode\u003eget_customer_profile\u003c\/code\u003e, \u003ccode\u003ecreate_return_request\u003c\/code\u003e, \u003ccode\u003eescalate_to_human\u003c\/code\u003e.\u003c\/p\u003e\n\n\u003cp\u003eXây dựng effective agents không phải chỉ là kỹ thuật — đó là sự hiểu biết sâu sắc về khi nào nên trust AI và khi nào cần human judgment. Agents hoạt động tốt nhất khi được thiết kế với triết lý: tự động hóa những gì có thể tự động hóa an toàn, và gracefully hand off những gì vượt quá phạm vi đó.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003eBài viết liên quan\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/context-engineering-ngh%E1%BB%87-thu%E1%BA%ADt-qu%E1%BA%A3n-ly-context-cho-claude\"\u003eContext Engineering — Nghệ thuật quản lý context cho Claude\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/claude-code-vs-github-copilot-vs-cursor-dau-la-ide-ai-t%E1%BB%91t-nh%E1%BA%A5t\"\u003eClaude Code vs GitHub Copilot vs Cursor — Đâu là IDE AI tốt nhất?\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/claude-api-h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-t%E1%BB%AB-a-d%E1%BA%BFn-z-cho-developer\"\u003eClaude API — Hướng dẫn từ A đến Z cho developer\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/extended-thinking-tool-use-suy-lu%E1%BA%ADn-sau-k%E1%BA%BFt-h%E1%BB%A3p-cong-c%E1%BB%A5\"\u003eExtended Thinking + Tool Use — Suy luận sâu kết hợp công cụ\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/claude-cho-data-validation-va-data-quality\"\u003eClaude cho Data: Validation và data quality\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47721065349332,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/building-effective-agents-v_i-claude-h_ng-d_n-ki_n-truc.jpg?v=1774521019","url":"https:\/\/claude.vn\/en\/products\/building-effective-agents-v%e1%bb%9bi-claude-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-ki%e1%ba%bfn-truc","provider":"CLAUDE.VN","version":"1.0","type":"link"}