كروما هو قاعدة بيانات بيانات نصية مفتوحة المصدر تستخدم تقنية البحث عن التشابه النصي لتخزين واسترجاع البيانات النصية ذات الأبعاد العالية على نطاق واسع بكفاءة.
كروما هي قاعدة بيانات مضمنة في التطبيق وتُضمن في شفيرتنا على شكل حزمة. ميزتها تكمن في بساطتها. إذا كنت تطوّر تطبيق LLM الذي يحتاج إلى قاعدة بيانات نصية لتنفيذ ذاكرة LLM ودعم البحث اللغوي المتشابه بالنص دون رغبة في تثبيت قاعدة بيانات نصية مستقلة، فإن كروما خيار جيد. يعتمد هذا البرنامج التعليمي بشكل أساسي على JavaScript.
1. تثبيت الحزمة
npm install --save chromadb # yarn add chromadb
2. تهيئة عميل كروما
const {ChromaClient} = require('chromadb');
const client = new ChromaClient();
3. إنشاء مجموعة
المجموعة في قاعدة بيانات كروما مشابهة للجدول في Mysql، حيث يتم تخزين بيانات النص النصي (بما في ذلك الوثائق والبيانات الأخرى) فيها. يتم إنشاء مجموعة على النحو التالي:
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "your_api_key"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})
هنا، يتم استخدام نموذج تضمين نصي من OpenAI لحساب متجهات النصوص، لذا يجب عليك توفير مفتاح واجهة برمجة التطبيقات الخاص بك من OpenAI. بالطبع، يمكنك أيضًا تجاهل معلمة embeddingFunction واستخدام النموذج المدمج في كروما لحساب المتجهات، أو استبداله بنموذج تضمين نصي آخر مفتوح المصدر.
4. إضافة البيانات
بعد تحديد مجموعة، يتم إضافة البيانات إليها، وستقوم كروما بتخزين بياناتنا وإنشاء فهرس متجه مخصص بناءً على متجهات بيانات النصوص لسهولة الاستعلام فيما بعد.
await collection.add({
ids: ["id1", "id2"],
metadatas: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["هذه وثيقة", "هذه وثيقة أخرى"],
})
استخدام متجهات النص المحسوبة مسبقًا، دون استخدام وظيفة التضمين المدمجة في كروما لحساب:
await collection.add({
ids: ["id1", "id2"],
embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
where: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["هذه وثيقة", "هذه وثيقة أخرى"]
})
5. استعلام بيانات المجموعة
بناءً على النصوص المحددة للاستعلام، ستقوم كروما بإرجاع النتائج الأكثر تشابهًا nResults.
const results = await collection.query({
nResults: 2,
queryTexts: ["هذه وثيقة استعلام"]
})