تخطَّ إلى المحتوى

اختيار / إعداد التضمينات

تشغّل التضمينات البحث بالتشابه للذكريات وملف المستخدم. أعدها في نفس الملف (~/.config/opencode/opencode-mem.jsonc). لا توجد خلفية MLX — التضمينات المحلية تستخدم @huggingface/transformers مع ONNX، وليس Apple MLX.

محلي (الافتراضي): عيّن فقط embeddingModel. عند أول استخدام يُنزَّل النموذج من Hugging Face ويُخزَّن مؤقتًا تحت {storagePath}/.cache (الافتراضي ~/.opencode-mem/data/.cache).

بعيد (متوافق مع OpenAI): عيّن كلًا من embeddingApiUrl وembeddingApiKey. يستدعي المكون الإضافي حينها {embeddingApiUrl}/embeddings برمز Bearer. يقبل embeddingApiKey نفس صيغ الأسرار التي يقبلها memoryApiKey (literal، env://…، file://…).

المفتاح الدور
embeddingModel معرّف Hugging Face (محلي) أو اسم نموذج API (بعيد). الافتراضي: Xenova/nomic-embed-text-v1
embeddingDimensions تجاوز اختياري؛ عادة احذفه — تُستمد الأبعاد من خريطة مدمجة
embeddingPooling تجميع محلي: "mean" (الافتراضي)، "cls"، أو "last_token". غير معيَّن → إعداد مسبق لنموذج معروف صغير أو "mean"
embeddingQueryPrefix بادئة لتضمينات مهمة الاستعلام. غير معيَّن → إعداد مسبق للنموذج أو Nomic عندما يكون embeddingUseTaskPrefixes صحيحًا. "" صريح يعطّل
embeddingDocumentPrefix بادئة لتضمينات مهمة المستند (نفس قواعد الحل مثل embeddingQueryPrefix)
embeddingUseTaskPrefixes الاشتراك الاختياري في بادئات Nomic search_query: / search_document: عندما تكون البادئات المخصصة/المسبقة غير معيَّنة. الافتراضي false
embeddingDtype تجاوز اختياري لنوع بيانات ONNX المحلي (مثل "q8"، "fp32"). عند التعيين، يُمرَّر إلى transformers.js pipeline({ dtype })
embeddingApiUrl عنوان URL الأساسي لـ API تضمينات متوافق مع OpenAI (بدون مسار لاحق بعد /v1)
embeddingApiKey مفتاح API لتلك النقطة (مطلوب مع embeddingApiUrl)

النماذج المحلية الموصى بها:

النموذج الأبعاد ملاحظات
Xenova/nomic-embed-text-v1 768 الافتراضي؛ متعدد اللغات، سياق 8192؛ تجميع mean
Xenova/jina-embeddings-v2-base-en 768 إنجليزي فقط، سياق 8192
Xenova/jina-embeddings-v2-small-en 512 أسرع، سياق 8192
Xenova/all-MiniLM-L6-v2 384 سريع جدًا، سياق 512
Xenova/all-mpnet-base-v2 768 جودة جيدة، سياق 512
Xenova/bge-m3 1024 متعدد اللغات؛ تجميع CLS تلقائي
intfloat/multilingual-e5-large 1024 بادئات query: / passage: تلقائية

مثال — تضمينات OpenAI البعيدة:

{
"embeddingApiUrl": "https://api.openai.com/v1",
"embeddingApiKey": "env://OPENAI_API_KEY",
"embeddingModel": "text-embedding-3-small",
}

مثال — bge-m3 محلي (التجميع الافتراضي CLS عبر الإعداد المسبق؛ تجاوز عند الحاجة):

{
"embeddingModel": "Xenova/bge-m3",
// "embeddingPooling": "cls",
// "embeddingDtype": "q8",
}

تغيير embeddingModel أو الأبعاد أو التجميع أو بادئات المهام قد يتطلب إعادة تضمين الذكريات المخزّنة حتى تبقى متجهات التخزين والاستعلام متوافقة. فضّل اختيار نموذج (وإعدادات التجميع/البادئة) مرة واحدة والالتزام بها لمجلد بيانات معيّن.

غير مدعوم — Intel Mac (darwin/x64): يتطلب الاستمرار المحلي @tursodatabase/database، الذي لا ينشر ربطًا أصليًا لـ Intel Mac. إصدارات onnxruntime-node الثابتة (1.24.1+، بما في ذلك المثبّت 1.31.1) تفتقر أيضًا إلى darwin/x64. استخدم Mac بـ Apple Silicon أو Linux أو Windows، أو نقطة نهاية بعيدة عبر embeddingApiUrl + embeddingApiKey (المثال أعلاه). على المنصات المدعومة، يثبّت opencode-mem onnxruntime-node@1.31.1 (إصلاح تفكيك Ort::Env من 1.24.1 / #225) ويحمّل transformers عبر جسر حل CJS حتى تحافظ تثبيتات OpenCode المتداخلة على ذلك الربط. يُحل Transformers إلى مسار مطلق قبل تثبيت ذلك الجسر حتى لا يفشل مضيف OpenCode Bun --compile بـ Cannot find module '@huggingface/transformers' from ''. بعد الترقية، امسح ذاكرة التخزين المؤقت المتداخلة للمكون الإضافي في OpenCode (~/.cache/opencode/packages/opencode-mem@*) وأعد التثبيت.