TÓM TẮT
Thêm bộ nhớ bền vững cho các tác nhân AI qua 4 bước: (1) Thiết lập máy chủ bộ nhớ MCP với các công cụ remember, recall, search và rollback, (2) Thêm hướng dẫn bộ nhớ vào lời nhắc của tác nhân, (3) Cấu hình ~/.claude/settings.json cho Claude Code hoặc .cursor/mcp.json cho Cursor, (4) Sử dụng các mẫu bộ nhớ để ghi nhật ký quyết định, chuyển giao tác nhân và điểm kiểm tra phiên. Các tác nhân giữ ngữ cảnh qua các phiên — không còn sao chép-dán các cuộc trò chuyện trước đó nữa.
Giải quyết vấn đề “Tôi không nhớ ngày hôm qua”. Thêm bộ nhớ bền vững cho các tác nhân AI bằng giao thức MCP, và chúng sẽ nhớ các quyết định, sản phẩm bàn giao và ngữ cảnh từ các phiên trước đó.
Bạn biết quy trình rồi đấy:
Ngày 1: "Xây dựng hệ thống xác thực người dùng"
Tác nhân: [Xây dựng xác thực JWT, tạo bảng người dùng, triển khai mã thông báo làm mới]
Ngày 2: "Tiếp tục từ ngày hôm qua"
Tác nhân: "Tôi không có ngữ cảnh từ các phiên trước đó. Bạn có thể dán những gì chúng ta đã làm không?"
Bạn sao chép-dán cuộc trò chuyện trước đó. Tác nhân đọc 2000 dòng ngữ cảnh. Cả hai bạn lãng phí 15 phút để lấy lại tốc độ.
Bộ nhớ bền vững khắc phục điều này. Với bộ nhớ MCP (Model Context Protocol), các tác nhân tự động lưu trữ các quyết định và thu hồi chúng khi cần. Không sao chép-dán. Không giải thích lại.
Trong hướng dẫn này, bạn sẽ thiết lập bộ nhớ MCP cho các tác nhân AI. Bạn sẽ học cách lưu trữ các quyết định từ các phiên Kiến trúc sư Backend, thu hồi ngữ cảnh khi chuyển sang Tối ưu hóa Cơ sở dữ liệu và chuyển giao sản phẩm bàn giao cho Nhà phát triển Frontend — tất cả mà không mất ngữ cảnh. Các mẫu bộ nhớ tương tự hoạt động cho dù bạn đang xây dựng API với tích hợp Apidog hay quản lý các đợt phát triển nhiều ngày.
Bộ nhớ MCP là gì?
Bộ nhớ MCP cho phép các tác nhân AI lưu trữ và truy xuất thông tin qua các phiên. Hãy coi nó như một cuốn sổ ghi chú dùng chung mà các tác nhân có thể viết vào và đọc từ đó.
Bốn công cụ hỗ trợ bộ nhớ MCP:
| Công cụ | Mục đích | Ví dụ |
|---|---|---|
remember |
Lưu trữ thông tin với các thẻ | Lưu "bảng người dùng với UUID, bcrypt" |
recall |
Tìm kiếm theo từ khóa hoặc thẻ | Tìm "quyết định xác thực" |
rollback |
Khôi phục về trạng thái trước đó | Hoàn tác các thay đổi lược đồ tồi |
search |
Tìm kiếm trên các phiên | "Kiến trúc sư Backend đã quyết định gì?" |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ Tác nhân AI │ │ Máy chủ bộ nhớ │ │ Lưu trữ │
│ (Claude Code) │◄───────►│ MCP │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
Bước 1: Thiết lập Máy chủ Bộ nhớ MCP
Bạn cần một máy chủ MCP cung cấp các công cụ bộ nhớ. Có một số triển khai mã nguồn mở hiện có.
Tùy chọn A: Sử dụng máy chủ bộ nhớ được lưu trữ
npm install -g @example/mcp-memory-server
Tùy chọn B: Chạy một máy chủ cục bộ đơn giản
Tạo memory-server.js:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs/promises";
import path from "path";
const MEMORY_FILE = path.join(process.env.HOME, ".mcp-memory", "memories.json");
const server = new McpServer({
name: "memory",
version: "1.0.0"
});
// Ensure memory file exists
async function initMemory() {
await fs.mkdir(path.dirname(MEMORY_FILE), { recursive: true });
try {
await fs.access(MEMORY_FILE);
} catch {
await fs.writeFile(MEMORY_FILE, JSON.stringify([]));
}
}
// Tool: remember (Công cụ: remember)
server.tool(
"remember",
{
content: z.string().describe("Thông tin cần lưu trữ"),
tags: z.array(z.string()).describe("Thẻ để truy xuất (ví dụ: ['backend', 'auth'])"),
agent: z.string().optional().describe("Tên tác nhân để gắn thẻ")
},
async ({ content, tags, agent }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const memory = {
id: Date.now().toString(),
content,
tags,
agent,
timestamp: new Date().toISOString()
};
memories.push(memory);
await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2));
return { content: [{ type: "text", text: `Đã lưu bộ nhớ với các thẻ: ${tags.join(", ")}` }] };
}
);
// Tool: recall (Công cụ: recall)
server.tool(
"recall",
{
query: z.string().describe("Truy vấn tìm kiếm hoặc thẻ để tìm"),
agent: z.string().optional().describe("Lọc theo tên tác nhân")
},
async ({ query, agent }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const results = memories.filter(m => {
const matchesQuery = m.content.toLowerCase().includes(query.toLowerCase()) ||
m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()));
const matchesAgent = !agent || m.agent === agent;
return matchesQuery && matchesAgent;
});
return {
content: [{
type: "text",
text: results.length === 0
? "Không tìm thấy bộ nhớ nào"
: results.map(m => `[${m.timestamp}] ${m.content}`).join("\n\n")
}]
};
}
);
// Tool: search (Công cụ: search)
server.tool(
"search",
{
tags: z.array(z.string()).describe("Các thẻ cần tìm kiếm"),
limit: z.number().optional().default(10)
},
async ({ tags, limit }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const results = memories
.filter(m => tags.some(t => m.tags.includes(t)))
.slice(0, limit);
return {
content: [{
type: "text",
text: results.map(m => `[${m.agent || "unknown"}] ${m.content}`).join("\n\n")
}]
};
}
);
// Tool: rollback (Công cụ: rollback)
server.tool(
"rollback",
{
agent: z.string().describe("Tên tác nhân để khôi phục"),
timestamp: z.string().describe("Khôi phục về thời điểm này")
},
async ({ agent, timestamp }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const rolledBack = memories.filter(m =>
m.agent !== agent || new Date(m.timestamp) <= new Date(timestamp)
);
await fs.writeFile(MEMORY_FILE, JSON.stringify(rolledBack, null, 2));
return {
content: [{
type: "text",
text: `Đã khôi phục ${agent} về ${timestamp}`
}]
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
Chạy máy chủ:
node memory-server.js
Bước 2: Thêm Hướng dẫn Bộ nhớ vào Bất kỳ Tác nhân nào
Bạn không cần sửa đổi tệp tác nhân. Thêm hướng dẫn bộ nhớ vào lời nhắc của bạn:
Bạn có quyền truy cập vào các công cụ bộ nhớ MCP: remember, recall, search, rollback.
Tuân thủ các giao thức bộ nhớ sau:
**Khi bạn bắt đầu một phiên:**
1. Thu hồi ngữ cảnh: recall(query="ecommerce-api", agent="Backend Architect")
2. Xem lại các mục đang chờ xử lý từ phiên trước
**Khi bạn hoàn thành công việc:**
1. Ghi nhớ các sản phẩm bàn giao với các thẻ:
- remember(content="Đã tạo bảng người dùng với khóa chính UUID, băm mật khẩu bcrypt, xác thực JWT với mã thông báo làm mới", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Bao gồm các quyết định đã đưa ra và các mục đang chờ xử lý
**Khi chuyển giao cho một tác nhân khác:**
1. Để lại ngữ cảnh cho tác nhân nhận:
- remember(content="Điểm cuối API: /auth/login, /auth/register, /products, /orders. Luồng xác thực: mã thông báo truy cập JWT (15 phút) + mã thông báo làm mới (7 ngày). Vấn đề đã biết: giới hạn tốc độ chưa được triển khai", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer")
**Khi có lỗi:**
1. Tìm kiếm trạng thái tốt đã biết gần nhất
2. Sử dụng rollback để khôi phục
Ví dụ thực tế:
Bạn: "Kích hoạt chế độ Kiến trúc sư Backend. Thiết kế hệ thống người dùng cho API thương mại điện tử của chúng ta."
[Tác nhân thiết kế hệ thống, tạo lược đồ, triển khai xác thực]
Tác nhân: "Hệ thống người dùng hoàn tất. Đang lưu bộ nhớ..."
→ Gọi: remember("bảng người dùng với UUID, bcrypt, JWT + mã thông báo làm mới", tags: ["ecommerce-api", "auth", "database"])
[Kết thúc phiên]
[Ngày hôm sau]
Bạn: "Tiếp tục từ ngày hôm qua"
Tác nhân: "Đang thu hồi ngữ cảnh..."
→ Gọi: recall(query="ecommerce-api")
→ Trả về: "bảng người dùng với UUID, bcrypt, JWT + mã thông báo làm mới"
Tác nhân: "Hôm qua tôi đã thiết kế bảng người dùng với khóa chính UUID, triển khai băm mật khẩu bcrypt và thiết lập xác thực JWT với mã thông báo làm mới. Bước tiếp theo: lược đồ danh mục sản phẩm. Sẵn sàng tiếp tục."
Bước 3: Cấu hình cho Claude Code
Thêm máy chủ bộ nhớ vào cấu hình MCP của bạn:
Chỉnh sửa ~/.claude/settings.json:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"],
"env": {
"HOME": "/Users/your-username"
}
}
}
}
Khởi động lại Claude Code. Các công cụ bộ nhớ giờ đây sẽ có sẵn.
Kiểm tra:
Sử dụng công cụ remember để lưu trữ: "Bộ nhớ thử nghiệm cho dự án thương mại điện tử"
Thẻ: ["test", "ecommerce-api"]
Sử dụng công cụ recall để tìm bộ nhớ về "test"
Bước 4: Cấu hình cho Cursor
Tạo .cursor/mcp.json trong dự án của bạn:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"]
}
}
}
Kiểm tra:
@memory remember "Bắt đầu dự án API thương mại điện tử với PostgreSQL"
Thẻ: ["ecommerce-api", "setup"]
@memory recall query="ecommerce"
Các Mẫu Bộ nhớ cho Luồng Công việc Thực tế
Mẫu 1: Ghi nhật ký Quyết định
Mỗi khi bạn đưa ra một quyết định kỹ thuật, hãy ghi lại:
remember({
content: "Chọn PostgreSQL thay vì MySQL vì: (1) hỗ trợ JSONB cho các thuộc tính sản phẩm linh hoạt, (2) tìm kiếm toàn văn tốt hơn, (3) hỗ trợ UUID gốc",
tags: ["ecommerce-api", "database", "decision"],
agent: "Backend Architect"
})
Sau này, khi ai đó hỏi “Tại sao lại là PostgreSQL?”:
recall(query="quyết định PostgreSQL MySQL")
Mẫu 2: Chuyển giao Tác nhân
Khi chuyển đổi tác nhân, hãy để lại ghi chú chuyển giao:
remember({
content: "Backend hoàn tất. Điểm cuối: POST /auth/login, POST /auth/register, GET /products, POST /orders. Xác thực: truy cập JWT 15 phút + làm mới 7 ngày. Đang chờ xử lý: giới hạn tốc độ, xác minh email. Frontend cần: biểu mẫu đăng nhập, danh sách sản phẩm, giỏ hàng, thanh toán.",
tags: ["ecommerce-api", "handoff", "backend-complete"],
agent: "Backend Architect",
for: "Frontend Developer"
})
Nhà phát triển Frontend bắt đầu với:
recall(query="handoff", agent="Backend Architect")
Mẫu 3: Điểm kiểm soát Phiên
Khi kết thúc mỗi phiên làm việc:
remember({
content: "Phiên hoàn tất. Đã xong: bảng người dùng, điểm cuối xác thực, lược đồ sản phẩm. Phiên tiếp theo: hệ thống đặt hàng, webhook thanh toán. Chặn: đang chờ khóa API Stripe.",
tags: ["ecommerce-api", "checkpoint", "session-1"],
agent: "Backend Architect"
})
Tiếp tục phiên tiếp theo:
recall(query="checkpoint session-1")
Mẫu 4: Theo dõi Lỗi
Khi bạn tìm thấy một lỗi:
remember({
content: "LỖI: Mã thông báo làm mới không hết hạn sau khi đăng xuất. Mã thông báo được lưu trong bộ nhớ, không bền vững. Khắc phục: chuyển sang Redis với TTL.",
tags: ["ecommerce-api", "bug", "auth"],
agent: "Code Reviewer",
severity: "high"
})
Tìm kiếm lỗi sau này:
search(tags=["bug", "ecommerce-api"])
Khắc phục sự cố
Bộ nhớ không bền vững:
- Kiểm tra đường dẫn tệp bộ nhớ (
~/.mcp-memory/memories.json) - Đảm bảo máy chủ MCP đang chạy
- Xác minh Claude Code/Cursor có cấu hình MCP
Quá nhiều kết quả khi thu hồi:
- Thêm các thẻ cụ thể hơn
- Lọc theo tên tác nhân
- Sử dụng các cụm từ chính xác trong dấu ngoặc kép
Tệp bộ nhớ ngày càng lớn:
- Định kỳ lưu trữ các bộ nhớ cũ
- Sử dụng
rollbackđể dọn dẹp các dự án đã hoàn thành - Thêm ngày hết hạn vào lược đồ bộ nhớ của bạn
Những Gì Bạn Đã Xây Dựng
| Thành phần | Mục đích |
|---|---|
| Máy chủ Bộ nhớ MCP | Lưu trữ/truy xuất thông tin qua các phiên |
Công cụ remember |
Ghi nhật ký quyết định, sản phẩm bàn giao, chuyển giao |
Công cụ recall |
Tìm ngữ cảnh từ các phiên trước đó |
Công cụ search |
Truy vấn theo thẻ trên tất cả các bộ nhớ |
Công cụ rollback |
Khôi phục về trạng thái trước đó khi cần |
| Các mẫu bộ nhớ | Ghi nhật ký quyết định, chuyển giao, điểm kiểm tra, theo dõi lỗi |
Các Bước Tiếp theo
Mở rộng máy chủ bộ nhớ:
- Thêm tìm kiếm ngữ nghĩa với các nhúng (embeddings)
- Triển khai hết hạn bộ nhớ (tự động lưu trữ sau 30 ngày)
- Thêm tóm tắt bộ nhớ (tóm gọn các phiên dài)
Xây dựng bộ nhớ nhóm:
- Chia sẻ một máy chủ bộ nhớ trung tâm trong nhóm của bạn
- Gắn thẻ bộ nhớ theo dự án và nhà phát triển
- Tạo quy trình giới thiệu cho các thành viên nhóm mới
Tích hợp với các công cụ:
- Tự động ghi nhật ký các commit git như bộ nhớ
- Đồng bộ hóa với quản lý dự án (Jira, Linear)
- Xuất bộ nhớ sang tài liệu
Khắc phục các Sự cố Thường gặp
Bộ nhớ không bền vững giữa các phiên:
- Kiểm tra xem máy chủ MCP có đang chạy trước khi khởi động Claude Code không
- Xác minh đường dẫn tệp bộ nhớ tồn tại:
ls -la ~/.mcp-memory/memories.json - Đảm bảo quyền tệp cho phép đọc/ghi:
chmod 644 ~/.mcp-memory/memories.json - Xác nhận cấu hình máy chủ trong
~/.claude/settings.jsontrỏ đến đúng đường dẫn
Thu hồi trả về kết quả trống:
- Xác minh truy vấn khớp với các thẻ đã lưu (phân biệt chữ hoa/thường)
- Thử các thuật ngữ tìm kiếm rộng hơn hoặc sử dụng
searchvới các thẻ cụ thể - Kiểm tra xem bộ nhớ có thực sự được lưu trữ không:
cat ~/.mcp-memory/memories.json - Đảm bảo bộ lọc tên tác nhân khớp (nếu sử dụng tham số
agent)
Tệp bộ nhớ ngày càng lớn:
- Triển khai lưu trữ tự động cho các bộ nhớ cũ hơn 30 ngày
- Thêm công cụ
pruneđể xóa bộ nhớ theo phạm vi ngày - Tách bộ nhớ thành các tệp riêng biệt theo dự án hoặc ngày
- Sử dụng cơ sở dữ liệu backend (SQLite) thay vì JSON cho việc sử dụng quy mô lớn
Máy chủ không khởi động được:
- Kiểm tra phiên bản Node.js:
node --version(nên là 18+) - Cài đặt các phụ thuộc bị thiếu:
npm install @modelcontextprotocol/sdk zod - Tìm kiếm lỗi cú pháp trong mã máy chủ
- Chạy trực tiếp để xem lỗi:
node memory-server.js
Nhiều tác nhân ghi đè bộ nhớ của nhau:
- Luôn bao gồm trường
agentkhi gọiremember - Sử dụng các thẻ duy nhất cho mỗi dự án:
["project-x", "backend", "auth"] - Lọc thu hồi theo tên tác nhân khi truy xuất ngữ cảnh
- Cân nhắc các tệp bộ nhớ riêng biệt cho mỗi dự án
Các Vấn đề Bảo mật của Máy chủ Bộ nhớ
Lưu trữ Khóa API:Nếu máy chủ bộ nhớ của bạn lưu trữ dữ liệu nhạy cảm (khóa API, mật khẩu), hãy triển khai mã hóa:
import crypto from 'crypto';
const ENCRYPTION_KEY = process.env.MEMORY_ENCRYPTION_KEY;
const ALGORITHM = 'aes-256-gcm';
function encrypt(text) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(ENCRYPTION_KEY), iv);
const encrypted = cipher.update(text, 'utf8', 'hex');
return {
encryptedData: encrypted + cipher.final('hex'),
iv: iv.toString('hex'),
authTag: cipher.getAuthTag().toString('hex')
};
}
function decrypt(encrypted) {
const decipher = crypto.createDecipheriv(
ALGORITHM,
Buffer.from(ENCRYPTION_KEY),
Buffer.from(encrypted.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(encrypted.authTag, 'hex'));
return decipher.update(encrypted.encryptedData, 'hex', 'utf8') + decipher.final('utf8');
}
Kiểm soát Truy cập:Đối với các máy chủ bộ nhớ nhóm, hãy thêm xác thực:
- Yêu cầu khóa API trong các cuộc gọi công cụ bộ nhớ
- Triển khai không gian tên bộ nhớ dành riêng cho người dùng
- Ghi nhật ký tất cả các hoạt động bộ nhớ để kiểm tra
- Giới hạn tốc độ yêu cầu cho mỗi người dùng
Các tác nhân AI của bạn giờ đây có bộ nhớ bền vững. Chúng nhớ ngày hôm qua. Chúng thu hồi các quyết định. Chúng chuyển giao ngữ cảnh mà không cần sao chép-dán.
Không còn “Tôi không có ngữ cảnh từ các phiên trước nữa.” Không còn giải thích lại. Không còn lãng phí thời gian.
Đó là sức mạnh của bộ nhớ MCP: cung cấp cho các tác nhân của bạn một cuốn sổ ghi chú dùng chung và xem chúng trở nên thực sự hữu ích trong các dự án nhiều ngày.
Câu hỏi thường gặp
Bộ nhớ MCP là gì?Bộ nhớ MCP là một triển khai giao thức cho phép các tác nhân AI lưu trữ và truy xuất thông tin qua các phiên. Hãy coi nó như một cuốn sổ ghi chú dùng chung mà các tác nhân có thể viết vào và đọc từ đó, duy trì ngữ cảnh vượt ra ngoài các cuộc hội thoại đơn lẻ.
Làm cách nào để thiết lập bộ nhớ bền vững cho Claude Code?Cài đặt một máy chủ bộ nhớ MCP, sau đó thêm nó vào ~/.claude/settings.json với lệnh và đường dẫn máy chủ. Khởi động lại Claude Code và các công cụ bộ nhớ (remember, recall, search, rollback) sẽ có sẵn.
Những tác nhân AI nào hỗ trợ bộ nhớ MCP?Bất kỳ tác nhân nào chạy trên các máy khách tương thích MCP (Claude Code, Cursor, Windsurf) đều có thể sử dụng các công cụ bộ nhớ. Bạn không cần sửa đổi tệp tác nhân — chỉ cần thêm hướng dẫn bộ nhớ vào lời nhắc của bạn.
Các mẫu bộ nhớ tốt nhất để chuyển giao tác nhân là gì?Sử dụng remember với các thẻ như ["handoff", "project-name"] để lại ngữ cảnh cho tác nhân tiếp theo. Bao gồm công việc đã hoàn thành, các mục đang chờ xử lý và các vấn đề đã biết. Tác nhân nhận sẽ gọi recall(query="handoff") để truy xuất.
Máy chủ MCP có thể lưu trữ bao nhiêu bộ nhớ?Tùy thuộc vào triển khai. Máy chủ tham chiếu sử dụng một tệp JSON có thể phát triển vô hạn. Các máy chủ sản xuất nên thêm chính sách hết hạn, tự động lưu trữ hoặc các backend cơ sở dữ liệu để sử dụng quy mô lớn.
Các nhóm có thể chia sẻ một máy chủ bộ nhớ trung tâm không?Có. Chạy máy chủ bộ nhớ trên một máy dùng chung hoặc phiên bản đám mây, cấu hình tất cả các máy khách của thành viên nhóm để kết nối với nó và gắn thẻ bộ nhớ theo dự án và nhà phát triển để truy xuất có tổ chức.
Nếu thu hồi bộ nhớ trả về quá nhiều kết quả thì sao?Thêm các thẻ cụ thể hơn khi lưu trữ bộ nhớ. Lọc theo tên tác nhân trong các truy vấn thu hồi của bạn. Sử dụng các cụm từ chính xác trong dấu ngoặc kép. Cân nhắc triển khai tìm kiếm ngữ nghĩa với các nhúng để truy xuất thông minh hơn.
