Documentation Index
Fetch the complete documentation index at: https://openclawhub.vn/llms.txt
Use this file to discover all available pages before exploring further.
Tham khảo cấu hình bộ nhớ
Trang này bao gồm toàn bộ cấu hình cho tìm kiếm bộ nhớ OpenClaw. Để xem tổng quan khái niệm (bố cục file, công cụ bộ nhớ, khi nào ghi bộ nhớ và tự động flush), xem Bộ nhớ.Mặc định tìm kiếm bộ nhớ
- Được kích hoạt mặc định.
- Theo dõi các file bộ nhớ để phát hiện thay đổi (debounced).
- Cấu hình tìm kiếm bộ nhớ dưới
agents.defaults.memorySearch(không phảimemorySearchcấp cao nhất). - Sử dụng embedding từ xa mặc định. Nếu
memorySearch.providerkhông được thiết lập, OpenClaw tự động chọn:localnếumemorySearch.local.modelPathđược cấu hình và file tồn tại.openainếu có thể giải quyết khóa OpenAI.gemininếu có thể giải quyết khóa Gemini.voyagenếu có thể giải quyết khóa Voyage.mistralnếu có thể giải quyết khóa Mistral.- Nếu không, tìm kiếm bộ nhớ sẽ bị vô hiệu hóa cho đến khi được cấu hình.
- Chế độ local sử dụng node-llama-cpp và có thể yêu cầu
pnpm approve-builds. - Sử dụng sqlite-vec (khi có sẵn) để tăng tốc tìm kiếm vector trong SQLite.
memorySearch.provider = "ollama"cũng được hỗ trợ cho embedding Ollama local/self-hosted (/api/embeddings), nhưng không được tự động chọn.
models.providers.*.apiKey, hoặc biến môi trường. Codex OAuth chỉ bao gồm chat/completions và không đáp ứng embedding cho tìm kiếm bộ nhớ. Đối với Gemini, sử dụng GEMINI_API_KEY hoặc models.providers.google.apiKey. Đối với Voyage, sử dụng VOYAGE_API_KEY hoặc models.providers.voyage.apiKey. Đối với Mistral, sử dụng MISTRAL_API_KEY hoặc models.providers.mistral.apiKey. Ollama thường không yêu cầu một API key thực (một placeholder như OLLAMA_API_KEY=ollama-local là đủ khi cần theo chính sách local).
Khi sử dụng một endpoint tương thích OpenAI tùy chỉnh, thiết lập memorySearch.remote.apiKey (và tùy chọn memorySearch.remote.headers).
Backend QMD (thử nghiệm)
Thiết lậpmemory.backend = "qmd" để thay thế indexer SQLite tích hợp bằng QMD: một sidecar tìm kiếm ưu tiên local kết hợp BM25 + vectors + reranking. Markdown vẫn là nguồn thông tin chính; OpenClaw sử dụng QMD để truy xuất. Các điểm chính:
Yêu cầu
- Vô hiệu hóa mặc định. Chọn tham gia theo cấu hình (
memory.backend = "qmd"). - Cài đặt CLI QMD riêng (
bun install -g https://github.com/tobi/qmdhoặc tải bản phát hành) và đảm bảo binaryqmdcó trongPATHcủa gateway. - QMD cần một bản dựng SQLite cho phép mở rộng (
brew install sqlitetrên macOS). - QMD chạy hoàn toàn local qua Bun +
node-llama-cppvà tự động tải xuống các mô hình GGUF từ HuggingFace khi sử dụng lần đầu (không cần daemon Ollama riêng). - Gateway chạy QMD trong một XDG home tự chứa dưới
~/.openclaw/agents/<agentId>/qmd/bằng cách thiết lậpXDG_CONFIG_HOMEvàXDG_CACHE_HOME. - Hỗ trợ hệ điều hành: macOS và Linux hoạt động ngay khi Bun + SQLite được cài đặt. Windows được hỗ trợ tốt nhất qua WSL2.
Cách sidecar hoạt động
- Gateway ghi một QMD home tự chứa dưới
~/.openclaw/agents/<agentId>/qmd/(cấu hình + cache + sqlite DB). - Các bộ sưu tập được tạo qua
qmd collection addtừmemory.qmd.paths(cộng với các file bộ nhớ workspace mặc định), sau đóqmd update+qmd embedchạy khi khởi động và theo một khoảng thời gian có thể cấu hình (memory.qmd.update.interval, mặc định 5 phút). - Gateway hiện khởi tạo trình quản lý QMD khi khởi động, vì vậy các bộ đếm thời gian cập nhật định kỳ được kích hoạt ngay cả trước khi gọi
memory_searchđầu tiên. - Làm mới khi khởi động hiện chạy nền mặc định để khởi động chat không bị chặn; thiết lập
memory.qmd.update.waitForBootSync = trueđể giữ hành vi chặn trước đó. - Tìm kiếm chạy qua
memory.qmd.searchMode(mặc địnhqmd search --json; cũng hỗ trợvsearchvàquery). Nếu chế độ đã chọn từ chối cờ trên bản dựng QMD của bạn, OpenClaw thử lại vớiqmd query. Nếu QMD thất bại hoặc binary bị thiếu, OpenClaw tự động quay lại trình quản lý SQLite tích hợp để các công cụ bộ nhớ tiếp tục hoạt động. - OpenClaw không tiết lộ điều chỉnh kích thước batch QMD embed hôm nay; hành vi batch được kiểm soát bởi chính QMD.
- Tìm kiếm đầu tiên có thể chậm: QMD có thể tải xuống các mô hình GGUF local (reranker/query expansion) khi chạy
qmd querylần đầu tiên.-
OpenClaw thiết lập
XDG_CONFIG_HOME/XDG_CACHE_HOMEtự động khi chạy QMD. -
Nếu bạn muốn tải xuống các mô hình thủ công trước (và làm nóng cùng một index OpenClaw sử dụng), chạy một truy vấn một lần với các thư mục XDG của agent.
Trạng thái QMD của OpenClaw nằm dưới thư mục trạng thái của bạn (mặc định là
~/.openclaw). Bạn có thể chỉ địnhqmdvào cùng một index bằng cách xuất các biến XDG giống như OpenClaw sử dụng:
-
OpenClaw thiết lập
Bề mặt cấu hình (memory.qmd.*)
command(mặc địnhqmd): ghi đè đường dẫn thực thi.searchMode(mặc địnhsearch): chọn lệnh QMD nào hỗ trợmemory_search(search,vsearch,query).includeDefaultMemory(mặc địnhtrue): tự động lập chỉ mụcMEMORY.md+memory/**/*.md.paths[]: thêm thư mục/file bổ sung (path,patterntùy chọn,nameổn định tùy chọn).sessions: chọn tham gia lập chỉ mục JSONL phiên (enabled,retentionDays,exportDir).update: kiểm soát tần suất làm mới và thực thi bảo trì: (interval,debounceMs,onBoot,waitForBootSync,embedInterval,commandTimeoutMs,updateTimeoutMs,embedTimeoutMs).limits: giới hạn tải trọng recall (maxResults,maxSnippetChars,maxInjectedChars,timeoutMs).scope: cùng schema nhưsession.sendPolicy. Mặc định là chỉ DM (denytất cả,allowchat trực tiếp); nới lỏng để hiển thị kết quả QMD trong nhóm/kênh.match.keyPrefixkhớp với khóa phiên đã chuẩn hóa (viết thường, loại bỏ bất kỳagent:<id>:nào ở đầu). Ví dụ:discord:channel:.match.rawKeyPrefixkhớp với khóa phiên thô (viết thường), bao gồmagent:<id>:. Ví dụ:agent:main:discord:.- Legacy:
match.keyPrefix: "agent:..."vẫn được coi là một tiền tố khóa thô, nhưng nên sử dụngrawKeyPrefixđể rõ ràng.
- Khi
scopetừ chối một tìm kiếm, OpenClaw ghi lại cảnh báo vớichannel/chatTypeđã được suy ra để dễ dàng gỡ lỗi kết quả trống. - Các đoạn trích nguồn từ bên ngoài workspace xuất hiện dưới dạng
qmd/<collection>/<relative-path>trong kết quảmemory_search;memory_gethiểu tiền tố đó và đọc từ gốc bộ sưu tập QMD đã cấu hình. - Khi
memory.qmd.sessions.enabled = true, OpenClaw xuất các bản ghi phiên đã được làm sạch (User/Assistant turns) vào một bộ sưu tập QMD chuyên dụng dưới~/.openclaw/agents/<id>/qmd/sessions/, vì vậymemory_searchcó thể nhớ lại các cuộc trò chuyện gần đây mà không cần chạm vào index SQLite tích hợp. - Các đoạn trích
memory_searchhiện bao gồm một footerSource: <path#line>khimemory.citationslàauto/on; thiết lậpmemory.citations = "off"để giữ thông tin metadata nội bộ (agent vẫn nhận được đường dẫn chomemory_get, nhưng văn bản đoạn trích bỏ qua footer và hệ thống nhắc nhở agent không trích dẫn nó).
Ví dụ QMD
Trích dẫn và dự phòng
memory.citationsáp dụng bất kể backend (auto/on/off).- Khi
qmdchạy, chúng tôi gắn thẻstatus().backend = "qmd"để chẩn đoán hiển thị động cơ nào đã phục vụ kết quả. Nếu quy trình con QMD thoát hoặc đầu ra JSON không thể phân tích, trình quản lý tìm kiếm ghi lại cảnh báo và trả về nhà cung cấp tích hợp (embedding Markdown hiện có) cho đến khi QMD phục hồi.
Đường dẫn bộ nhớ bổ sung
Nếu bạn muốn lập chỉ mục các file Markdown ngoài bố cục workspace mặc định, thêm các đường dẫn rõ ràng:- Đường dẫn có thể là tuyệt đối hoặc tương đối với workspace.
- Thư mục được quét đệ quy cho các file
.md. - Mặc định, chỉ các file Markdown được lập chỉ mục.
- Nếu
memorySearch.multimodal.enabled = true, OpenClaw cũng lập chỉ mục các file hình ảnh/âm thanh được hỗ trợ chỉ dướiextraPaths. Các gốc bộ nhớ mặc định (MEMORY.md,memory.md,memory/**/*.md) vẫn chỉ là Markdown. - Symlinks bị bỏ qua (file hoặc thư mục).
File bộ nhớ đa phương tiện (hình ảnh + âm thanh Gemini)
OpenClaw có thể lập chỉ mục các file hình ảnh và âm thanh từmemorySearch.extraPaths khi sử dụng embedding Gemini 2:
- Bộ nhớ đa phương tiện hiện chỉ được hỗ trợ cho
gemini-embedding-2-preview. - Lập chỉ mục đa phương tiện chỉ áp dụng cho các file được phát hiện qua
memorySearch.extraPaths. - Các loại hình thức được hỗ trợ trong giai đoạn này: hình ảnh và âm thanh.
memorySearch.fallbackphải giữ là"none"trong khi bộ nhớ đa phương tiện được kích hoạt.- Các byte file hình ảnh/âm thanh phù hợp được tải lên endpoint embedding Gemini đã cấu hình trong quá trình lập chỉ mục.
- Các phần mở rộng hình ảnh được hỗ trợ:
.jpg,.jpeg,.png,.webp,.gif,.heic,.heif. - Các phần mở rộng âm thanh được hỗ trợ:
.mp3,.wav,.ogg,.opus,.m4a,.aac,.flac. - Các truy vấn tìm kiếm vẫn là văn bản, nhưng Gemini có thể so sánh các truy vấn văn bản đó với các embedding hình ảnh/âm thanh đã lập chỉ mục.
memory_getvẫn chỉ đọc Markdown; các file nhị phân có thể tìm kiếm nhưng không được trả về dưới dạng nội dung file thô.
Embedding Gemini (native)
Thiết lập nhà cung cấp thànhgemini để sử dụng API embedding Gemini trực tiếp:
remote.baseUrllà tùy chọn (mặc định là URL cơ sở API Gemini).remote.headerscho phép bạn thêm các header bổ sung nếu cần.- Mô hình mặc định:
gemini-embedding-001. gemini-embedding-2-previewcũng được hỗ trợ: giới hạn 8192 token và các kích thước có thể cấu hình (768 / 1536 / 3072, mặc định 3072).
Embedding Gemini 2 (preview)
Yêu cầu lập chỉ mục lại: Chuyển từgemini-embedding-001(768 dimensions) sanggemini-embedding-2-preview(3072 dimensions) thay đổi kích thước vector. Điều tương tự cũng xảy ra nếu bạn thay đổioutputDimensionalitygiữa 768, 1536 và 3072. OpenClaw sẽ tự động lập chỉ mục lại khi phát hiện thay đổi mô hình hoặc kích thước.
Endpoint tương thích OpenAI tùy chỉnh
Nếu bạn muốn sử dụng một endpoint tương thích OpenAI tùy chỉnh (OpenRouter, vLLM, hoặc proxy), bạn có thể sử dụng cấu hìnhremote với nhà cung cấp OpenAI:
memorySearch.provider = "local" hoặc thiết lập
memorySearch.fallback = "none".
Dự phòng
memorySearch.fallbackcó thể làopenai,gemini,voyage,mistral,ollama,local, hoặcnone.- Nhà cung cấp dự phòng chỉ được sử dụng khi nhà cung cấp embedding chính thất bại.
Lập chỉ mục batch (OpenAI + Gemini + Voyage)
- Vô hiệu hóa mặc định. Thiết lập
agents.defaults.memorySearch.remote.batch.enabled = trueđể kích hoạt cho lập chỉ mục corpus lớn (OpenAI, Gemini, và Voyage). - Hành vi mặc định chờ hoàn thành batch; điều chỉnh
remote.batch.wait,remote.batch.pollIntervalMs, vàremote.batch.timeoutMinutesnếu cần. - Thiết lập
remote.batch.concurrencyđể kiểm soát số lượng công việc batch chúng tôi gửi song song (mặc định: 2). - Chế độ batch áp dụng khi
memorySearch.provider = "openai"hoặc"gemini"và sử dụng API key tương ứng. - Công việc batch Gemini sử dụng endpoint batch embedding không đồng bộ và yêu cầu khả dụng API Batch Gemini.
- Đối với các backfill lớn, OpenAI thường là tùy chọn nhanh nhất chúng tôi hỗ trợ vì chúng tôi có thể gửi nhiều yêu cầu embedding trong một công việc batch duy nhất và để OpenAI xử lý chúng không đồng bộ.
- OpenAI cung cấp giá ưu đãi cho các công việc API Batch, vì vậy các lần chạy lập chỉ mục lớn thường rẻ hơn so với gửi cùng các yêu cầu đó đồng bộ.
- Xem tài liệu API Batch OpenAI và giá cả để biết chi tiết:
Cách các công cụ bộ nhớ hoạt động
memory_searchtìm kiếm ngữ nghĩa các đoạn Markdown (~400 token mục tiêu, 80-token chồng chéo) từMEMORY.md+memory/**/*.md. Nó trả về văn bản đoạn trích (giới hạn ~700 ký tự), đường dẫn file, phạm vi dòng, điểm số, nhà cung cấp/mô hình, và liệu chúng tôi có dự phòng từ embedding local sang từ xa hay không. Không có tải trọng file đầy đủ nào được trả về.memory_getđọc một file Markdown bộ nhớ cụ thể (tương đối với workspace), tùy chọn từ một dòng bắt đầu và trong N dòng. Các đường dẫn ngoàiMEMORY.md/memory/bị từ chối.- Cả hai công cụ chỉ được kích hoạt khi
memorySearch.enabledgiải quyết đúng cho agent.
Những gì được lập chỉ mục (và khi nào)
- Loại file: Chỉ Markdown (
MEMORY.md,memory/**/*.md). - Lưu trữ chỉ mục: SQLite per-agent tại
~/.openclaw/memory/<agentId>.sqlite(có thể cấu hình quaagents.defaults.memorySearch.store.path, hỗ trợ token{agentId}). - Tính mới: watcher trên
MEMORY.md+memory/đánh dấu chỉ mục là bẩn (debounce 1.5s). Đồng bộ được lên lịch khi bắt đầu phiên, khi tìm kiếm, hoặc theo khoảng thời gian và chạy không đồng bộ. Bản ghi phiên sử dụng ngưỡng delta để kích hoạt đồng bộ nền. - Kích hoạt lập chỉ mục lại: chỉ mục lưu trữ embedding provider/model + endpoint fingerprint + chunking params. Nếu bất kỳ điều nào trong số đó thay đổi, OpenClaw tự động đặt lại và lập chỉ mục lại toàn bộ cửa hàng.
Tìm kiếm kết hợp (BM25 + vector)
Khi được kích hoạt, OpenClaw kết hợp:- Vector similarity (khớp ngữ nghĩa, cách diễn đạt có thể khác)
- BM25 keyword relevance (các token chính xác như ID, biến môi trường, ký hiệu mã)
Tại sao kết hợp
Tìm kiếm vector rất tốt cho “điều này có nghĩa là cùng một điều”:- “Máy chủ gateway Mac Studio” so với “máy chạy gateway”
- “debounce cập nhật file” so với “tránh lập chỉ mục trên mỗi lần ghi”
- ID (
a828e60,b3b9895a...) - ký hiệu mã (
memorySearch.query.hybrid) - chuỗi lỗi (“sqlite-vec không khả dụng”)
Cách chúng tôi hợp nhất kết quả (thiết kế hiện tại)
Phác thảo triển khai:- Truy xuất một pool ứng viên từ cả hai bên:
- Vector: top
maxResults * candidateMultipliertheo cosine similarity. - BM25: top
maxResults * candidateMultipliertheo xếp hạng BM25 FTS5 (thấp hơn là tốt hơn).
- Chuyển đổi xếp hạng BM25 thành điểm 0..1-ish:
textScore = 1 / (1 + max(0, bm25Rank))
- Hợp nhất ứng viên theo id chunk và tính toán điểm có trọng số:
finalScore = vectorWeight * vectorScore + textWeight * textScore
vectorWeight+textWeightđược chuẩn hóa thành 1.0 trong giải quyết cấu hình, vì vậy trọng số hoạt động như phần trăm.- Nếu embedding không khả dụng (hoặc nhà cung cấp trả về một vector không), chúng tôi vẫn chạy BM25 và trả về các khớp từ khóa.
- Nếu FTS5 không thể được tạo, chúng tôi giữ tìm kiếm chỉ vector (không có lỗi nghiêm trọng).
Quy trình xử lý hậu kỳ
Sau khi hợp nhất điểm vector và từ khóa, hai giai đoạn xử lý hậu kỳ tùy chọn tinh chỉnh danh sách kết quả trước khi nó đến agent:MMR re-ranking (đa dạng)
Khi tìm kiếm kết hợp trả về kết quả, nhiều đoạn có thể chứa nội dung tương tự hoặc chồng chéo. Ví dụ, tìm kiếm “cài đặt mạng gia đình” có thể trả về năm đoạn gần như giống nhau từ các ghi chú hàng ngày khác nhau đều đề cập đến cùng một cấu hình router. MMR (Maximal Marginal Relevance) sắp xếp lại kết quả để cân bằng sự liên quan với đa dạng, đảm bảo các kết quả hàng đầu bao gồm các khía cạnh khác nhau của truy vấn thay vì lặp lại cùng một thông tin. Cách hoạt động:- Kết quả được chấm điểm theo sự liên quan ban đầu của chúng (điểm có trọng số vector + BM25).
- MMR chọn lặp lại các kết quả tối đa hóa:
lambda x relevance - (1-lambda) x max_similarity_to_selected. - Sự tương đồng giữa các kết quả được đo bằng sự tương đồng văn bản Jaccard trên nội dung đã được token hóa.
lambda kiểm soát sự đánh đổi:
lambda = 1.0— chỉ sự liên quan (không có hình phạt đa dạng)lambda = 0.0— đa dạng tối đa (bỏ qua sự liên quan)- Mặc định:
0.7(cân bằng, hơi thiên về sự liên quan)
memory_search trả về các đoạn trùng lặp hoặc gần như trùng lặp,
đặc biệt với các ghi chú hàng ngày thường lặp lại thông tin tương tự qua các ngày.
Suy giảm theo thời gian (tăng cường gần đây)
Các agent với ghi chú hàng ngày tích lũy hàng trăm file có ngày theo thời gian. Không có suy giảm, một ghi chú được viết tốt từ sáu tháng trước có thể vượt qua bản cập nhật hôm qua về cùng một chủ đề. Suy giảm theo thời gian áp dụng một hệ số nhân theo cấp số nhân cho điểm dựa trên tuổi của mỗi kết quả, vì vậy các ký ức gần đây tự nhiên xếp hạng cao hơn trong khi các ký ức cũ mờ dần:lambda = ln(2) / halfLifeDays.
Với thời gian bán rã mặc định là 30 ngày:
- Ghi chú hôm nay: 100% điểm gốc
- 7 ngày trước: ~84%
- 30 ngày trước: 50%
- 90 ngày trước: 12.5%
- 180 ngày trước: ~1.6%
MEMORY.md(file bộ nhớ gốc)- Các file không có ngày trong
memory/(ví dụ:memory/projects.md,memory/network.md) - Chúng chứa thông tin tham khảo bền vững nên luôn xếp hạng bình thường.
memory/YYYY-MM-DD.md) sử dụng ngày được trích xuất từ tên file.
Các nguồn khác (ví dụ: bản ghi phiên) quay lại thời gian sửa đổi file (mtime).
Ví dụ — truy vấn: “lịch làm việc của Rod là gì?”
Với các file bộ nhớ này (hôm nay là ngày 10 tháng 2):
Cấu hình tìm kiếm kết hợp
Cả hai tính năng được cấu hình dướimemorySearch.query.hybrid:
- Chỉ MMR — hữu ích khi bạn có nhiều ghi chú tương tự nhưng tuổi không quan trọng.
- Chỉ suy giảm theo thời gian — hữu ích khi gần đây quan trọng nhưng kết quả của bạn đã đa dạng.
- Cả hai — được khuyến nghị cho các agent có lịch sử ghi chú hàng ngày lớn, lâu dài.
Bộ nhớ đệm embedding
OpenClaw có thể lưu trữ chunk embeddings trong SQLite để việc lập chỉ mục lại và cập nhật thường xuyên (đặc biệt là bản ghi phiên) không cần phải re-embed văn bản không thay đổi. Cấu hình:Tìm kiếm bộ nhớ phiên (thử nghiệm)
Bạn có thể tùy chọn lập chỉ mục bản ghi phiên và hiển thị chúng quamemory_search.
Điều này được kiểm soát bởi một cờ thử nghiệm.
- Lập chỉ mục phiên là tùy chọn (tắt mặc định).
- Cập nhật phiên được debounce và lập chỉ mục không đồng bộ khi chúng vượt qua ngưỡng delta (nỗ lực tốt nhất).
memory_searchkhông bao giờ chặn lập chỉ mục; kết quả có thể hơi cũ cho đến khi đồng bộ nền hoàn thành.- Kết quả vẫn chỉ bao gồm các đoạn trích;
memory_getvẫn giới hạn ở các file bộ nhớ. - Lập chỉ mục phiên được cách ly theo agent (chỉ các bản ghi phiên của agent đó được lập chỉ mục).
- Bản ghi phiên sống trên đĩa (
~/.openclaw/agents/<agentId>/sessions/*.jsonl). Bất kỳ quy trình/người dùng nào có quyền truy cập hệ thống file đều có thể đọc chúng, vì vậy hãy coi quyền truy cập đĩa là ranh giới tin cậy. Để cách ly nghiêm ngặt hơn, chạy các agent dưới các người dùng hoặc máy chủ OS riêng biệt.
Tăng tốc vector SQLite (sqlite-vec)
Khi phần mở rộng sqlite-vec có sẵn, OpenClaw lưu trữ embedding trong một bảng ảo SQLite (vec0) và thực hiện các truy vấn khoảng cách vector trong
cơ sở dữ liệu. Điều này giữ cho tìm kiếm nhanh mà không cần tải mọi embedding vào JS.
Cấu hình (tùy chọn):
enabledmặc định là true; khi bị vô hiệu hóa, tìm kiếm quay lại với cosine similarity trong quá trình xử lý trên các embedding đã lưu trữ.- Nếu phần mở rộng sqlite-vec bị thiếu hoặc không tải được, OpenClaw ghi lại lỗi và tiếp tục với phương án dự phòng JS (không có bảng vector).
extensionPathghi đè đường dẫn sqlite-vec đi kèm (hữu ích cho các bản dựng tùy chỉnh hoặc vị trí cài đặt không chuẩn).
Tự động tải xuống embedding local
- Mô hình embedding local mặc định:
hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf(~0.6 GB). - Khi
memorySearch.provider = "local",node-llama-cppgiải quyếtmodelPath; nếu GGUF bị thiếu, nó tự động tải xuống vào cache (hoặclocal.modelCacheDirnếu được thiết lập), sau đó tải nó. Tải xuống tiếp tục khi thử lại. - Yêu cầu xây dựng native: chạy
pnpm approve-builds, chọnnode-llama-cpp, sau đópnpm rebuild node-llama-cpp. - Dự phòng: nếu thiết lập local thất bại và
memorySearch.fallback = "openai", chúng tôi tự động chuyển sang embedding từ xa (openai/text-embedding-3-smalltrừ khi được ghi đè) và ghi lại lý do.
Ví dụ endpoint tương thích OpenAI tùy chỉnh
remote.*có ưu tiên hơnmodels.providers.openai.*.remote.headershợp nhất với các header OpenAI; remote thắng trong các xung đột khóa. Bỏ quaremote.headersđể sử dụng mặc định của OpenAI.