AI & Automation

Xây dựng "Bộ nhớ AI" vĩnh viễn cho mọi dự án phần mềm

By Ginbok7 min read

Trong kỷ nguyên AI tạo sinh, các công cụ như Cursor và Claude Code đã trở thành trợ thủ đắc lực không thể thiếu của các kỹ sư phần mềm. Tuy nhiên, một vấn đề nhức nhối vẫn tồn tại: "Hiệu ứng mất trí nhớ" của AI. Mỗi khi bạn bắt đầu một phiên làm việc mới hoặc chuyển đổi giữa các dự án, AI sẽ mất đi các ngữ cảnh tinh tế về kiến trúc, coding convention và logic nghiệp vụ đặc thù. Bạn thường mất 10 phút đầu tiên để "warm up" (khởi động) AI, giải thích đi giải thích lại cùng một cấu trúc tech stack. Hơn nữa, khi làm việc trong môi trường doanh nghiệp, làm thế nào để sử dụng các cấu hình AI mạnh mẽ mà không làm "ô nhiễm" repo chung của công ty bằng các công cụ cá nhân?

Bài viết này hướng dẫn chi tiết cách tôi xây dựng hệ thống "Bộ nhớ AI dài hạn". Bằng cách kết hợp hai toolkit mã nguồn mở mạnh mẽ—ai-devkitantigravity-kit—cùng với các kỹ thuật quản lý file hệ thống nâng cao như Git SubtreesWindows Junctions, tôi đã tạo ra một quy trình làm việc cung cấp ngữ cảnh tức thì cho AI mà vẫn giữ cho repository sạch sẽ.

Vấn đề: Khoảng cách ngữ cảnh và Ô nhiễm Repository

Khi làm việc đồng thời trên nhiều dự án—từ hệ thống doanh nghiệp .NET phức tạp đến các side project cá nhân dùng Vite/React—tôi nhận thấy hai rào cản lớn:

1. Vấn đề "Khởi động lạnh" (Cold Start)

Các trình soạn thảo AI dựa trên LLM phụ thuộc vào các file mà chúng có thể "nhìn thấy" trong workspace hiện tại. Nếu dự án không có tài liệu được tối ưu cho AI, AI sẽ tự đưa ra các phỏng đoán. Nó có thể gợi ý Functional Component trong khi dự án dùng Class Component, hoặc gợi ý thư viện xung đột với hệ thống hiện tại. Kết quả là bạn phải tốn thời gian briefing thủ công cho mỗi task mới.

2. Ô nhiễm cấu hình

Để AI hoạt động hiệu quả, bạn cần thêm các file cấu hình (như .cursorrules, .claudeprompt). Trong môi trường team, việc commit các file cấu hình cá nhân này vào repo chung thường không được phép. Bạn cần một cách để "gắn" bộ não AI vào dự án tại máy cục bộ mà không để chúng xuất hiện trong git status.

Nền tảng: Hai bộ công cụ từ cộng đồng Việt

Giải pháp của tôi dựa trên hai repo cực kỳ chất lượng từ các developer Việt Nam, giải quyết hai khía cạnh bổ trợ nhau của quy trình làm việc với AI.

ai-devkit: Bộ nhớ dài hạn

Được phát triển bởi codeaholicguy, ai-devkit đóng vai trò là một khung tài liệu cấu trúc. Khi chạy npx ai-devkit init, nó tạo thư mục docs/ai/ với các template cho 7 giai đoạn phát triển:

Điều này đảm bảo khi bạn yêu cầu AI "viết tính năng mới", nó sẽ đọc các file này để hiểu cách bạn viết code trước khi tạo ra bất kỳ dòng lệnh nào.

antigravity-kit: Đội ngũ chuyên gia

Được phát triển bởi vudovn, antigravity-kit cung cấp hệ thống module gồm hơn 20 agent chuyên biệt (ví dụ: @security-auditor, @performance-specialist). Hệ thống sẽ phân tích yêu cầu của bạn và tự động "điều động" đúng chuyên gia để xử lý.

Kết hợp cả hai: ai-devkit cung cấp Ngữ cảnh (Cái gì và Ở đâu), còn antigravity-kit cung cấp Năng lực (Làm như thế nào).

Kiến trúc: Tập trung hóa Toolkit

Thay vì cài đặt thủ công vào từng dự án, tôi tạo một repo quản lý trung tâm mang tên my-ai-toolkit để dễ dàng cập nhật và đồng bộ.

Sử dụng Git Subtree

Tôi chọn Git Subtree thay vì Submodules vì nó gộp mã nguồn vào repo chính nhưng vẫn giữ lịch sử tách biệt, tránh được các lỗi "detached HEAD" phiền phức.

# Khởi tạo repo toolkit trung tâm
mkdir my-ai-toolkit && cd my-ai-toolkit
git init

# Thêm ai-devkit dưới dạng subtree
git remote add ai-devkit-src https://github.com/codeaholicguy/ai-devkit
git subtree add --prefix=ai-devkit ai-devkit-src main --squash

# Thêm antigravity-kit dưới dạng subtree
git remote add antigravity-src https://github.com/vudovn/antigravity-kit
git subtree add --prefix=antigravity-kit antigravity-src main --squash

Triển khai: Liên kết không để lại dấu vết

Bí quyết nằm ở việc sử dụng Windows Junctions. Junction là một liên kết biểu tượng cho thư mục, hoạt động giống như folder cục bộ nhưng thực tế trỏ đến một vị trí khác trên ổ đĩa.

Cấu trúc thư mục

Tôi tổ chức toolkit để tách biệt logic dùng chung và bộ nhớ riêng của từng dự án:

my-ai-toolkit/
├── configs/
│   ├── .agent/              # Logic agent dùng chung
│   ├── .cursor/             # Rule của Cursor dùng chung
│   └── projects/
│       ├── enterprise-app/
│       │   └── docs/ai/     # Ngữ cảnh riêng cho dự án công ty
│       └── side-hustle/
│           └── docs/ai/     # Ngữ cảnh riêng cho dự án cá nhân

Liên kết không commit

Để gắn bộ nhớ AI vào dự án công ty, tôi dùng PowerShell:

$PROJECT = "C:\workspace\company-project"
$SOURCE  = "C:\ai-workspace\my-ai-toolkit\configs"

# Tạo Junctions
New-Item -ItemType Junction -Path "$PROJECT\.agent"  -Target "$SOURCE\.agent"
New-Item -ItemType Junction -Path "$PROJECT\.cursor" -Target "$SOURCE\.cursor"
New-Item -ItemType Junction -Path "$PROJECT\docs\ai" -Target "$SOURCE\projects\company-project\docs\ai"

Sau đó, sử dụng file .git/info/exclude trong dự án công ty để Git bỏ qua các thư mục này. File này chỉ nằm ở máy bạn, không bao giờ được commit lên server.

Add-Content "$PROJECT\.git\info\exclude" "`n.agent/"
Add-Content "$PROJECT\.git\info\exclude" "docs/ai/"
Add-Content "$PROJECT\.git\info\exclude" ".cursor/"

Tự động hóa với PowerShell Script

Để quy trình này nhanh chóng hơn, tôi viết script setup-new-project.ps1 để tự động hóa toàn bộ việc tạo folder, ánh xạ Junction và cấu hình Git exclusion.

param (
    [Parameter(Mandatory=$true)] [string]$ProjectPath,
    [Parameter(Mandatory=$true)] [string]$ProjectName
)

$ToolkitRoot = "C:\ai-workspace\my-ai-toolkit"
$ProjectContextDir = "$ToolkitRoot\configs\projects\$ProjectName\docs\ai"

# 1. Đảm bảo thư mục context tồn tại trong toolkit
if (!(Test-Path $ProjectContextDir)) {
    New-Item -ItemType Directory -Path $ProjectContextDir -Force
}

# 2. Tạo Junctions
$Mappings = @{
    ".agent"  = "$ToolkitRoot\configs\.agent"
    ".cursor" = "$ToolkitRoot\configs\.cursor"
    "docs\ai" = $ProjectContextDir
}

foreach ($Key in $Mappings.Keys) {
    $Dest = Join-Path $ProjectPath $Key
    if (!(Test-Path $Dest)) {
        New-Item -ItemType Junction -Path $Dest -Target $Mappings[$Key]
    }
}

# 3. Cấu hình Git Exclusion
$ExcludePath = Join-Path $ProjectPath ".git\info\exclude"
if (Test-Path $ExcludePath) {
    $Entries = @(".agent/", ".cursor/", "docs/ai/")
    foreach ($Entry in $Entries) {
        if (!(Select-String -Path $ExcludePath -Pattern [regex]::Escape($Entry))) {
            Add-Content $ExcludePath "`n$Entry"
        }
    }
}

Tầm nhìn chiến lược: Tối ưu quy trình làm việc

Việc cài đặt kỹ thuật chỉ là một nửa chặng đường. Để thực sự tận dụng "Bộ nhớ AI", bạn cần thay đổi cách tương tác với IDE.

Quản lý Ngữ cảnh (Context Management)

Các model AI có "cửa sổ ngữ cảnh" giới hạn. Bằng cách chia nhỏ docs/ai/ thành các file riêng biệt (Yêu cầu vs Thực thi), các công cụ như Cursor có thể sử dụng RAG để chỉ lấy đúng phần tài liệu cần thiết cho task hiện tại, giúp câu trả lời chính xác hơn.

Sử dụng Slash Command

Với setup này, workflow hàng ngày của tôi trở nên chuyên nghiệp hơn:

Kết luận

Bằng cách coi "Ngữ cảnh AI" như một sản phẩm kỹ thuật thực thụ—giống như source code hay hạ tầng—chúng ta không còn dùng AI như một công cụ autocomplete đơn thuần. Chúng ta đang tiến tới việc có một Kỹ sư Resident kỹ thuật số hiểu rõ codebase của mình.

Sự kết hợp giữa ai-devkitantigravity-kit, được quản lý qua một hệ thống tập trung và cô lập, mang lại sự cân bằng hoàn hảo: AI thông minh vượt trội nhờ hiểu ngữ cảnh, trong khi repo của team vẫn luôn sạch đẹp và chuyên nghiệp.

 

#ai#workflow#llm#cursor#automation
← Back to Articles
Xây dựng "Bộ nhớ AI" vĩnh viễn cho mọi dự án phần mềm - Ginbok