Cách Mình Thiết Kế Agents

Kiến trúc agent, orchestration patterns, và nguyên tắc thiết kế tools

AI Agents không phải chatbot. Chatbot trả lời câu hỏi, còn agent thực hiện hành động -- gọi API, đọc database, tạo file, ra quyết định. Mấu chốt là thiết kế sao cho agent biết dùng tool nào, khi nào, và dừng khi nào.

Ý tưởng cốt lõi: Một agent nên làm tốt một việc. Cần phức tạp thì kết hợp nhiều agent đơn giản lại.

Thành Phần Của Agent

Thành phầnVai trò
LLM"Bộ não" -- suy luận và sinh nội dung
ToolsCác hành động agent thực hiện được (tool calling)
MemoryNgữ cảnh từ các tương tác trước
OrchestrationĐiều khiển luồng và ra quyết định

Pattern Kiến Trúc

Agent đơn giản + Tools

Một LLM, vài tools, một vòng lặp. Agent nhận yêu cầu, chọn tool, thực thi, tổng hợp kết quả. SEO Content Writer của mình chạy kiểu này.

Dùng khi agent đơn năng, workflow thẳng, tối đa 3-7 tools. Đa phần trường hợp thì pattern này đủ rồi, đừng over-engineer.

Multi-Agent

Nhiều agent chuyên biệt, mỗi con có tools và prompts riêng, được một orchestrator điều phối. Orchestrator nhận yêu cầu rồi route tới đúng agent chuyên trách. Agentic SEO Publishing của mình chạy kiểu này.

Dùng khi workflow phức tạp, các giai đoạn cần năng lực khác nhau, hoặc cần scale từng agent độc lập.

Pipeline

Mỗi agent xử lý xong rồi chuyển output cho agent tiếp theo. Tuyến tính, không rẽ nhánh. Content transformation pipeline là ví dụ điển hình.

Dùng khi xử lý hoàn toàn linear, mỗi bước độc lập, và cần debug rõ ràng từng giai đoạn.

Chọn Cách Tiếp Cận

Tình huốngDùngLý do
Q&A đơn giản với toolsManual agent loopÍt overhead, kiểm soát hoàn toàn
Multi-agent orchestrationFramework (Agno AI)Có sẵn routing, state management
PrototypingManualIterate nhanh, ít dependency
Production agentTùy trường hợpPhụ thuộc độ phức tạp và kinh nghiệm team

Dùng framework khi cần multi-agent coordination, khi tính năng có sẵn tiết kiệm công sức đáng kể (retries, logging, state), hoặc team đã quen framework đó.

Build thủ công khi cần kiểm soát hoàn toàn agent loop, agent đơn giản, đang học cách agents hoạt động, hoặc framework overhead không đáng.

Thiết Kế Tools

Tools là cách agent tương tác với thế giới bên ngoài. Thiết kế tool tệ thì agent giỏi mấy cũng dùng sai.

Nguyên tắc

Nguyên tắcTốtTệ
Đơn trách nhiệmsearch_websearch_and_summarize
Đặt tên rõ ràngcreate_documentdo_doc_stuff
Mô tả nói "khi nào dùng""Dùng khi cần dữ liệu mới nhất""Tìm kiếm mấy thứ"
Tham số có ràng buộcDùng enums khi có thểFree-form strings cho mọi thứ
Giới hạn input"tối đa 10 keywords"Không giới hạn

Mô tả tool

Mô tả tool quyết định LLM có chọn đúng tool không. Viết cho LLM biết khi nào dùng, không chỉ tool làm gì.

  • Yếu: "Tìm kiếm keywords"
  • Mạnh: "Tìm kiếm dữ liệu SEO về keywords. Trả về search volume, difficulty, và related keywords. Dùng khi cần keyword metrics cho content planning."

Phân loại

LoạiVí dụLưu ý
InformationSearch, lookup, fetchGọi lặp lại an toàn
ActionCreate, update, deleteCó thể cần xác nhận user
IntegrationAPI calls, webhooksCó side effects, rate limits

The Think Tool

A special tool pattern worth knowing: a tool that does nothing except give the agent a place to reason before acting. The tool has no backend logic — it just returns an empty response. Its value is that the agent's thought gets recorded in the conversation trace and stays in the context window for subsequent steps.

{
  "name": "think",
  "description": "Use this tool to think about something before acting. It will not obtain new information or change any data. Use it when you need to reason through a complex decision, check policy compliance, or plan your next steps.",
  "input_schema": {
    "type": "object",
    "properties": {
      "thought": {
        "type": "string",
        "description": "Your reasoning or analysis."
      }
    },
    "required": ["thought"]
  }
}

The backend handler:

def handle_think(thought: str) -> str:
    return ""

Without this tool, agents tend to jump straight to action. With it, the agent pauses to verify before doing something irreversible. Example:

User: "Cancel my flight and rebook for next Tuesday"

Step 1: think("The user has a non-refundable ticket purchased 3 days ago.
  Policy: non-refundable tickets can only be rebooked within 24 hours.
  I should NOT cancel — I need to inform the user about the restriction.")

Step 2: get_booking(id="ABC123")  →  confirms non-refundable

Step 3: send_message("Your ticket is non-refundable and was purchased
  3 days ago, so I cannot rebook it. Here are your options...")

Without the think tool, the agent might cancel first and realize the mistake after.

Anthropic measured a 54% improvement on complex customer service benchmarks (tau-bench) when using this pattern. The biggest gains come from multi-step workflows where the agent must check constraints between actions.

This is different from extended thinking (budget_tokens), which happens before the response starts. The think tool works during the response, between tool calls — exactly when the agent has new information from tool results and needs to reassess.

Source: The "think" tool: Enabling Claude to stop and think

System Prompt

System prompt ảnh hưởng hành vi agent nhiều hơn bất cứ thứ gì khác. Viết system prompt mà bỏ sót thì agent hành xử lung tung.

Cần bao gồm:

  1. Vai trò: Agent là ai, mục đích gì
  2. Năng lực: Có tools nào, làm được gì
  3. Hướng dẫn: Nên tiếp cận thế nào, ưu tiên gì
  4. Giới hạn: Không làm gì, từ chối gì
NênKhông nên
Định nghĩa ranh giới rõ ràngMơ hồ về khả năng
Liệt kê tools và khi nào dùngGiả định LLM biết tools
Đặt hướng dẫn hành vi cụ thểĐể agent tự quyết mọi thứ
Nêu rõ giới hạnHứa quá khả năng

Xử Lý Lỗi

Agent có thể fail theo nhiều kiểu. Thiết kế cho graceful degradation chứ đừng để một tool fail mà cả conversation crash.

LỗiNguyên nhânXử lý
Tool errorExternal API downRetry với backoff, rồi báo user
Max iterationsTask quá phức tạpTrả tiến độ đã làm kèm giải thích
Rate limitQuá nhiều requestsBackoff, queue, hoặc fail gracefully
Context overflowHội thoại quá dàiTóm tắt rồi tiếp tục

Bốn nguyên tắc xử lý lỗi:

  1. Trả lỗi hữu ích cho LLM -- tool fail thì nói rõ sai gì để LLM thử cách khác, đừng throw exception rồi chết
  2. Đặt giới hạn vòng lặp -- không có max iterations thì agent chạy vòng vòng mãi
  3. Bảo toàn tiến độ -- fail giữa chừng thì lưu phần đã xong, đừng mất hết
  4. Fail có thông tin -- user cần biết chuyện gì xảy ra và nên làm gì tiếp

Những Lỗi Hay Gặp

Cho agent quá nhiều tools -- agent nhầm lẫn, chọn sai tool. Giới hạn 5-7 tools mỗi agent. Cần nhiều hơn thì tạo agent chuyên biệt.

Mô tả tool mơ hồ -- agent dùng sai tool, gọi sai parameters. Mô tả khi nào dùng, cho ví dụ cụ thể.

Không có error boundaries -- một tool fail kéo cả conversation sập. Wrap tool execution trong error handling, trả errors như tool results chứ không phải exceptions.

Infinite loops -- agent gọi cùng tool liên tục mà không tiến triển. Đặt max iterations, phát hiện pattern lặp, phá vòng lặp bằng thông báo rõ ràng.

System prompt quá tải -- nhồi quá nhiều hướng dẫn thì agent bỏ sót. Giữ tập trung, test từng phần riêng.

Checklist

Ổn nếu:

  • Agent chọn đúng tool cho đúng tình huống
  • Errors không crash conversation
  • Task phức tạp xong trong số vòng lặp hợp lý
  • User nhận phản hồi hữu ích kể cả khi tool fail
  • Agent giữ đúng vai trò

Cần sửa nếu:

  • Agent hay chọn sai tool
  • Errors dẫn đến lỗi khó hiểu
  • Agent chạy vòng vòng không tiến triển
  • Task đơn giản tốn quá nhiều vòng lặp
  • Agent cố làm thứ ngoài phạm vi

Tham Khảo Nhanh

Trước khi deploy agent, check:

  • Vai trò rõ ràng trong system prompt
  • Mỗi tool có mô tả kèm hướng dẫn "khi nào dùng"
  • Error handling cho mỗi tool
  • Max iterations đã set
  • Chiến lược memory đã xác định (nếu cần)
  • Streaming đã cấu hình
  • Đã test edge cases

Đặt tên tool: dùng format verb_noun -- search_web, create_document, analyze_keywords, fetch_rankings. Tránh tên mơ hồ kiểu do_thing, helper.