Ba trụ cột: role, goal, backstory
Chất lượng một agent phụ thuộc gần như hoàn toàn vào cách bạn định nghĩa nó. Ba trường quan trọng nhất trong CrewAI:
- role: agent là ai — chức danh, chuyên môn. Ví dụ "Chuyên viên phân tích tài chính".
- goal: agent phải đạt được gì — mục tiêu đo lường được. Ví dụ "Phát hiện 3 rủi ro dòng tiền lớn nhất trong báo cáo".
- backstory: bối cảnh & phong cách định hình cách agent tư duy. Ví dụ "Bạn thận trọng, luôn nghi ngờ số liệu đẹp bất thường".
Ví dụ đối chiếu: yếu vs mạnh
# YẾU — mơ hồ, agent tự do bịa
Agent(role="Trợ lý", goal="Giúp phân tích dữ liệu", backstory="Bạn thông minh.")
# MẠNH — cụ thể, đo lường được
Agent(
role="Chuyên viên phân tích rủi ro tín dụng",
goal="Từ báo cáo tài chính, chỉ ra đúng 3 rủi ro dòng tiền "
"nghiêm trọng nhất, mỗi rủi ro kèm dòng số liệu chứng minh",
backstory="Bạn có 10 năm thẩm định tín dụng, nghi ngờ mọi con "
"số tăng trưởng bất thường và luôn đòi bằng chứng.",
)
Viết task: mô tả + expected_output
Task là việc cụ thể giao cho agent. Hai trường cốt lõi:
- description: chỉ dẫn từng bước, có ràng buộc.
- expected_output: định dạng kết quả — đây là phần quyết định agent sau có dùng được không.
Task(
description=(
"Đọc báo cáo tài chính đính kèm. "
"1) Tính tỷ lệ nợ/vốn. "
"2) So sánh dòng tiền 2 quý gần nhất. "
"3) Chọn 3 rủi ro lớn nhất."
),
expected_output=(
"Bảng markdown 3 dòng, cột: Rủi ro | Mức độ (Cao/TB/Thấp) | Dẫn chứng số liệu"
),
agent=risk_analyst,
)
Các bước viết một task tốt
- Bắt đầu bằng động từ hành động (Đọc, Tính, So sánh, Chọn).
- Đánh số các bước con để agent không bỏ sót.
- Ràng buộc phạm vi ("đúng 3 rủi ro", "tối đa 150 từ").
- Mô tả output như một khuôn mẫu — định dạng, cột, độ dài.
- Nêu tiêu chí loại bỏ nếu cần ("bỏ qua rủi ro dưới 1% tổng tài sản").
Khung R-G-T để kiểm tra nhanh
Trước khi chạy, soi mỗi agent+task qua khung R-G-T:
Role : Người này CÓ CHUYÊN MÔN đúng cho việc này không?
Goal : Mục tiêu có ĐO LƯỜNG được không? (có số, có tiêu chí)
Task : Output có phải là KHUÔN cụ thể agent sau dùng được ngay không?
Nếu một trong ba câu trả lời là "không", agent sẽ trôi khỏi ý định của bạn.
Gán tool cho đúng agent
Chỉ gán tool cho agent thực sự cần. Researcher cần search tool; Writer thường không cần tool nào. Gán thừa tool khiến agent "nghịch" công cụ không liên quan và tốn token.
from crewai_tools import SerperDevTool
search = SerperDevTool()
researcher = Agent(role="...", goal="...", tools=[search])
Checklist role/goal/task
- [ ] Role là một chức danh chuyên môn cụ thể, không phải "trợ lý chung".
- [ ] Goal có số hoặc tiêu chí thành công rõ ràng.
- [ ] Backstory định hình phong cách/thái độ, không lặp lại goal.
- [ ] Task description có các bước đánh số.
- [ ] expected_output là một khuôn mẫu cụ thể.
- [ ] Tool chỉ gán cho agent thực sự cần.
Sai lầm thường gặp
- Goal chung chung kiểu "hỗ trợ người dùng" → agent làm mọi thứ hời hợt.
- Backstory chỉ lặp lại goal → lãng phí, không thêm định hướng hành vi.
- expected_output mô tả nội dung thay vì định dạng → agent sau khó parse.
- Gán mọi tool cho mọi agent → agent lạm dụng tool, chậm và tốn tiền.
- Task ôm đồm nhiều mục tiêu → nên tách thành nhiều task nhỏ, mỗi task một output.
Học xong bài này rồi?
Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu,
và học hết khóa thì có chứng chỉ.
Lưu tiến độ của tôi