Sessions and memory

Tìm kiếm bộ nhớ

memory_search tìm các ghi chú liên quan từ tệp bộ nhớ của bạn, ngay cả khi cách diễn đạt khác với văn bản gốc. Công cụ này hoạt động bằng cách lập chỉ mục bộ nhớ thành các đoạn nhỏ và tìm kiếm chúng bằng embeddings, từ khóa hoặc cả hai.

Bắt đầu nhanh

Tìm kiếm bộ nhớ mặc định dùng OpenAI embeddings. Để dùng một backend embedding khác, hãy đặt rõ provider:

json5
{  agents: {    defaults: {      memorySearch: {        provider: "openai", // or "gemini", "local", "ollama", "openai-compatible", etc.      },    },  },}

Đối với các thiết lập nhiều endpoint với provider dành riêng cho bộ nhớ, provider cũng có thể là một mục models.providers.<id> tùy chỉnh, chẳng hạn như ollama-5080, khi provider đó đặt api: "ollama" hoặc một chủ sở hữu adapter embedding bộ nhớ khác.

Đối với embeddings cục bộ không cần khóa API, hãy cài đặt @openclaw/llama-cpp-provider và đặt provider: "local". Các source checkout vẫn có thể yêu cầu phê duyệt bản dựng native: pnpm approve-builds rồi pnpm rebuild node-llama-cpp.

Một số endpoint embedding tương thích với OpenAI yêu cầu nhãn bất đối xứng như input_type: "query" cho tìm kiếm và input_type: "document" hoặc "passage" cho các đoạn đã lập chỉ mục. Cấu hình các mục này bằng memorySearch.queryInputTypememorySearch.documentInputType; xem Tham chiếu cấu hình bộ nhớ.

Provider được hỗ trợ

Provider ID Cần khóa API Ghi chú
Bedrock bedrock Không Dùng chuỗi thông tin xác thực AWS
DeepInfra deepinfra Mặc định: BAAI/bge-m3
Gemini gemini Hỗ trợ lập chỉ mục hình ảnh/âm thanh
GitHub Copilot github-copilot Không Dùng gói đăng ký Copilot
Local local Không Mô hình GGUF, tải xuống ~0,6 GB
Mistral mistral
Ollama ollama Không Cục bộ/tự lưu trữ
OpenAI openai Mặc định
OpenAI-compatible openai-compatible Thường cần /v1/embeddings chung
Voyage voyage

Cách tìm kiếm hoạt động

OpenClaw chạy song song hai đường truy xuất và hợp nhất kết quả:

flowchart LR
    Q["Query"] --> E["Embedding"]
    Q --> T["Tokenize"]
    E --> VS["Vector Search"]
    T --> BM["BM25 Search"]
    VS --> M["Weighted Merge"]
    BM --> M
    M --> R["Top Results"]
  • Tìm kiếm vector tìm các ghi chú có ý nghĩa tương tự ("gateway host" khớp với "the machine running OpenClaw").
  • Tìm kiếm từ khóa BM25 tìm các kết quả khớp chính xác (ID, chuỗi lỗi, khóa cấu hình).

Nếu chỉ có một đường khả dụng, đường còn lại sẽ chạy một mình. Chế độ chỉ FTS có chủ đích (provider: "none") và lựa chọn provider tự động/mặc định vẫn có thể dùng xếp hạng từ vựng khi embeddings không khả dụng.

Các provider embedding không cục bộ được chỉ định rõ thì khác. Nếu bạn đặt memorySearch.provider thành một provider cụ thể dựa trên từ xa và provider đó không khả dụng lúc chạy, memory_search sẽ báo bộ nhớ là không khả dụng thay vì âm thầm dùng kết quả chỉ FTS. Điều này giúp provider ngữ nghĩa đã cấu hình bị lỗi luôn hiển thị. Đặt provider: "none" để cố ý truy hồi chỉ FTS, hoặc sửa cấu hình provider/auth để khôi phục xếp hạng ngữ nghĩa.

Cải thiện chất lượng tìm kiếm

Hai tính năng tùy chọn giúp ích khi bạn có lịch sử ghi chú lớn:

Suy giảm theo thời gian

Ghi chú cũ dần mất trọng số xếp hạng để thông tin gần đây xuất hiện trước. Với chu kỳ bán rã mặc định là 30 ngày, một ghi chú từ tháng trước đạt 50% trọng số ban đầu của nó. Các tệp lâu dài như MEMORY.md không bao giờ bị suy giảm.

MMR (đa dạng)

Giảm các kết quả dư thừa. Nếu năm ghi chú đều nhắc đến cùng một cấu hình router, MMR đảm bảo các kết quả đầu bao phủ các chủ đề khác nhau thay vì lặp lại.

Bật cả hai

json5
{  agents: {    defaults: {      memorySearch: {        query: {          hybrid: {            mmr: { enabled: true },            temporalDecay: { enabled: true },          },        },      },    },  },}

Bộ nhớ đa phương thức

Với Gemini Embedding 2, bạn có thể lập chỉ mục hình ảnh và tệp âm thanh cùng với Markdown. Truy vấn tìm kiếm vẫn là văn bản, nhưng chúng khớp với nội dung hình ảnh và âm thanh. Xem Tham chiếu cấu hình bộ nhớ để biết cách thiết lập.

Tìm kiếm bộ nhớ phiên

Bạn có thể tùy chọn lập chỉ mục transcript phiên để memory_search có thể nhớ lại các cuộc trò chuyện trước đó. Đây là tùy chọn bật qua memorySearch.experimental.sessionMemorysources: ["sessions"]; danh sách source mặc định chỉ gồm bộ nhớ. Cờ thử nghiệm bật lập chỉ mục transcript phiên, trong khi sources kiểm soát việc các đoạn phiên có được tìm kiếm hay không.

Các kết quả từ phiên tuân theo tools.sessions.visibility: thiết lập mặc định tree chỉ hiển thị phiên hiện tại và các phiên do nó sinh ra. Để nhớ lại một phiên không liên quan cùng agent được Gateway điều phối từ một phiên DM riêng, hãy chủ động mở rộng khả năng hiển thị thành agent.

Khi dùng QMD, cũng đặt memory.qmd.sessions.enabled: true để transcript được xuất vào một bộ sưu tập QMD. Xem tham chiếu cấu hình để biết chi tiết.

Khắc phục sự cố

Không có kết quả? Chạy openclaw memory status để kiểm tra chỉ mục. Nếu trống, chạy openclaw memory index --force.

Chỉ có kết quả khớp từ khóa? Provider embedding của bạn có thể chưa được cấu hình. Kiểm tra openclaw memory status --deep.

Embeddings cục bộ hết thời gian chờ? ollama, lmstudiolocal mặc định dùng thời gian chờ batch inline dài hơn. Nếu host chỉ đơn giản là chậm, hãy đặt agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds và chạy lại openclaw memory index --force.

Không tìm thấy văn bản CJK? Xây dựng lại chỉ mục FTS bằng openclaw memory index --force.

Đọc thêm

Liên quan

Was this useful?
On this page

On this page