Vấn Đề: AI Của Bạn Bị Mất Trí Nhớ
Hãy tưởng tượng bạn vừa tham gia một dự án mới. Bạn mở Cursor, hỏi tại sao một đoạn tính thuế lại hoạt động theo cách đó — và AI không biết. Nó thấy code, nhưng không biết câu chuyện phía sau.
Bây giờ hãy tưởng tượng một senior developer ngồi cạnh bạn. Họ sẽ nói: "À cái đó à? Quý trước mình có một bug khó chịu lắm — ticket #456 — luxury tax đang được áp dụng sau VAT thay vì trước. Mất hai ngày mới tìm ra. Đây commit này."
Đó chính là khoảng trống. AI coding assistant rất giỏi đọc code, nhưng chúng không có ký ức về tại sao mọi thứ được xây dựng theo cách đó.
Smart Context System là một ý tưởng hackathon lấp đầy khoảng trống này — bằng cách cho Cursor AI bộ nhớ dài hạn được nuôi bởi hai nguồn mà team bạn đã dùng hàng ngày: Git history và Azure Boards.
Nó Thực Sự Làm Gì?
Nói đơn giản:
- Mỗi khi developer commit code → hệ thống lặng lẽ lưu lại tóm tắt commit đó.
- Mỗi khi một ticket chuyển sang Done trong Azure Boards → hệ thống lưu tiêu đề, mô tả, và thread thảo luận của ticket.
- Khi sau này bạn hỏi Cursor về một bug hoặc tính năng → hệ thống tìm các commit và ticket liên quan nhất trong quá khứ, rồi tự động đưa vào prompt của bạn.
Kết quả: Cursor có thể nói "Trường hợp này trông giống ticket #456 — LuxuryTaxCalculator cần chạy trước VAT — đây commit liên quan."
Một Kịch Bản Thực Tế
Hãy xem qua cách hệ thống hoạt động trong thực tế.
Ngày 1 — Một bug được sửa
Một developer sửa xong bug tính thuế phức tạp. Họ đóng ticket WI-456 trong Azure Boards (chuyển sang Done) và push commit a3f9c1 với bản fix.
Phía sau, Smart Context System:
- Nhận webhook từ Azure Boards: "WI-456 đã Done."
- Lấy thông tin ticket và thread comment từ Azure DevOps API.
- Lấy code diff của commit
a3f9c1từ Git. - Tùy chọn: tóm tắt cả hai bằng một LLM call nhỏ.
- Chuyển thành vector và lưu vào Vector Database.
Không cần làm thủ công. Tất cả diễn ra trong nền.
Ngày 30 — Một developer mới gặp vùng code đó
Một thành viên mới mở Cursor và gõ: "Tôi thấy kết quả lạ trong phần tính thuế cho hàng xa xỉ nhập khẩu."
Cursor (qua Retrieval API) tìm kiếm trong vector database, tìm thấy WI-456 và commit a3f9c1, rồi tự động đưa context này lên:
📎 Fix liên quan trong quá khứ: WI-456 — "LuxuryTaxCalculator phải chạy trước VAT để tránh double-compounding trên hàng nhập khẩu." Commit:
a3f9c1· dev@company.com · 15/01/2025
Developer mới không cần tìm trong Jira, đào git log, hay ping senior trên Slack. Câu trả lời tự tìm đến họ.
Hệ Thống Được Xây Dựng Như Thế Nào?
Đây là kiến trúc, đơn giản hóa cho người mới:
Git Repository Azure Boards
(commit mới) (ticket → Done)
│ │
Scheduler Webhook listener
(kiểm tra mỗi N phút) (kích hoạt ngay lập tức)
│ │
└──────────┬────────────┘
▼
Queue
(jobs xếp hàng chờ)
│
Worker
┌────────────────┐
│ 1. Lấy dữ liệu │ ← diff từ Git / fields+comments từ Azure
│ 2. Normalize │ ← chuẩn hóa metadata
│ 3. Tóm tắt? │ ← tùy chọn, LLM call cho text dài
│ 4. Chunk │ ← chia thành đoạn có thể tìm kiếm
│ 5. Embed │ ← chuyển thành vector
└────────────────┘
│
Vector Database
│
Retrieval API / MCP
│
Cursor IDE Context
Mỗi thành phần có một nhiệm vụ đơn giản. Không có gì là phép màu — chỉ là một pipeline được kết nối tốt.
Hai Loại Job
Worker xử lý hai loại job khác nhau:
Commit Job
| Bước | Điều gì xảy ra |
|---|---|
| Trigger | Scheduler poll Git để tìm commit mới kể từ lần chạy trước |
| Fetch | Worker gọi Git API để lấy diff cho từng SHA |
| Lưu trữ | Commit message + file thay đổi + diff → chunk → embed → upsert |
Work Item Job
| Bước | Điều gì xảy ra |
|---|---|
| Trigger | Azure Boards webhook bắn khi state = Done |
| Fetch | Worker gọi Azure DevOps REST API lấy title, description, comments |
| Lưu trữ | Nội dung ticket → chunk → embed → upsert (idempotent theo WI ID + revision) |
"Retrieval" Trông Như Thế Nào Trong Thực Tế?
Khi bạn prompt Cursor, luồng retrieval là:
- Query của bạn được chuyển thành vector.
- Vector DB tìm Top-K chunk tương tự nhất đã lưu.
- Những chunk đó — kèm link nguồn (SHA, Azure URL) — được inject vào context Cursor.
- Bạn nhận được câu trả lời dựa trên lịch sử thực tế của dự án.
Có hai lựa chọn tích hợp:
- MCP Server — Cursor hỗ trợ native, tích hợp sâu, ít config sau khi setup xong.
- HTTP Retrieval API — Linh hoạt hơn, gọi được từ
.cursorruleshoặc custom tool.
Tại Sao Chỉ Git + Azure Boards?
Câu hỏi thường gặp: tại sao không index thêm PR, deploy log, Slack messages?
Câu trả lời ngắn: hai nguồn đó đã cover 80% giá trị.
- Git diff trả lời "thay đổi cái gì và như thế nào."
- Done ticket trả lời "tại sao thay đổi và team đã quyết định gì."
Thêm nguồn khác tăng độ phức tạp mà không tương xứng với lợi ích — đặc biệt với hackathon prototype. Giữ đơn giản, chứng minh nó hoạt động, mở rộng sau.
Bạn Cần Gì Để Xây Dựng
| Thành phần | Lựa chọn đơn giản | Lựa chọn enterprise |
|---|---|---|
| Backend | FastAPI (Python) | Node.js / Azure Functions |
| Queue | Redis + Celery | Azure Service Bus |
| Vector DB | ChromaDB (local) | Azure AI Search / pgvector |
| Embeddings | OpenAI text-embedding-3-small | Azure OpenAI (enterprise) |
| Summarizer | GPT-4o-mini | Azure OpenAI |
| Tích hợp Cursor | HTTP tool + paste | MCP Server với citations |
Cho hackathon: bắt đầu với ChromaDB + FastAPI + GPT-4o-mini. Bạn có thể có prototype chạy được trong một cuối tuần.
Tác Động — Trước và Sau
| Tình huống | Không có Smart Context | Có Smart Context |
|---|---|---|
| Dev mới gặp bug cũ | Tìm Jira + git log 20+ phút | Cursor surface ticket liên quan trong vài giây |
| Senior dev rời team | Kiến thức theo người mà đi | Quyết định của họ sống mãi trong vector DB |
| AI đưa ra gợi ý sai | Không có lịch sử để đính chính | Retrieval neo câu trả lời vào các fix trong quá khứ |
| Onboarding thành viên mới | Vài tuần theo dõi và đọc tài liệu | Hệ thống giải thích "tại sao" theo yêu cầu |
Lời Kết
AI assistant tốt nhất không phải là cái có model lớn nhất. Mà là cái biết về dự án của bạn — những bug đã sửa, những quyết định đã đưa ra, những ticket khiến cả team thức khuya.
Smart Context System là một ý tưởng thực tế, có thể xây dựng được mà bất kỳ team nào cũng có thể prototype trong hackathon và phát triển thành một công cụ tăng năng suất thực sự. Hạ tầng thì standard. Dữ liệu đã có sẵn. Bạn chỉ cần kết nối các điểm lại với nhau.
Git + Done tickets → vector memory → Cursor context. Đó là toàn bộ ý tưởng.