Mỗi Crew trong CrewAI hoạt động nhờ các Agent. Agent là thành phần cốt lõi, đảm nhận từng phần việc cụ thể trong quy trình tự động hóa. Bài này sẽ hướng dẫn bạn tạo Agent từ cơ bản đến nâng cao, kèm ví dụ thực tế để áp dụng ngay.
Nếu bạn chưa đọc bài tổng quan, hãy xem hướng dẫn CrewAI từ A-Z cho người mới trước khi tiếp tục.
Agent trong CrewAI là gì

Agent là một đơn vị tự động trong CrewAI. Mỗi Agent có vai trò riêng, mục tiêu riêng, và khả năng sử dụng công cụ để hoàn thành nhiệm vụ được giao.
Bạn có thể hình dung Agent giống một nhân viên trong đội ngũ. Một người chuyên nghiên cứu, một người chuyên viết, một người chuyên kiểm duyệt. Mỗi Agent tập trung vào thế mạnh của mình, phối hợp với nhau để ra kết quả cuối cùng.
Một Agent trong CrewAI có thể:
- Thực hiện Task cụ thể được giao
- Ra quyết định dựa trên role và goal đã định nghĩa
- Sử dụng tool (công cụ) để tìm kiếm, phân tích, xử lý dữ liệu
- Giao tiếp và phối hợp với Agent khác trong cùng Crew
- Lưu trữ bộ nhớ (memory) qua các lượt tương tác
- Ủy quyền (delegate) task cho Agent khác khi cần
Điểm khác biệt so với việc gọi API LLM trực tiếp: Agent có ngữ cảnh, có mục tiêu rõ ràng, và có khả năng lặp lại nhiều bước cho đến khi đạt kết quả mong muốn.
Ba thuộc tính chính: role, goal, backstory

Mỗi Agent bắt buộc phải có 3 thuộc tính: role, goal, và backstory. Đây là bộ ba quyết định hành vi và chất lượng output của Agent.
- role: Vai trò của Agent. Ví dụ: “Senior Data Researcher”, “Content Writer”. Role giúp LLM hiểu Agent nên hành xử như thế nào.
- goal: Mục tiêu cụ thể. Agent sẽ dựa vào goal để ra quyết định trong quá trình thực thi. Goal càng rõ ràng, output càng chính xác.
- backstory: Bối cảnh và “tính cách” của Agent. Backstory cung cấp thêm ngữ cảnh để LLM tạo ra câu trả lời phù hợp hơn.
CrewAI hỗ trợ 2 cách định nghĩa Agent: qua file YAML (khuyến nghị) hoặc trực tiếp trong code Python.
Cách 1: Định nghĩa bằng YAML
File YAML giúp tách phần cấu hình ra khỏi logic code, dễ quản lý và chỉnh sửa hơn.
# config/agents.yaml - Định nghĩa agent bằng YAML
researcher:
role: >
Chuyên gia nghiên cứu {topic}
goal: >
Tìm kiếm thông tin mới nhất và đáng tin cậy về {topic}
backstory: >
Bạn là nhà nghiên cứu giàu kinh nghiệm, chuyên tổng hợp
và phân tích dữ liệu từ nhiều nguồn khác nhau.
writer:
role: >
Chuyên gia viết nội dung {topic}
goal: >
Viết bài chất lượng cao, dễ hiểu, dựa trên dữ liệu nghiên cứu
backstory: >
Bạn là content writer có 5 năm kinh nghiệm, giỏi
biến thông tin phức tạp thành nội dung dễ đọc.
Biến {topic} trong YAML sẽ được thay thế khi chạy Crew bằng crew.kickoff(inputs={'topic': 'AI Agents'}).
Cách 2: Định nghĩa trực tiếp trong Python
# Tạo agent trực tiếp bằng Python
from crewai import Agent
researcher = Agent(
role="Chuyên gia nghiên cứu AI",
goal="Tìm kiếm và tổng hợp thông tin mới nhất về AI",
backstory="Nhà nghiên cứu có 10 năm kinh nghiệm trong lĩnh vực AI, "
"chuyên phân tích xu hướng công nghệ."
)
Nên dùng YAML cho dự án lớn, nhiều Agent. Dùng Python khi cần tạo nhanh hoặc cấu hình động lúc runtime.
Cấu hình nâng cao cho Agent

Ngoài 3 thuộc tính bắt buộc, Agent còn nhiều tham số tùy chọn giúp bạn kiểm soát chi tiết hành vi.
Chọn model LLM
Tham số llm cho phép chỉ định model cho từng Agent. Mặc định, CrewAI sử dụng giá trị từ biến môi trường OPENAI_MODEL_NAME hoặc gpt-4.
# Gán model cụ thể cho từng agent
researcher = Agent(
role="Researcher",
goal="Nghiên cứu chuyên sâu",
backstory="Chuyên gia phân tích",
llm="gpt-4o" # Dùng GPT-4o cho agent này
)
writer = Agent(
role="Writer",
goal="Viết nội dung",
backstory="Content writer",
llm="gpt-4o-mini" # Dùng model rẻ hơn cho việc viết
)
Chiến lược phổ biến: dùng model mạnh (GPT-4o, Claude) cho Agent nghiên cứu và phân tích, model nhẹ hơn cho Agent viết hoặc xử lý đơn giản. Cách này giúp tiết kiệm chi phí đáng kể.
Gắn Tool cho Agent
Tool mở rộng khả năng của Agent ra ngoài việc chỉ xử lý văn bản. Agent có thể tìm kiếm web, đọc file, gọi API, chạy code.
# Gắn tool tìm kiếm web cho agent
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
researcher = Agent(
role="Researcher",
goal="Tìm thông tin chính xác từ internet",
backstory="Chuyên gia nghiên cứu trực tuyến",
tools=[SerperDevTool(), ScrapeWebsiteTool()] # Agent dùng được 2 tool
)
Các tham số kiểm soát hành vi
| Tham số | Mặc định | Mô tả |
|---|---|---|
| verbose | False | Bật log chi tiết để debug. Nên bật khi phát triển. |
| allow_delegation | False | Cho phép Agent giao việc cho Agent khác. |
| max_iter | 20 | Số lần lặp tối đa trước khi Agent phải trả kết quả. |
| max_rpm | None | Giới hạn số request/phút, tránh bị rate limit. |
| max_execution_time | None | Thời gian tối đa (giây) cho mỗi lần thực thi. |
| memory | False | Bật bộ nhớ để Agent ghi nhớ qua các tương tác. |
| cache | True | Bật cache cho tool, tránh gọi lại tool trùng lặp. |
| max_retry_limit | 2 | Số lần thử lại khi gặp lỗi. |
# Agent với đầy đủ cấu hình nâng cao
agent = Agent(
role="Data Analyst",
goal="Phân tích dữ liệu và tạo báo cáo chi tiết",
backstory="Chuyên gia phân tích với 10 năm kinh nghiệm",
llm="gpt-4o",
verbose=True, # Bật log chi tiết
allow_delegation=False, # Không ủy quyền
max_iter=25, # Tăng số lần lặp
max_rpm=10, # Giới hạn 10 request/phút
max_execution_time=300, # Tối đa 5 phút
memory=True, # Bật bộ nhớ
cache=True, # Bật cache tool
max_retry_limit=3 # Thử lại 3 lần khi lỗi
)
Delegation: Agent giao việc cho Agent khác

Delegation là tính năng cho phép một Agent ủy quyền công việc cho Agent khác trong cùng Crew. Khi bật allow_delegation=True, Agent có thể tự quyết định giao một phần công việc cho Agent phù hợp hơn.
Ví dụ thực tế: Agent Manager nhận nhiệm vụ “Tạo báo cáo thị trường AI”. Thay vì tự làm tất cả, Manager giao phần nghiên cứu cho Researcher Agent, phần viết cho Writer Agent.
# Agent manager có quyền delegation
manager = Agent(
role="Project Manager",
goal="Điều phối đội ngũ để hoàn thành dự án đúng hạn",
backstory="Quản lý dự án giàu kinh nghiệm, giỏi phân công công việc",
allow_delegation=True # Cho phép giao việc cho agent khác
)
# Agent chuyên nghiên cứu - nhận việc từ manager
researcher = Agent(
role="Researcher",
goal="Nghiên cứu và cung cấp dữ liệu chính xác",
backstory="Nhà nghiên cứu tỉ mỉ, luôn kiểm chứng thông tin"
)
Delegation mặc định bị tắt (allow_delegation=False). Chỉ bật cho Agent cần điều phối. Nếu bật cho tất cả Agent, có thể tạo vòng lặp ủy quyền qua lại.
Delegation hoạt động tốt nhất với Process.hierarchical, nơi một Manager Agent tự động phân công nhiệm vụ cho các Agent phù hợp.
Memory và Reasoning

CrewAI hỗ trợ 2 tính năng nâng cao giúp Agent thông minh hơn: Memory và Reasoning.
Memory
Khi bật memory, Agent có thể ghi nhớ thông tin từ các tương tác trước đó. Tính năng này hữu ích khi Agent cần xử lý nhiều task liên tiếp và cần ngữ cảnh xuyên suốt.
Memory trong CrewAI có nhiều lớp:
- Short-term memory: Lưu thông tin trong phiên làm việc hiện tại
- Long-term memory: Lưu thông tin qua nhiều phiên, giúp Agent cải thiện dần
- Entity memory: Ghi nhớ thông tin về các thực thể (người, tổ chức, khái niệm)
# Bật memory cho agent phân tích dữ liệu dài hạn
analyst = Agent(
role="Data Analyst",
goal="Phân tích xu hướng từ dữ liệu lịch sử",
backstory="Chuyên gia phân tích dữ liệu dài hạn",
memory=True, # Agent sẽ ghi nhớ qua các lần tương tác
respect_context_window=True # Tự tóm tắt khi context quá dài
)
Reasoning
Khi bật reasoning=True, Agent sẽ suy nghĩ và lập kế hoạch trước khi thực hiện task. Agent tạo ra một bản phân tích nội bộ, xác định cách tiếp cận tốt nhất, rồi mới bắt tay vào làm.
# Bật reasoning cho agent cần suy luận phức tạp
strategist = Agent(
role="Business Strategist",
goal="Đề xuất chiến lược kinh doanh dựa trên dữ liệu",
backstory="Chiến lược gia với 15 năm kinh nghiệm tư vấn",
reasoning=True, # Bật suy luận trước khi hành động
max_reasoning_attempts=3 # Tối đa 3 lần suy luận
)
Reasoning phù hợp với các task phức tạp, cần phân tích nhiều chiều. Với task đơn giản, bạn không cần bật vì sẽ tốn thêm token và thời gian xử lý.
Ví dụ: tạo đội 3 Agent

Đây là ví dụ hoàn chỉnh tạo một Crew gồm 3 Agent: Researcher, Writer, và Reviewer. Đội này sẽ nghiên cứu một chủ đề, viết bài, rồi kiểm duyệt nội dung.
Bước 1: Định nghĩa Agent trong YAML
# config/agents.yaml - Đội 3 agent hoàn chỉnh
researcher:
role: >
Chuyên gia nghiên cứu {topic}
goal: >
Thu thập thông tin chính xác, cập nhật về {topic}
từ nhiều nguồn đáng tin cậy
backstory: >
Bạn là nhà nghiên cứu giàu kinh nghiệm. Bạn luôn kiểm chứng
thông tin từ nhiều nguồn trước khi kết luận. Bạn ưu tiên
dữ liệu mới nhất và loại bỏ thông tin lỗi thời.
writer:
role: >
Chuyên gia viết nội dung kỹ thuật
goal: >
Viết bài rõ ràng, dễ hiểu, đầy đủ thông tin dựa trên
dữ liệu nghiên cứu
backstory: >
Bạn là technical writer có 5 năm kinh nghiệm.
Bạn giỏi chuyển thông tin phức tạp thành nội dung
dễ đọc cho đối tượng developer.
reviewer:
role: >
Biên tập viên và kiểm duyệt nội dung
goal: >
Đảm bảo bài viết chính xác, mạch lạc, không có lỗi
backstory: >
Bạn là biên tập viên khó tính. Bạn kiểm tra kỹ từng
chi tiết, sửa lỗi logic, và đảm bảo nội dung đạt
chuẩn chất lượng cao nhất.
Bước 2: Tạo Agent trong Python
# crew.py - Khởi tạo agent từ YAML config
from crewai import Agent, Crew, Process
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool
@CrewBase
class ContentCrew():
"""Crew tạo nội dung với 3 agent chuyên biệt"""
# Trỏ đến file config
agents_config = "config/agents.yaml"
tasks_config = "config/tasks.yaml"
@agent
def researcher(self) -> Agent:
# Agent nghiên cứu, có tool tìm kiếm web
return Agent(
config=self.agents_config['researcher'],
verbose=True,
tools=[SerperDevTool()],
max_iter=25 # Cho phép lặp nhiều hơn để tìm kỹ
)
@agent
def writer(self) -> Agent:
# Agent viết bài, dùng model nhẹ hơn
return Agent(
config=self.agents_config['writer'],
verbose=True,
llm="gpt-4o-mini"
)
@agent
def reviewer(self) -> Agent:
# Agent kiểm duyệt, cần model mạnh để phát hiện lỗi
return Agent(
config=self.agents_config['reviewer'],
verbose=True,
llm="gpt-4o"
)
Bước 3: Ghép Agent vào Crew và chạy
# main.py - Chạy crew hoàn chỉnh
from content_crew import ContentCrew
# Khởi tạo và chạy crew
crew_instance = ContentCrew()
result = crew_instance.crew().kickoff(
inputs={'topic': 'CrewAI Framework'}
)
# In kết quả cuối cùng
print(result)
Khi chạy, Researcher sẽ tìm kiếm thông tin trước, Writer nhận kết quả nghiên cứu để viết bài, cuối cùng Reviewer kiểm duyệt bài viết. Mỗi Agent tập trung vào đúng thế mạnh của mình.
Sau khi đã hiểu cách tạo Agent, bước tiếp theo là định nghĩa Task (nhiệm vụ) cho từng Agent. Xem tiếp bài hướng dẫn Task trong CrewAI để biết cách giao việc hiệu quả.
Mẹo tối ưu Agent

Qua quá trình sử dụng CrewAI, có một số kinh nghiệm giúp Agent hoạt động hiệu quả hơn:
1. Viết backstory chi tiết
Backstory ngắn gọn kiểu “Bạn là chuyên gia” cho kết quả chung chung. Hãy thêm chi tiết cụ thể: bao nhiêu năm kinh nghiệm, chuyên ngành gì, phong cách làm việc ra sao. Backstory càng cụ thể, output càng sát mong đợi.
2. Một Agent, một nhiệm vụ rõ ràng
Tránh tạo Agent “làm tất cả”. Thay vì một Agent vừa nghiên cứu, vừa viết, vừa kiểm duyệt, hãy tách thành 3 Agent riêng. Mỗi Agent tập trung vào một việc sẽ cho kết quả tốt hơn nhiều.
3. Chọn model phù hợp từng Agent
Không phải Agent nào cũng cần model đắt nhất. Agent nghiên cứu cần model mạnh để phân tích. Agent viết nội dung có thể dùng model nhẹ hơn. Chiến lược này giúp giảm chi phí 30-50% mà chất lượng vẫn đảm bảo.
4. Bật verbose khi phát triển
Luôn bật verbose=True trong giai đoạn phát triển. Log chi tiết giúp bạn hiểu Agent đang “nghĩ” gì, dùng tool nào, và tại sao cho ra kết quả như vậy. Tắt verbose khi deploy production.
5. Đặt giới hạn hợp lý
Cấu hình max_iter, max_execution_time, và max_rpm để tránh Agent chạy vô tận hoặc tốn quá nhiều API call. Giá trị mặc định (max_iter=20) phù hợp cho hầu hết trường hợp, nhưng task phức tạp có thể cần tăng lên.
6. Tận dụng cache
Cache mặc định đã bật (cache=True). Tính năng này giúp Agent không gọi lại tool với cùng tham số. Đặc biệt hữu ích khi nhiều Agent cùng cần một thông tin. Chỉ tắt cache khi dữ liệu cần luôn mới nhất.
Nếu bạn cần server mạnh để chạy CrewAI với nhiều Agent song song, Pro VPS tại AZDIGI là lựa chọn phù hợp với hiệu năng cao và giá hợp lý.
Câu hỏi thường gặp
CrewAI không giới hạn số lượng Agent trong một Crew. Tuy nhiên, mỗi Agent tiêu tốn token và thời gian xử lý riêng. Trong thực tế, đội 3-7 Agent hoạt động hiệu quả nhất. Nhiều hơn thường gây chậm và tốn chi phí mà không cải thiện chất lượng đáng kể.
Có. Mỗi Agent có tham số llm riêng. Bạn có thể dùng GPT-4o cho Agent nghiên cứu, GPT-4o-mini cho Agent viết, hoặc thậm chí dùng model từ provider khác như Anthropic Claude, Google Gemini. Đây là cách tiết kiệm chi phí hiệu quả.
Agent không có tool vẫn hoạt động bình thường, dựa trên kiến thức của LLM. Tool chỉ cần thiết khi Agent phải truy cập dữ liệu bên ngoài (tìm kiếm web, đọc file, gọi API). Nhiều Agent như Writer hay Reviewer hoạt động tốt mà không cần tool.
Dùng max_execution_time để giới hạn thời gian chạy, max_iter để giới hạn số lần lặp, và max_retry_limit để kiểm soát số lần thử lại khi lỗi. Nếu Agent vẫn không trả kết quả, hãy kiểm tra backstory và goal có rõ ràng không.
Chỉ bật allow_delegation=True cho Agent đóng vai trò quản lý hoặc điều phối. Các Agent chuyên môn (Researcher, Writer) nên để mặc định False. Nếu dùng Process.hierarchical, CrewAI sẽ tự xử lý delegation qua Manager Agent.
Có thể bạn cần xem thêm
- Task trong CrewAI: giao việc cho AI agent
- Tool trong CrewAI: mở rộng khả năng agent
- CrewAI là gì? Hướng dẫn xây dựng hệ thống Multi-Agent AI với Python
- Flow trong CrewAI: xây dựng workflow phức tạp theo sự kiện
- Generative AI: công nghệ đứng sau ChatGPT, Gemini và làn sóng AI tạo sinh
- n8n + AI: Xây dựng Workflow tự động với ChatGPT và LLMs
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.