Bảng dữ liệu ở bài 4 mới là "cái gì". Sếp cần "vậy thì sao" (so what). Bài này biến các hàng CompetitorRow thành bảng so sánh + insight có trích dẫn, đúng trọng tâm competitive intelligence.
Hai tầng của một báo cáo CI tốt
- Tầng dữ liệu — bảng so sánh khách quan, mỗi ô có nguồn.
- Tầng insight — nhận định rút ra: ai rẻ nhất, ai đang đầu tư vào đâu, đâu là khoảng trống (gap) cho ta.
Bước 1: Dựng bảng so sánh
Gom các CompetitorRow thành ma trận tiêu chí × đối thủ. Việc này làm bằng code, không cần LLM (rẻ và chính xác):
def build_matrix(rows, fields):
table = []
for f in fields:
line = {"tiêu chí": f}
for r in rows:
fact = getattr(r, f)
line[r.name] = fact.value if fact else "—"
table.append(line)
return table
Ô trống để "—" (chưa có dữ liệu), không để LLM đoán cho đầy.
Bước 2: Sinh insight có kỷ luật
Giờ mới dùng model mạnh (MODEL_SMART), nhưng chỉ cho nó nhìn bảng đã kiểm chứng, không cho tự thêm dữ kiện mới:
prompt = f"""Dưới đây là bảng so sánh đối thủ đã được kiểm chứng.
Hãy rút ra tối đa 5 insight. QUY TẮC:
- Chỉ dựa trên số trong bảng, không thêm dữ kiện ngoài.
- Mỗi insight nêu rõ số liệu và trích [nguồn].
- Nếu dữ liệu thiếu để kết luận, nói rõ 'chưa đủ dữ liệu'.
BẢNG:
{matrix_json}
"""
Insight tốt có công thức: Quan sát (số) → Ý nghĩa → Gợi ý hành động. Ví dụ: "MoMo miễn phí rút 3 lần/tháng còn ta thu phí ngay lần đầu [nguồn] → ta đang bất lợi ở nhóm rút thường xuyên → cân nhắc gói miễn phí 2 lần/tháng."
Bước 3: Phát hiện khoảng trống (gap analysis)
CI mạnh nhất khi tìm ra chỗ không ai làm hoặc mọi người làm dở. Quét bảng tìm:
- Tiêu chí mà tất cả đối thủ đều yếu → cơ hội cho ta.
- Tiêu chí mà chỉ 1 đối thủ mạnh vượt trội → mối đe dọa cần theo dõi.
- Ô trống ở nhiều đối thủ → có thể là thị trường chưa khai thác (hoặc dữ liệu thiếu — phải phân biệt).
Khung tư duy: Ma trận 2×2 Mối đe dọa/Cơ hội
Với mỗi phát hiện, xếp vào 1 trong 4 ô theo (mức tác động) × (độ chắc chắn dữ liệu). Chỉ báo cáo hành động cho ô "tác động cao + dữ liệu chắc". Ô "tác động cao + dữ liệu yếu" thì đưa vào mục "cần xác minh thêm", đừng biến thành khuyến nghị.
Sai lầm thường gặp
- Để LLM tự dựng bảng thay vì code — nó sắp xếp sai và có thể sửa số.
- Trộn insight với dữ liệu khiến người đọc không phân biệt được đâu là sự thật, đâu là diễn giải.
- Insight không kèm số và nguồn — thành cảm tính, sếp không tin.
- Coi ô trống là "đối thủ không có" — thực ra có thể chỉ là ta chưa tìm thấy nguồn.
- Kết luận mạnh từ dữ liệu yếu — 1 nguồn cũ mà dám khuyên đổi chiến lược.
- Nhồi 20 insight — sếp cần 3-5 cái quan trọng, không phải một danh sách.
Checklist khâu tổng hợp
- [ ] Bảng so sánh dựng bằng code, ô trống rõ ràng
- [ ] Insight chỉ dựa trên bảng đã kiểm chứng
- [ ] Mỗi insight có số + nguồn + gợi ý hành động
- [ ] Phân biệt "đối thủ không có" vs "ta chưa tìm thấy"
- [ ] Giới hạn 3-5 insight cốt lõi
Ví dụ: một insight đạt chuẩn vs một insight yếu
- Yếu: "MoMo có vẻ đang làm tốt hơn về phí." — cảm tính, không số, không nguồn, không hành động.
- Đạt chuẩn: "MoMo miễn phí 3 lần rút/tháng [1] trong khi ta thu 1.100đ ngay lần đầu [2]; nhóm khách rút ≥3 lần/tháng chiếm ~40% người dùng của ta → cân nhắc gói miễn phí 2 lần/tháng để chặn rời bỏ."
Bài 6: xuất tất cả thành báo cáo có trích dẫn nguồn chuẩn.