37 điểm bởi GN⁺ 2026-03-06 | 11 bình luận | Chia sẻ qua WhatsApp
  • Để giải quyết vấn đề mất ngữ cảnh giữa các phiên của Claude Code, bài viết xây dựng một hệ thống bộ nhớ kết hợp công cụ tìm kiếm cục bộ QMD và skill /recall
  • QMD là công cụ tìm kiếm cục bộ dùng để lập chỉ mục Obsidian vault, hỗ trợ ba chế độ tìm kiếm: BM25, semantic và hybrid
  • Skill /recall hỗ trợ ba chế độ: theo thời gian, theo chủ đề và trực quan hóa đồ thị, giúp khôi phục ngay toàn bộ ngữ cảnh của các phiên trước
  • Đã triển khai pipeline tự động hóa để tự động phân tích và nhúng bản ghi hội thoại JSONL của 700 phiên vào chỉ mục QMD
  • Đề xuất workflow lấy ngữ cảnh làm trung tâm, có thể dùng với bất kỳ AI agent nào miễn là giữ được ngữ cảnh dù công cụ có thay đổi

Vấn đề: Claude Code bị khởi tạo lại ở mỗi phiên

  • Mọi cuộc trò chuyện của Claude Code đều bắt đầu từ trạng thái zero, và sau khi thực hiện 700 phiên trong 3 tuần, việc theo dõi các quyết định trước đó và ngữ cảnh dự án trở nên khó khăn
  • Khi đang làm dở mà chạm giới hạn ngữ cảnh (60%), cần phải compact hoặc hand off, và trong quá trình đó một nửa các quyết định bị thất lạc
  • Khi muốn tiếp tục công việc vào ngày hôm sau, cảm giác không nhớ mình đã làm gì cứ lặp lại
  • Cách làm cũ là tìm kiếm dựa trên grep trong file không có khả năng mở rộng

QMD: công cụ tìm kiếm cục bộ dành riêng cho vault

  • QMD là công cụ tìm kiếm cục bộ do CEO Shopify Tobias Lutke tạo ra, có thể lập chỉ mục Obsidian vault và trả kết quả trong chưa đầy 1 giây
  • Có thể ánh xạ các collection của QMD theo từng thư mục trong vault (ghi chú, nhật ký hằng ngày, phiên làm việc, transcript, v.v.) để tìm kiếm tập trung
  • Hoạt động bằng các lệnh đơn như qmd collection list, qmd search "video workflow" -c notes -n 3
  • Tìm kiếm mặc định của Claude Code là cách brute force khi sub-agent Haiku dùng grep trên toàn bộ file; thử nghiệm cho thấy mất 3 phút, trả về 300 file và chất lượng kết quả thấp
  • Tìm kiếm bằng QMD gần như tức thì, chính xác hơn và tốn ít token hơn — không cần sub-agent

Grep vs BM25 vs tìm kiếm semantic

  • BM25 (qmd search): tìm kiếm full-text có tính quyết định, khớp từ khóa như grep nhưng chấm điểm cho từng file
    — dựa trên tần suất xuất hiện của từ và độ hiếm tương đối trong toàn bộ tài liệu, chỉ dùng phép toán chứ không cần AI hay embedding
    • Một ghi chú ngắn nhắc tới "sleep" 5 lần sẽ có điểm cao hơn một file 10.000 từ chỉ nhắc 1 lần
  • Semantic (qmd vsearch): dựa trên embedding nên có thể tìm theo ý nghĩa ngay cả khi không có đúng từ đó
  • Hybrid (qmd query): kết hợp BM25 và semantic
  • So sánh benchmark tìm kiếm "sleep":
    • grep: trả về 200 file, nhiều nhiễu do cả lệnh lập trình sleep() cũng xuất hiện
    • BM25: trong vòng 2 giây trả về các kết quả liên quan như thử nghiệm chất lượng giấc ngủ, ghi chép việc giấc ngủ bị gián đoạn
    • Tuy nhiên, qmd search "insomnia" cho 0 kết quả vì từ đó không có trong vault
    • semantic: khi tìm "couldn't sleep, bad night" thì còn phát hiện cả mục tiêu thói quen đi ngủ đã đặt ra từ nhiều năm trước — 4 trong 5 kết quả không chứa chính xác cụm từ truy vấn
    • hybrid: đưa ra thứ hạng tối ưu với sleep quality improvement 89%, sleep interrupted at 3am 51%, health sleep optimization 42%
  • Mẫu sử dụng được khuyến nghị: 80% nhu cầu tìm kiếm xử lý bằng BM25 (phù hợp với ghi chú có cấu trúc), còn transcript và ghi chú phi cấu trúc thì bổ sung tìm kiếm semantic

Trường hợp phát hiện thực tế của tìm kiếm semantic

  • Với các truy vấn phi cấu trúc như "find the days when I was happy and what was the reason", Claude tự động kết hợp nhiều lượt tìm kiếm:
    • Chạy nhiều truy vấn như qmd vsearch "happy, grateful, excited", "energy, great day, feeling good", "satisfaction, accomplishment"
  • Từ các ghi chú hằng ngày trong nhiều tháng, hệ thống phát hiện các liên kết ngữ nghĩa — rút ra mẫu rằng "những ngày hạnh phúc nhất là khi phát hành thứ gì đó và phục hồi tốt bằng sauna hoặc ngủ 9 tiếng"

Skill /recall: nạp ngữ cảnh trước khi bắt đầu làm việc

  • /recallskill cho Claude Code hoạt động trên QMD và tự động nạp ngữ cảnh trước khi bắt đầu công việc
  • Hỗ trợ ba chế độ:
    • temporal: quét lịch sử phiên theo ngày (/recall yesterday, /recall last week)
    • topic: tìm kiếm BM25 trên các collection của QMD (/recall topic graph)
    • graph: trực quan hóa tương tác các phiên và file (/recall graph last week)
  • Kết quả thử /recall yesterday: tái dựng timeline của 39 phiên trong một ngày — hiển thị thời gian, số lượng tin nhắn và nội dung công việc của từng phiên
  • Kết quả /recall topic "QMD video": trong chưa tới 1 phút trả về các file liên quan như dashboard, kế hoạch sản xuất, todo list trên toàn bộ phiên và ghi chú — vượt trội hơn brute-force grep về thời gian, token và chất lượng kết quả
  • Chế độ graph hiển thị các phiên thành các khối màu: phiên cũ mờ hơn, phiên gần đây được tô nổi màu tím — file được gom cụm theo loại như goals, research, voice, docs, content, skills
  • Ví dụ: có thể tìm lại phiên từng bàn về địa điểm ăn trưa trên đồ thị sau một tuần, rồi sao chép đường dẫn file đó vào Claude Code để tiếp tục công việc từ cuộc trò chuyện trước

Tự động lập chỉ mục 700 phiên

  • Claude Code lưu toàn bộ cuộc trò chuyện cục bộ dưới dạng file JSONL — tích lũy 700 phiên trong 3 tuần
  • File gốc chứa tool uses, system prompt, role, v.v., nên cần parse chúng rồi chuyển thành Markdown sạch (tin nhắn người dùng thực tế và các tín hiệu liên quan) trước khi nhúng vào chỉ mục QMD
  • Khi đóng terminal, một hook tự động sẽ chạy để export và embed phiên vào QMD — luôn giữ chỉ mục mới nhất mà không cần thao tác thủ công

Phát hiện những ý tưởng chưa từng được thực hiện

  • Khi tìm "find the ideas that I have never acted on", Claude tổng hợp kết quả từ QMD và phát hiện:
    • Ngày 19 tháng 10 — từng có kế hoạch xây dựng dashboard viết PhD nhưng chưa thực hiện
    • Từng có ý tưởng về ứng dụng dựa trên illustration nhưng không có bước tiếp theo
    • Từng có ý tưởng ghi màn hình workflow Obsidian nhưng không triển khai
  • Các nội dung được viết từ nhiều tháng trước và đã hoàn toàn bị quên nay được tìm lại
  • Toàn bộ embedding đều được lưu cục bộ

Workflow lấy ngữ cảnh làm trung tâm

  • Ghi chú không còn bị nhốt trong Obsidian mà được chuyển thành ngữ cảnh hữu ích thực sự phục vụ việc đạt mục tiêu
  • Công cụ có thể thay đổi (mô hình mới, agent mới), nhưng chỉ cần giữ được ngữ cảnh thì vẫn dùng được ở Claude Code, Codex, Gemini CLI hay nơi khác
  • Lớp bộ nhớ hoạt động ở dạng skill trên toàn bộ stack
  • Cấu hình thực tế: dùng Obsidian Sync để đồng bộ vault giữa Mac và Mac Mini luôn bật, còn OpenClaw chạy 24/7 trên Mac Mini — khi truy cập OpenClaw từ điện thoại, có thể dùng cùng vault, chỉ mục QMD và skill ở mọi nơi
  • Cấu trúc toàn bộ stack:
    • Dưới cùng: Obsidian Vault
    • Ở giữa: QMD Search
    • Trên cùng: Claude Code / OpenClaw
    • Ngữ cảnh chảy từ dưới lên trên

11 bình luận

 
mammal 2026-03-06

Dạo này sao lại có nhiều thứ chết thế nhỉ

 
pjs102793 2026-03-06

kkkkkk

 
t7vonn 2026-03-06

grep đã chết. Hãy dùng ripgrep

 
galadbran 2026-03-06

Tôi định thử dùng qmd nên đã nhờ AI tìm hiểu, nhưng nó bảo phía embedding thì ổn còn BM25 và mở rộng truy vấn lại hỗ trợ tiếng Hàn không tốt nên không khuyến nghị...

 
alstjr7375 2026-03-07

Điều này đúng với gần như hầu hết cả trong BM25.
Vì vậy, tốt nhất là nên dùng kèm bộ phân tích hình thái.
https://github.com/bab2min/Kiwi

 
cshj55 2026-03-07

Tôi đã thử kiểm chứng chuyện này thì có vẻ không có bằng chứng chính xác nào. Không biết có ai khác cũng có trải nghiệm tương tự không?

 
dalinaum 2026-03-23

Vì BM25 là kiểu tìm kiếm thiên về từ ngữ, nên ý kiến của galadbran có vẻ hợp lý.

 
versionx 2026-03-10

Nhìn theo hướng cổ điển hơn thì có vẻ như các kỹ thuật truy hồi thông tin cổ điển đơn giản đang được tái sử dụng ở cấp độ cục bộ hơn.

 
redmi 2026-03-07

~~đã chết rồi 💀💀💀

 
ppj050 2026-03-06

Chỉ là RAG thôi mà;

 
lkaybob 2026-03-06

Tôi thấy trang cài đặt yêu cầu địa chỉ email nên tưởng là repo riêng tư, hóa ra là repo công khai.
Bạn có thể vào bằng liên kết bên dưới.

https://github.com/ArtemXTech/personal-os-skills/…