Semantic Caching
Bộ nhớ đệm ngữ nghĩa trả về phản hồi LLM đã lưu khi truy vấn mới có cùng ý nghĩa với truy vấn trước đó, đối chiếu embedding để bỏ qua lần gọi model và giảm chi phí.
Bộ nhớ đệm ngữ nghĩa lưu phản hồi của mô hình ngôn ngữ lớn (LLM) hoặc model tạo sinh khác, rồi dùng lại cho yêu cầu mới có cùng ý nghĩa với yêu cầu trước đó, ngay cả khi cách diễn đạt khác nhau. Bộ nhớ đệm chuyển mỗi prompt thành embedding, tìm prompt đã lưu có độ tương đồng cao nhất và trả về câu trả lời đã lưu nếu độ tương đồng vượt ngưỡng. Khi có kết quả trúng cache, lời gọi model được bỏ qua hoàn toàn, nên độ trễ giảm xuống còn vài mili giây và yêu cầu không tiêu thụ token. Vì đối sánh dựa trên ý nghĩa, "Tôi quên mật khẩu" và "Làm sao để đặt lại mật khẩu?" dùng chung một câu trả lời đã lưu; cache đối sánh chính xác dựa trên văn bản prompt sẽ phải lưu câu trả lời đó hai lần. Zilliz phát hành thư viện mã nguồn mở GPTCache cho mô hình này vào năm 2023; hiện nay, cơ sở dữ liệu vector và API gateway cung cấp tính năng này tích hợp sẵn.
Cách bộ nhớ đệm ngữ nghĩa hoạt động#
Model embedding câu mã hóa prompt đầu vào, rồi một phép tìm kiếm vector so sánh embedding đó với embedding của các prompt đã được trả lời trước đây, thường bằng độ tương đồng cosine. Cache nhỏ có thể nằm trong bộ nhớ, còn cache lớn được lưu trong cơ sở dữ liệu vector có chỉ mục láng giềng gần nhất xấp xỉ. Khi cache không có kết quả, model tạo câu trả lời mới; embedding của prompt mới và phản hồi được lưu cùng nhau, thường kèm thời gian hết hạn.
Khóa cache phải bao quát mọi yếu tố khác làm thay đổi câu trả lời chính xác. Phản hồi được tạo bằng system prompt, phiên bản model, cấp quyền người dùng hoặc tập tài liệu truy xuất khác nhau sẽ được lưu ở phạm vi riêng, nhờ đó câu trả lời trong cache của khách hàng này không bao giờ được cung cấp cho khách hàng khác. Tính cập nhật cũng cần được xử lý cẩn thận tương tự: khi giá cả, chính sách hoặc tài liệu nguồn thay đổi, các mục dựa trên phiên bản cũ vẫn có thể khớp với prompt mới; vì vậy, mỗi mục có thời hạn lưu trữ và phạm vi chịu ảnh hưởng sẽ được xóa khi dữ liệu nguồn thay đổi.
Chọn ngưỡng tương đồng#
Ngưỡng quyết định hai prompt có thể khác nhau đến mức nào mà vẫn dùng chung câu trả lời. Ví dụ này dùng model all-MiniLM-L6-v2 từ Sentence Transformers làm bộ mã hóa cho cache gồm ba mục:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
# Earlier prompts whose answers are already stored in the cache
cached = ["How do I reset my password?", "What are your opening hours?", "How do I cancel my subscription?"]
cached_embeddings = model.encode(cached)
# Each new prompt reuses the closest cached answer if it clears the threshold
queries = ["I forgot my password, how can I change it?", "When does the store open?", "How do I cancel my order?"]
for query in queries:
query_embedding = model.encode(query)
scores = model.similarity(query_embedding, cached_embeddings)[0]
best = scores.argmax().item()
status = "hit" if scores[best] >= 0.7 else "miss"
print(f"{query} -> {cached[best]} ({scores[best]:.2f}, {status})")Câu diễn đạt lại về mật khẩu đạt điểm 0.89 và là kết quả cache chính xác. Câu diễn đạt lại về giờ mở cửa chỉ đạt 0.61 nên không khớp. "Làm thế nào để hủy đơn hàng?" đạt 0.71 khi so với "Làm thế nào để hủy gói đăng ký của tôi?" và sẽ trả về hướng dẫn sai. Độ tương đồng embedding đo lường mức độ trùng lặp về từ ngữ và chủ đề, nên không có một ngưỡng duy nhất nào phân tách được ba trường hợp này. Cache production thu hẹp khoảng cách bằng cách fine-tune bộ mã hóa trên các cặp diễn đạt tương đương từ lưu lượng truy cập riêng, đặt ngưỡng theo từng danh mục hoặc chuyển từng kết quả cache tiềm năng cho một bộ xếp hạng lại để chấm điểm đồng thời hai prompt trước khi trả về câu trả lời đã lưu.
Vị trí phù hợp của bộ nhớ đệm ngữ nghĩa#
Bộ nhớ đệm ngữ nghĩa phát huy hiệu quả khi nhiều người dùng hỏi cùng câu hỏi và câu trả lời ít thay đổi: chatbot hỗ trợ, bộ phận trợ giúp nội bộ và trợ lý sinh tăng cường truy xuất (RAG) dựa trên tài liệu ổn định. Yêu cầu mang tính cá nhân hóa, nhạy cảm với thời gian hoặc sáng tạo ít được lợi, vì câu trả lời dùng lại có thể sai hoặc lặp lại.
Hai loại cache khác trong hệ thống phục vụ LLM hoạt động ở các lớp khác nhau:
- Cache prompt: Máy chủ model lưu trạng thái đã tính toán của một tiền tố prompt lặp lại chính xác để rút ngắn giai đoạn tiền xử lý; model vẫn tạo câu trả lời mới.
- Cache KV: Key và value của các token trước đó được giữ trong một lượt tạo sinh để mỗi token mới không cần tính toán lại chúng.
Tìm kiếm ngữ nghĩa dùng cùng phương thức tra cứu embedding để truy xuất tài liệu cho một truy vấn, còn cache ngữ nghĩa dùng phương thức đó để truy xuất câu trả lời hoàn chỉnh, thường bên trong một AI gateway nằm giữa ứng dụng và nhà cung cấp model.
Hình ảnh cũng có thể dùng làm khóa cache theo cách tương tự. embed() trong Ultralytics YOLO trả về một vector đặc trưng cho mỗi hình ảnh, nên model YOLO26 được huấn luyện cho phân loại hình ảnh có thể cung cấp khóa tra cứu, cho phép các khung hình camera gần trùng lặp dùng lại phần mô tả trước đó của model thị giác-ngôn ngữ.










