Đây là bước tạo giá trị lớn nhất. Tóm tắt thì hay, nhưng action item mới là thứ khiến công việc chạy. Bài này bạn ép LLM xuất ra JSON action item sạch, có cấu trúc, sẵn sàng đẩy vào công cụ giao việc.
Một action item tốt có 5 trường
{
"task": "Seed 100 câu hỏi cho tính năng quiz",
"assignee": "Minh",
"due_date": "2026-07-18",
"priority": "high",
"source_quote": "Để mình lo phần seed câu hỏi trước thứ Sáu"
}
Trường source_quote cực kỳ quan trọng: nó cho phép con người kiểm chứng agent trích đúng, và tạo lòng tin.
Structured output: đừng để LLM trả văn xuôi
Ép mô hình trả JSON đúng schema bằng cách khai báo rõ định dạng và (nếu API hỗ trợ) dùng JSON mode / function calling:
Trích tất cả action item từ transcript. Trả về MẢNG JSON, mỗi phần tử:
{
"task": string (động từ + đối tượng, ngắn gọn),
"assignee": string (tên người, hoặc "CHƯA_RÕ"),
"due_date": "YYYY-MM-DD" hoặc null,
"priority": "high" | "medium" | "low",
"source_quote": string (câu gốc trong transcript)
}
QUY TẮC:
- Chỉ trích việc CÓ người chịu trách nhiệm hoặc rõ ràng cần làm.
- Không gộp 2 việc vào 1. Không bịa hạn nếu không được nói.
- "thứ Sáu tuần này" → quy đổi sang ngày cụ thể dựa trên ngày họp {meeting_date}.
Xử lý ngày tương đối
Con người nói "cuối tuần", "đầu tháng sau". Agent phải quy đổi. Truyền meeting_date vào prompt và yêu cầu tính ngày tuyệt đối. Với trường hợp mơ hồ ("sớm nhất có thể"), để due_date: null và đánh dấu cần con người xác nhận.
Xử lý người phụ trách không rõ
Khi transcript ghi "ai đó lo phần này nhé" mà không rõ ai: đặt assignee: "CHƯA_RÕ". Đừng đoán bừa. Ở bước giao việc, các item CHƯA_RÕ sẽ được gom lại hỏi người chủ trì.
Ví dụ end-to-end
Transcript → JSON:
[
{"task": "Seed 100 câu hỏi quiz", "assignee": "Minh",
"due_date": "2026-07-18", "priority": "high",
"source_quote": "mình lo phần seed câu hỏi trước thứ Sáu"},
{"task": "Cập nhật timeline ra mắt sang 20/7", "assignee": "Khang",
"due_date": null, "priority": "medium",
"source_quote": "ta lùi ngày ra mắt sang 20/7"}
]
Các bước triển khai
- Lấy transcript (ưu tiên phần "bước tiếp theo" của bài 3, nhưng nên quét cả transcript để không sót).
- Gọi LLM với schema JSON + JSON mode.
- Validate output: đúng kiểu dữ liệu? ngày hợp lệ? assignee nằm trong danh sách người họp?
- Đánh dấu item cần con người xác nhận (CHƯA_RÕ, due null).
- Lưu vào bảng
action_itemsvớistatus = pending_review.
Khung ưu tiên nhanh (khi LLM lưỡng lự priority)
| Ảnh hưởng \ Khẩn | Gấp | Không gấp |
|---|---|---|
| Cao | high | medium |
| Thấp | medium | low |
Quét toàn transcript, đừng chỉ dựa mục 'bước tiếp theo'
Bản tóm tắt ở bài 3 đã liệt kê "bước tiếp theo", nhưng đừng chỉ trích từ đó. Nhiều cam kết nằm rải rác giữa buổi ("để mình gửi Lan file đó chiều nay") mà không lọt vào phần next steps. Hãy chạy bước trích trên toàn bộ transcript để bắt hết, rồi khử trùng lặp với các next step đã có. Bỏ sót một cam kết quan trọng còn tệ hơn trích dư một item nhỏ.
Khử trùng lặp action item
Một việc có thể được nhắc lại nhiều lần trong buổi ("nhớ seed câu hỏi nhé" ... "ok mình seed câu hỏi"). Nếu không khử trùng, bạn tạo hai card cho cùng một việc. Cách đơn giản: sau khi trích, gom các item có task gần giống nhau (cùng động từ + đối tượng + assignee) thành một, giữ hạn sớm nhất.
Checklist trước khi giao việc
- [ ] Mỗi task có động từ hành động rõ ràng?
- [ ] Assignee khớp người có thật trong buổi họp?
- [ ] Ngày tương đối đã quy đổi đúng?
- [ ] Có source_quote để kiểm chứng?
- [ ] Đã tách các việc gộp thành item riêng?
Sai lầm thường gặp
- Nhận văn xuôi thay vì JSON: không parse được, không tự động hóa được. Bắt buộc structured output + validate.
- Để LLM bịa deadline: "trước thứ Sáu" bị suy thành "cuối tháng". Ép quy đổi có căn cứ hoặc để null.
- Gán bừa người: đoán assignee sai làm mất lòng tin cả hệ thống. Dùng CHƯA_RÕ.
- Không validate: đẩy thẳng output LLM vào task board mà không kiểm kiểu dữ liệu, gây lỗi API ở bài 5.