Sessions and memory

Pencarian memori

memory_search menemukan catatan yang relevan dari file memori Anda, meskipun susunan katanya berbeda dari teks asli. Cara kerjanya adalah dengan mengindeks memori ke dalam potongan kecil dan mencarinya menggunakan embedding, kata kunci, atau keduanya.

Mulai cepat

Jika Anda memiliki langganan GitHub Copilot, atau kunci API OpenAI, Gemini, Voyage, atau Mistral yang dikonfigurasi, pencarian memori bekerja secara otomatis. Untuk menetapkan penyedia secara eksplisit:

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

Untuk penyiapan multi-endpoint, provider juga dapat berupa entri kustom models.providers.<id>, seperti ollama-5080, ketika penyedia tersebut menetapkan api: "ollama" atau pemilik adapter embedding lainnya.

Untuk embedding lokal tanpa kunci API, tetapkan provider: "local". Checkout sumber mungkin masih memerlukan persetujuan build native: pnpm approve-builds lalu pnpm rebuild node-llama-cpp.

Beberapa endpoint embedding yang kompatibel dengan OpenAI memerlukan label asimetris seperti input_type: "query" untuk pencarian dan input_type: "document" atau "passage" untuk potongan yang diindeks. Konfigurasikan dengan memorySearch.queryInputType dan memorySearch.documentInputType; lihat referensi konfigurasi Memori.

Penyedia yang didukung

Penyedia ID Perlu kunci API Catatan
Bedrock bedrock Tidak Terdeteksi otomatis ketika rantai kredensial AWS berhasil diselesaikan
Gemini gemini Ya Mendukung pengindeksan gambar/audio
GitHub Copilot github-copilot Tidak Terdeteksi otomatis, menggunakan langganan Copilot
Lokal local Tidak Model GGUF, unduhan ~0,6 GB
Mistral mistral Ya Terdeteksi otomatis
Ollama ollama Tidak Lokal, harus ditetapkan secara eksplisit
OpenAI openai Ya Terdeteksi otomatis, cepat
Voyage voyage Ya Terdeteksi otomatis

Cara kerja pencarian

OpenClaw menjalankan dua jalur pengambilan secara paralel dan menggabungkan hasilnya:

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"]
  • Pencarian vektor menemukan catatan dengan makna serupa ("gateway host" cocok dengan "mesin yang menjalankan OpenClaw").
  • Pencarian kata kunci BM25 menemukan kecocokan persis (ID, string kesalahan, kunci konfigurasi).

Jika hanya satu jalur yang tersedia (tanpa embedding atau tanpa FTS), jalur lainnya berjalan sendiri.

Ketika embedding tidak tersedia, OpenClaw tetap menggunakan pemeringkatan leksikal atas hasil FTS, bukan kembali hanya ke pengurutan kecocokan persis mentah. Mode terdegradasi itu meningkatkan peringkat potongan dengan cakupan istilah kueri yang lebih kuat dan jalur file yang relevan, sehingga recall tetap berguna bahkan tanpa sqlite-vec atau penyedia embedding.

Meningkatkan kualitas pencarian

Dua fitur opsional membantu ketika Anda memiliki riwayat catatan yang besar:

Peluruhan temporal

Catatan lama secara bertahap kehilangan bobot peringkat sehingga informasi terbaru muncul terlebih dahulu. Dengan half-life default 30 hari, catatan dari bulan lalu memiliki skor 50% dari bobot aslinya. File evergreen seperti MEMORY.md tidak pernah diluruhkan.

MMR (keberagaman)

Mengurangi hasil yang redundan. Jika lima catatan semuanya menyebut konfigurasi router yang sama, MMR memastikan hasil teratas mencakup topik berbeda, bukan berulang.

Aktifkan keduanya

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

Memori multimodal

Dengan Gemini Embedding 2, Anda dapat mengindeks file gambar dan audio berdampingan dengan Markdown. Kueri pencarian tetap berupa teks, tetapi akan dicocokkan dengan konten visual dan audio. Lihat referensi konfigurasi Memori untuk penyiapan.

Pencarian memori sesi

Anda dapat secara opsional mengindeks transkrip sesi agar memory_search dapat mengingat percakapan sebelumnya. Ini bersifat opt-in melalui memorySearch.experimental.sessionMemory. Lihat referensi konfigurasi untuk detail.

Pemecahan masalah

Tidak ada hasil? Jalankan openclaw memory status untuk memeriksa indeks. Jika kosong, jalankan openclaw memory index --force.

Hanya kecocokan kata kunci? Penyedia embedding Anda mungkin belum dikonfigurasi. Periksa openclaw memory status --deep.

Embedding lokal timeout? ollama, lmstudio, dan local menggunakan timeout batch inline yang lebih panjang secara default. Jika host memang lambat, tetapkan agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds dan jalankan ulang openclaw memory index --force.

Teks CJK tidak ditemukan? Bangun ulang indeks FTS dengan openclaw memory index --force.

Bacaan lebih lanjut

Terkait