Đừng để AI bịa tỷ số: Dùng Claude Code xây trợ lý theo dõi World Cup 2026 bằng dữ liệu thật
Đừng để AI bịa tỷ số: Dùng Claude Code xây trợ lý theo dõi World Cup 2026 bằng dữ liệu thật
Khi World Cup diễn ra, một câu hỏi rất tự nhiên là: liệu có thể để AI theo dõi lịch thi đấu, tỷ số trực tiếp, bảng xếp hạng và tóm tắt diễn biến mỗi ngày không?
Câu trả lời là có, nhưng có một điều cực kỳ quan trọng:
Không nên để LLM tự nhớ hoặc tự đoán tỷ số.
Các mô hình ngôn ngữ có thể viết rất hay, giải thích rất mượt, nhưng chúng không phải nguồn dữ liệu thời gian thực. Nếu hỏi trực tiếp “trận hôm nay tỷ số bao nhiêu?”, AI có thể trả lời sai, trả lời theo dữ liệu cũ, hoặc thậm chí bịa ra một kết quả nghe có vẻ hợp lý.
Cách làm đúng hơn là tách vai trò:
- CLI / API / MCP chịu trách nhiệm lấy dữ liệu thật.
- Claude Code chịu trách nhiệm điều phối, đọc kết quả và tạo workflow.
- LLM chịu trách nhiệm tóm tắt, giải thích và viết báo cáo.
- Một API gateway như Crazyrouter có thể dùng để thử nhiều model khác nhau cho phần phân tích và tóm tắt.
Bài viết này trình bày một hướng xây dựng trợ lý theo dõi World Cup 2026 bằng Claude Code, theo cách có thể kiểm chứng dữ liệu thay vì để AI “nói theo trí nhớ”.
1. Vì sao theo dõi World Cup là một bài toán hay cho Claude Code?
World Cup là một ví dụ rất phù hợp để thử AI coding agent, vì dữ liệu của nó có nhiều lớp:
- lịch thi đấu;
- đội tuyển;
- bảng đấu;
- tỷ số trực tiếp;
- điểm số;
- hiệu số bàn thắng;
- khả năng đi tiếp;
- kết quả theo ngày;
- tóm tắt diễn biến sau trận.
Nếu chỉ dùng một chatbot thông thường, bạn sẽ dễ gặp vấn đề “AI trả lời nghe đúng nhưng không có nguồn”.
Nhưng nếu dùng Claude Code theo hướng kỹ thuật, ta có thể yêu cầu nó xây một workflow rõ ràng:
- gọi CLI hoặc API để lấy dữ liệu thật;
- lưu kết quả dạng JSON;
- kiểm tra nguồn dữ liệu;
- dùng LLM để tóm tắt dựa trên JSON đó;
- xuất báo cáo Markdown hoặc gửi thông báo hằng ngày.
Điểm quan trọng là: kết luận của AI phải được neo vào dữ liệu thật.
2. Kiến trúc tổng quát
Một kiến trúc đơn giản có thể như sau:
User
↓
Claude Code
↓
World Cup CLI / API / MCP
↓
Structured data: JSON
↓
LLM summary
↓
Daily report / terminal output / status line
Trong kiến trúc này, Claude Code không cần tự biết lịch thi đấu. Nó chỉ cần biết cách gọi công cụ đúng.
Ví dụ:
worldcup today --json
worldcup standings --group A --json
worldcup team Argentina --json
worldcup schedule --date 2026-06-11 --json
Sau đó Claude Code đưa JSON cho model để tóm tắt:
Dựa trên dữ liệu JSON bên dưới, hãy tóm tắt tình hình hôm nay bằng tiếng Việt.
Không được bịa thêm tỷ số, không được suy đoán kết quả ngoài dữ liệu.
Nếu dữ liệu thiếu, hãy nói rõ là dữ liệu chưa có.
Đây là cách biến LLM thành “người viết báo cáo”, không phải “nguồn sự thật”.
3. Nguồn dữ liệu: phần quan trọng nhất
Với một trợ lý World Cup, phần khó không phải là gọi LLM. Phần khó là dữ liệu.
Một số nguồn có thể dùng:
| Nguồn | Vai trò |
|---|---|
| openfootball | lịch thi đấu, bảng đấu, dữ liệu mở |
| ESPN public scoreboard | tỷ số trực tiếp, sự kiện trận đấu |
| TheSportsDB | nguồn dự phòng cho kết quả sau trận |
| dữ liệu offline đi kèm package | fallback khi không có mạng hoặc API lỗi |
Một workflow tốt nên luôn trả về thông tin nguồn, ví dụ:
{
"match": "Mexico vs South Africa",
"score": "1-1",
"minute": 67,
"source": "ESPN",
"is_live": true,
"fetched_at": "2026-06-11T18:42:00Z"
}
Khi có source và fetched_at, báo cáo do AI tạo ra sẽ đáng tin hơn rất nhiều.
4. Claude Code nên làm gì?
Claude Code không nên chỉ tạo một file script rồi dừng lại. Một project hữu ích nên có đủ các phần sau:
worldcup-assistant/
data/
fixtures.json
latest_scores.json
scripts/
fetch_today.py
fetch_standings.py
summarize_day.py
reports/
2026-06-11.md
README.md
Trong đó:
fetch_today.pylấy lịch thi đấu và tỷ số hôm nay;fetch_standings.pylấy bảng xếp hạng;summarize_day.pygọi LLM để tạo bản tin ngắn;reports/lưu báo cáo theo ngày;README.mdhướng dẫn cài đặt và chạy.
Claude Code rất mạnh ở điểm này: nó có thể tạo project structure, viết script, chạy thử, sửa lỗi, thêm README và tạo output mẫu.
5. Ví dụ prompt cho Claude Code
Một prompt thực tế có thể viết như sau:
Hãy xây một CLI nhỏ để theo dõi World Cup 2026.
Yêu cầu:
- Lấy lịch thi đấu hôm nay.
- Lấy tỷ số trực tiếp nếu có.
- Lấy bảng xếp hạng theo bảng.
- Output hỗ trợ JSON và Markdown.
- Mỗi kết quả phải ghi rõ nguồn dữ liệu.
- Nếu dữ liệu không có hoặc API lỗi, không được bịa.
- Tạo báo cáo tiếng Việt hằng ngày trong thư mục reports/.
- Viết README hướng dẫn chạy.
Nếu đã có một CLI World Cup riêng, prompt có thể đơn giản hơn:
Dùng lệnh `worldcup today --json` để lấy dữ liệu hôm nay.
Sau đó tạo báo cáo Markdown bằng tiếng Việt.
Chỉ tóm tắt dựa trên JSON trả về.
Không được tự thêm tỷ số hoặc nhận định không có trong dữ liệu.
6. Dùng MCP để Claude có thể truy cập dữ liệu theo cách chuẩn hơn
Nếu muốn làm bài bản hơn, có thể bọc dữ liệu World Cup thành một MCP server.
Ví dụ MCP server cung cấp các tool:
get_today_matches
get_live_matches
get_match_detail
get_group_standings
get_team_schedule
get_next_fixture
Khi đó Claude Code hoặc MCP-compatible client có thể gọi tool trực tiếp thay vì shell command.
Ưu điểm của MCP:
- tool interface rõ ràng;
- dễ kiểm soát input/output;
- dễ tích hợp với nhiều client;
- có thể giới hạn chỉ đọc;
- phù hợp với dữ liệu thời gian thực.
Một tool response nên trả về structured data thay vì text tự do:
{
"group": "A",
"standings": [
{
"team": "Mexico",
"played": 1,
"points": 3,
"goal_difference": 2
}
],
"source": "ESPN",
"updated_at": "2026-06-12T02:10:00Z"
}
Sau đó LLM mới dùng dữ liệu này để viết phần giải thích.
7. Dùng Crazyrouter để tạo bản tin bằng nhiều model
Sau khi có dữ liệu thật, phần tiếp theo là tóm tắt.
Ví dụ ta có thể gửi dữ liệu JSON cho một model thông qua OpenAI-compatible API:
curl https://crazyrouter.com/v1/chat/completions \
-H "Authorization: Bearer $CRAZYROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "system",
"content": "Bạn là trợ lý thể thao. Chỉ được tóm tắt dựa trên dữ liệu được cung cấp. Không bịa tỷ số."
},
{
"role": "user",
"content": "Hãy tóm tắt dữ liệu World Cup hôm nay bằng tiếng Việt: ..."
}
]
}'
Có thể thử nhiều model cho các mục đích khác nhau:
| Tác vụ | Model phù hợp |
|---|---|
| tóm tắt ngắn hằng ngày | model nhanh, chi phí thấp |
| phân tích bảng đấu phức tạp | model suy luận tốt hơn |
| tạo báo cáo dài | model có ngữ cảnh dài |
| xuất JSON nghiêm ngặt | model tuân thủ schema tốt |
Crazyrouter hữu ích ở chỗ ứng dụng chỉ cần giữ một kiểu gọi OpenAI-compatible, nhưng vẫn có thể đổi model để so sánh chất lượng, tốc độ và chi phí.
Trang chủ: https://crazyrouter.com
8. Cần đặt ranh giới rõ ràng cho AI
Với dữ liệu thể thao thời gian thực, prompt nên luôn có các ràng buộc:
Rules:
- Do not invent scores.
- Do not infer live results from memory.
- If data is missing, say it is missing.
- Always mention data source and update time.
- Separate facts from commentary.
Bản tiếng Việt:
Quy tắc:
- Không bịa tỷ số.
- Không dùng trí nhớ để đoán kết quả trực tiếp.
- Nếu thiếu dữ liệu, phải nói rõ là thiếu dữ liệu.
- Luôn ghi nguồn và thời điểm cập nhật.
- Tách dữ kiện khỏi nhận định.
Đây là phần rất quan trọng. Người dùng thường không cần một AI “nói hay”. Họ cần một hệ thống nói đúng, có nguồn và có thể kiểm chứng.
9. Một ví dụ output mong muốn
Một báo cáo hằng ngày có thể trông như sau:
# World Cup 2026 - Báo cáo ngày 2026-06-11
Nguồn dữ liệu: ESPN public scoreboard
Cập nhật lúc: 2026-06-11 22:30 UTC
## Trận đã diễn ra
- Mexico 2-0 South Africa
- Canada 1-1 Qatar
## Điểm đáng chú ý
- Mexico tạm dẫn đầu bảng A nhờ hiệu số tốt hơn.
- Canada có 1 điểm sau trận hòa đầu tiên.
- Chưa có dữ liệu chính thức về chấn thương hoặc thay đổi đội hình trong nguồn hiện tại.
## Lưu ý
Báo cáo này chỉ dựa trên dữ liệu trả về từ CLI tại thời điểm cập nhật. Nếu có thay đổi sau trận, cần chạy lại lệnh để lấy dữ liệu mới.
Điểm quan trọng là báo cáo nói rõ nguồn, thời điểm cập nhật và giới hạn dữ liệu.
10. Có thể mở rộng thành gì?
Từ một CLI đơn giản, project này có thể mở rộng thành nhiều hướng:
- status line trong Claude Code hiển thị tỷ số trực tiếp;
- bot Telegram gửi bản tin mỗi sáng;
- dashboard web cho lịch thi đấu và bảng xếp hạng;
- MCP server dùng chung cho Claude, Cursor, Codex;
- báo cáo Markdown tự động theo ngày;
- so sánh model nào tóm tắt chính xác hơn;
- lưu lịch sử tỷ số để phân tích sau giải.
Nhưng dù mở rộng theo hướng nào, nguyên tắc vẫn giống nhau:
Dữ liệu thật đi trước, AI tóm tắt đi sau.
Kết luận
Dùng Claude Code để theo dõi World Cup là một project rất thú vị, nhưng cách làm đúng không phải là hỏi AI “tỷ số hôm nay thế nào?”.
Cách làm tốt hơn là xây một pipeline:
real data source → CLI / MCP → structured JSON → LLM summary → report
Claude Code phù hợp để tạo project, viết script, chạy thử, sửa lỗi và tự động hóa báo cáo. Còn LLM phù hợp để biến dữ liệu có cấu trúc thành bản tin dễ đọc.
Nếu cần thử nhiều model cho phần tóm tắt, phân tích hoặc xuất JSON, có thể dùng Crazyrouter như một lớp OpenAI-compatible API gateway:
Điểm mấu chốt là đừng để AI bịa dữ liệu thời gian thực. Hãy để công cụ lấy dữ liệu thật, rồi để AI làm phần nó giỏi nhất: giải thích, tóm tắt và trình bày.
All Rights Reserved