ما هي txtai؟
txtai إطار عمل Python مفتوح المصدر (ترخيص Apache 2.0، github.com/neuml/txtai) للبحث الدلالي وتنسيق نماذج اللغة الكبيرة وسير عمل نماذج اللغة، بناه وتصونه NeuML. المكوّن الأساسي فيه هو قاعدة بيانات embeddings، ويصفها التوثيق الرسمي بأنها اتحاد بين فهارس متجهية (كثيفة ومتفرقة) وشبكات رسوم بيانية وقواعد بيانات علائقية ضمن كائن واحد.
- البحث المتجهي: تضمينات كثيفة ومتفرقة، وتصفية بلغة SQL، ونمذجة المواضيع، وتحليل الرسوم البيانية، وفهرسة متعددة الوسائط (نص، مستندات، صوت، صور، فيديو) ضمن فهرس واحد
- خطوط الأنابيب: أغلفة جاهزة حول نماذج اللغة لأداء مهام الإجابة عن الأسئلة والتلخيص والترجمة والنسخ الصوتي ووسم النصوص
- سير العمل: ربط عدة خطوط أنابيب في مهمة معالجة واحدة، من نص برمجي بسيط بخطوتين إلى معالجة دفعية متعددة النماذج
- الوكلاء: وكلاء مستقلون يجمعون بين التضمينات وخطوط الأنابيب وسير العمل لإنجاز مهام متعددة الخطوات، مبنيون على إطار عمل smolagents
- واجهات برمجة التطبيقات والروابط: خدمة REST/FastAPI إضافة إلى خادم Model Context Protocol (MCP)، مع روابط عميل للغات JavaScript وJava وRust وGo
- أكثر من 70 دفتر ملاحظات توضيحي يغطي إطار العمل بالكامل، ويُصان جنباً إلى جنب مع المكتبة الأساسية
كيف تعمل البنية المضمّنة في txtai؟
يحتفظ كائن Embeddings في txtai بفهرس المتجهات ومخزن البيانات الوصفية مباشرة داخل عملية Python، ويحفظ كليهما في ملفات محلية بدلاً من التواصل مع خدمة قاعدة بيانات منفصلة. بشكل افتراضي، يستخدم فهرس المتجهات محرك Faiss، وتُخزَّن البيانات الوصفية للمحتوى في ملف SQLite محلي — وهو نفس نموذج "التضمين داخل عملية التطبيق" الذي تعتمده SQLite نفسها، بخلاف نموذج العميل/الخادم الذي تعتمده PostgreSQL.
- محرك ANN (إعداد
backend): الافتراضي هو Faiss؛ وتُدعم HNSW وAnnoy وpgvector كبدائل قابلة للاستبدال دون تغيير باقي الكود - تخزين المحتوى (إعداد
content): الافتراضي عند التفعيل هو SQLite؛ ويُدعم أيضاً DuckDB أو قاعدة بيانات عميل/خادم عبر رابط اتصال للفرق التي تتجاوز ملفاً واحداً - تخزين الكائنات: تخزين ثنائي اختياري للصور أو الكائنات المسلسلة (pickle) العشوائية، مبني فوق فهرس embeddings نفسه
- الاستمرارية: تكتب
embeddings.save(path)الفهرس وقاعدة البيانات على القرص كدليل قابل للنقل، وتعيدembeddings.load(path)فتحه في عملية جديدة دون خطوة استيراد/تصدير - لا توجد عملية خادم يجب تشغيلها أو مراقبتها أو تصحيحها — يعيش الفهرس ويزول مع عملية التطبيق نفسها، تماماً كما تفعل ذاكرة تخزين مؤقت في الذاكرة أو قائمة على الملفات
ما الفرق بين txtai وقاعدة بيانات متجهية مستقلة؟
تعمل Chroma وQdrant وWeaviate وMilvus عادةً كخدمة مستقلة — حاوية أو نقطة نهاية مُدارة يتصل بها التطبيق عبر الشبكة. أما txtai فتعمل داخل العملية المستدعية نفسها، بشكل يشبه الفرق بين SQLite وPostgreSQL: لا سلسلة اتصال، ولا عملية منفصلة يجب إبقاؤها حية، ولا قفزة شبكية بين الكود والفهرس.
ما تكسبه من تضمين قاعدة البيانات
لا توجد بنية تحتية يجب توفيرها — لا حاوية Docker، ولا نقطة نهاية سحابية مُدارة، ولا تجميع اتصالات. يتلخّص النشر في نسخ دليل واحد. بالنسبة للتطبيقات ذات العقدة الواحدة وأدوات سطر الأوامر وتطبيقات سطح المكتب والنماذج الأولية، يزيل هذا سطحاً تشغيلياً كاملاً (وقت التشغيل، المصادقة، زمن استجابة الشبكة) تفرضه قاعدة بيانات متجهية مستقلة حتى على نطاق صغير.
ما تتنازل عنه مقابل ذلك
يمكن الاستعلام عن خدمة قاعدة بيانات متجهية مستقلة من عمليات مستقلة متعددة في الوقت نفسه، وتوسيعها أفقياً عبر عدة أجهزة، وإدارتها بأدوات تشغيلية مخصصة (نسخ احتياطية، نسخ متماثلة، ضبط صلاحيات الوصول) منفصلة عن دورة حياة أي تطبيق بعينه. أما الفهرس المضمّن فيقتصر على العملية التي فتحته — والكتابة المتزامنة من عمليات متعددة ليست حالة الاستخدام الافتراضية، والمجموعات الضخمة جداً التي تحتاج إلى التوزع عبر عُقد متعددة تتجاوز ما يمكن أن يتحمّله فهرس ذو ملف واحد.
📌ملاحظة: توفّر Chroma أيضاً وضعاً مضمّناً للنماذج الأولية، لكن مسارها الإنتاجي يقود إلى خادم. لا تملك txtai وضعاً إنتاجياً منفصلاً تتطور نحوه — التضمين هو البنية الوحيدة التي تقدّمها.
هل تدعم txtai تقنية RAG والوكلاء الذكيين؟
نعم — يُعد التوليد المعزز بالاسترجاع (RAG) والوكلاء المستقلون من حالات الاستخدام الأساسية في txtai، وليسا ميزات مُضافة فوق مخزن متجهات.
- RAG: يجمع خط أنابيب
RAGبين فهرسEmbeddingsونموذج لغة كبير، فيسترجع المقاطع ذات الصلة بالاستعلام ويولّد إجابة مع استشهاد بالمصادر — يصف التوثيق الرسمي لـ txtai تقنية RAG بأنها "أكثر من مجرد بحث متجهي"، إذ تدعم أيضاً استرجاع السياق من الويب وSQL - الوكلاء: مبنية على إطار عمل smolagents من Hugging Face، وتربط وكلاء txtai بين التضمينات وخطوط الأنابيب وسير العمل ووكلاء آخرين لإنجاز مهام متعددة الخطوات بشكل مستقل؛ كما تُدعم صياغة أوامر الوكلاء عبر ملفات
agents.mdوskill.md - سير العمل: يمكن ربط خطوط الأنابيب في مهام خطية أو متفرعة — مثل استخراج نص وتقسيمه إلى أجزاء وتضمينه ثم تلخيص كل جزء — دون كتابة كود الربط يدوياً
- رسوم المعرفة البيانية: يمكن لاستخراج الكيانات المدفوع بنموذج اللغة الكبير بناء رسم بياني دلالي فوق فهرس embeddings، ما يضيف تحليل العلاقات إلى البحث بالتشابه البسيط
ما نماذج اللغة الكبيرة التي يمكن استخدامها مع txtai؟
تدعم txtai النماذج المحلية والنماذج المعتمدة على واجهة برمجة التطبيقات عبر واجهتَي خط الأنابيب نفسيهما LLM وRAG — والتبديل بينهما تغيير في الإعدادات وليس إعادة كتابة للكود.
المسار | النوع | ملاحظة |
|---|---|---|
| Hugging Face Transformers | محلي | أي نموذج لغة سببي من Hugging Face Hub أو مسار محلي |
| llama.cpp | محلي | نماذج مكمَّمة بصيغة GGUF، على المعالج أو بطاقة الرسوميات |
| Ollama | محلي | يشير إلى خادم Ollama قيد التشغيل |
| vLLM | محلي / مُستضاف ذاتياً | خادم استدلال عالي الإنتاجية للإنتاج |
| LiteLLM | واجهة برمجة تطبيقات | يوجّه إلى OpenAI وAnthropic Claude وAWS Bedrock وغيرها |
يحمّل مثال البدء السريع لـ RAG في txtai نموذج Hugging Face عبر مسار نصي (مثل Qwen/Qwen3-0.6B) مباشرة في خط أنابيب RAG إلى جانب فهرس embeddings — ولا حاجة إلى خادم نموذج لغة منفصل ما لم يُختَر تشغيل واحد لأسباب متعلقة بالإنتاجية.
كيف تُعِدّ txtai؟
يتطلب تشغيل فهرس بحث دلالي عاملاً أمرَ pip install وبضعة أسطر من Python — دون حاوية يجب إعدادها مسبقاً.
- 1ثبِّت Python 3.10 أو أحدث، ثم ثبِّت الحزمة:
pip install txtai. استخدم `pip install "txtai[pipeline-data]"` إذا احتجت أيضاً إلى استخراج المستندات (PDF وDOCX وHTML) لتقنية RAG. - 2أنشئ فهرس embeddings في نص Python برمجي:
import txtaiثمembeddings = txtai.Embeddings(). - 3فهرِس قائمة من المستندات: `embeddings.index(["Correct", "Not what we hoped"])
. يضيف كل استدعاء نصاً (أو أزواجاً(id, text)` لمجموعات البيانات الأكبر) إلى الفهرس على القرص. - 4نفِّذ بحثاً دلالياً: تُعيد
embeddings.search("positive", 1)أقرب النتائج من حيث المعنى، وليس من حيث تطابق الكلمات المفتاحية. - 5اجعل الفهرس دائماً لإعادة استخدامه: تكتب
embeddings.save("index_path")الفهرس على القرص؛ وأعِد فتحه لاحقاً بـembeddings.load("index_path")— دون الحاجة إلى إعادة الفهرسة بين مرات التشغيل. - 6لواجهة برمجة تطبيقات عبر الويب بدلاً من نص برمجي مضمّن: عرّف ملف
app.ymlبسيطاً يحدد نموذجembeddings.path، ثم شغّله بالأمرCONFIG=app.yml uvicorn "txtai.api:app"واستعلم عنه عبر HTTP باستخدامcurl.
import txtai
# إنشاء فهرس embeddings (الافتراضي: Faiss + تخزين محلي)
embeddings = txtai.Embeddings()
# فهرسة النص — يصبح كل سلسلة نصية عنصراً قابلاً للبحث
embeddings.index(["Correct", "Not what we hoped"])
# بحث دلالي — يجد المعنى وليس مجرد تطابق الكلمات المفتاحية
results = embeddings.search("positive", 1)
print(results) # [(0, 0.298...)] — الفهرس 0 ("Correct") هو الأقرب
# الحفظ على القرص لإعادة الاستخدام بعد إعادة تشغيل العملية
embeddings.save("index_path")هل يحتاج المثال الأدنى لـ txtai إلى بطاقة رسوميات؟
لا. يعمل كل من نموذج التضمين الافتراضي (sentence-transformers/all-MiniLM-L6-v2) ومحرك ANN من نوع Faiss على المعالج المركزي. تُسرّع بطاقة الرسوميات توليد التضمينات واستدلال نموذج اللغة الكبير في نطاق أوسع، لكنها ليست ضرورية لتنفيذ هذا الإعداد.
كيف تضيف التوليد المعزز بالاسترجاع إلى هذا الإعداد؟
مرِّر الكائن نفسه Embeddings إلى خط أنابيب txtai.RAG مع نموذج لغة كبير محلي أو معتمد على واجهة برمجة تطبيقات: rag = txtai.RAG(embeddings, "model-name")، ثم استدعِ rag("سؤالك"). يتولى خط الأنابيب عملية الاسترجاع وبناء المُوجِّه (prompt).
لمن تناسب txtai؟
استخدم txtai إذا أردت اعتمادية Python واحدة للبحث وRAG والوكلاء دون بنية تحتية يجب تشغيلها — وتجنّبها إذا احتجت إلى مخزن متجهات قابل للتوسع أفقياً لخدمة تطبيقات مستقلة كثيرة.
استخدم txtai إذا
- كنت تبني تطبيق Python ذا عقدة واحدة، أو أداة سطر أوامر، أو تطبيق سطح مكتب، وتريد بحثاً متجهياً دون نشر خدمة قاعدة بيانات
- أردت أن يأتي RAG والوكلاء وسير العمل متعدد النماذج من حزمة واحدة، بدلاً من الجمع بين قاعدة بيانات متجهية وإطار عمل تنسيق منفصل
- كانت مجموعة بياناتك تسع بارتياح على جهاز واحد — من بضعة آلاف إلى ملايين قليلة من المتجهات حسب البُعد والذاكرة العشوائية المتاحة
- كانت الأولوية للنموذج الأولي، ويمكن تأجيل قرار "أي خدمة قاعدة بيانات متجهية يجب نشرها" حتى يثبت المشروع جدواه
تجنّب txtai إذا
- احتجت إلى مخزن متجهات يُستعلم عنه في الوقت نفسه من خدمات أو تطبيقات مستقلة كثيرة — تلك مهمة قاعدة بيانات عميل/خادم وليست مضمّنة
- وجب توزيع مجموعتك عبر عدة أجهزة لأنها تتجاوز ما يمكن أن تحمله عقدة واحدة في الذاكرة أو على القرص
- أردت أداة إنشاء سير عمل مرئية بلا كود — فـ txtai مكتبة Python أولويتها الكود، دون لوحة سحب وإفلات
- احتجت إلى ضمانات خدمة مُدارة (اتفاقية مستوى خدمة، أدوات تشغيلية مخصصة، ضبط صلاحيات وصول منفصل عن التطبيق) لا يوفرها اليوم سوى مزوّد قاعدة بيانات متجهية مُستضافة
📌ملاحظة: الخلاصة النهائية: اختر txtai عندما يكون القيد "تطبيق Python واحد، جهاز واحد، أقل تشغيل ممكن". واختر قاعدة بيانات متجهية مستقلة (Qdrant أو Weaviate أو Milvus) عندما يكون القيد "خدمات كثيرة يجب أن تستعلم عن الفهرس نفسه، على نطاق واسع، منذ اليوم الأول".
txtai مقابل Chroma وQdrant وLlamaIndex
تحل هذه الأدوات الأربع مشكلات متداخلة لكنها متمايزة: تحمل txtai وChroma كلتاهما مخزن متجهات، أما Qdrant فخدمة قاعدة بيانات مخصصة، وLlamaIndex إطار عمل تنسيق دون مخزن خاص به.
الأداة | البنية | النشر | الترخيص | الأنسب لـ |
|---|---|---|---|---|
| txtai | قاعدة بيانات متجهية مضمّنة + RAG/وكلاء | In-process، دون خادم | Apache 2.0 | RAG ووكلاء Python في حزمة واحدة |
| Chroma | قاعدة بيانات متجهية | وضع مضمّن أو خادم | Apache 2.0 | مخزن متجهات بسيط للنماذج الأولية |
| Qdrant | قاعدة بيانات متجهية | خادم (Docker/سحابة) | Apache 2.0 | بحث إنتاجي متعدد العملاء وواسع النطاق |
| LlamaIndex | إطار عمل RAG/تنسيق | يحتاج مخزناً متجهياً خارجياً | MIT | موصلات بيانات فوق أي قاعدة بيانات متجهية |
أخطاء شائعة عند تقييم txtai
تنشأ هذه الأخطاء من تطبيق افتراضات خاصة بقواعد البيانات المتجهية القائمة على الخادم على مكتبة ذات نموذج نشر مختلف جوهرياً.
الخطأ الأول: توقع أن تتوسع txtai كقاعدة بيانات متجهية مُستضافة بشكل افتراضي
يرتبط فهرس Faiss/SQLite المضمّن بالعملية والجهاز اللذين فتحاه. إذا كانت الخطة تقضي بأن تستعلم نُسخ تطبيق كثيرة عن فهرس مشترك ومتنامٍ في الوقت نفسه، فإن ذلك يتطلب إما خلفية محتوى عميل/خادم (content: client مع رابط اتصال) أو الانتقال إلى خدمة قاعدة بيانات متجهية مخصصة — لا الوضع المضمّن الافتراضي.
الخطأ الثاني: التعامل مع txtai باعتبارها "مجرد" قاعدة بيانات متجهية
يؤدي تقييم txtai بناءً على جودة بحث ANN وحدها إلى إغفال معظم ما تقدّمه الحزمة. تُعد خطوط الأنابيب وسير العمل والوكلاء وبناء رسوم المعرفة البيانية وحدات أساسية لا إضافات — والمقارنة العادلة تزنها أيضاً مقابل تجميع قاعدة بيانات متجهية بشكل منفصل مع LangChain أو LlamaIndex أو إطار عمل مشابه.
الخطأ الثالث: افتراض أن NeuML تبيع بالفعل نسخة مُستضافة
لا تحمل المكتبة مفتوحة المصدر أي رسوم ترخيص. تقدّم NeuML استشارات مدفوعة حول منظومة txtai، وتعمل وفق توثيقها الرسمي على تطوير منتج استضافة منفصل باسم txtai.cloud — لكن هذا المنتج، وقت كتابة هذه المراجعة، لا يزال قيد التطوير، وليس منتجاً جاهزاً ومسعّراً يمكن تقييمه.
الأسئلة الشائعة
هل txtai مجانية الاستخدام؟
نعم. txtai مفتوحة المصدر بترخيص Apache 2.0 دون حد للاستخدام أو رسوم ترخيص للمكتبة نفسها. تبيع NeuML، الشركة التي تصونها، استشارات مدفوعة في الذكاء الاصطناعي، وتطوّر بشكل منفصل منتج استضافة باسم txtai.cloud لا يزال قيد التطوير وقت كتابة هذا المقال.
هل تحتاج txtai إلى خادم قاعدة بيانات منفصل؟
لا. تُضمّن txtai فهرس المتجهات ومخزن البيانات الوصفية مباشرة داخل عملية Python — والافتراضي فهرس Faiss من نوع ANN مع ملف SQLite، ويُحفظ كلاهما كملفات محلية دون أي عملية خادم يجب نشرها أو مراقبتها.
ما محركات ANN التي تدعمها txtai إلى جانب Faiss؟
Faiss هو المحرك الافتراضي. تدعم txtai أيضاً HNSW وAnnoy وpgvector (إضافة إلى محركات أخرى عبر حزمة ann الإضافية)، ويمكن ضبطها عبر إعداد backend دون تغيير كود التطبيق.
ما الفرق بين txtai وChroma؟
تحمل كلتاهما مخزن متجهات مضمّناً، لكن مسار الإنتاج المعتاد لـ Chroma هو العمل كخادم، بينما لا تملك txtai وضع خادم منفصل تتطور نحوه — كما تجمع txtai خطوط أنابيب RAG والوكلاء وسير العمل متعدد النماذج في الحزمة نفسها، وهو ما لا تفعله Chroma.
ما الفرق بين txtai وQdrant؟
Qdrant خدمة قاعدة بيانات متجهية مخصصة، مصممة للعمل كعملية مستقلة (عبر Docker أو نقطة نهاية سحابية مُدارة) ولاستقبال استعلامات من عملاء كثيرين في الوقت نفسه. تعمل txtai مضمّنة داخل عملية تطبيق واحدة، مستبدلة تلك التزامنية والتوسع الأفقي بانعدام أي عبء نشر.
هل تدعم txtai التوليد المعزز بالاسترجاع (RAG)؟
نعم. يجمع خط أنابيب RAG بين فهرس Embeddings ونموذج لغة كبير محلي أو معتمد على واجهة برمجة تطبيقات، فيسترجع المقاطع ذات الصلة بالاستعلام ويولّد إجابة مع استشهاد — يقدّم توثيق txtai الرسمي تقنية RAG على أنها أكثر من بحث متجهي، وتشمل استرجاع سياق من الويب وSQL.
هل يمكن لـ txtai استخدام نماذج لغة محلية بدلاً من واجهة برمجة تطبيقات سحابية؟
نعم. تحمّل txtai النماذج عبر Hugging Face Transformers وllama.cpp (بصيغة GGUF) وOllama أو vLLM لاستدلال محلي بالكامل، أو توجّه عبر LiteLLM إلى OpenAI أو Anthropic Claude أو AWS Bedrock عند تفضيل نموذج معتمد على واجهة برمجة تطبيقات — وتغطي واجهة خط الأنابيب نفسها LLM/RAG كلتا الحالتين.
هل تدعم txtai الوكلاء الذكيين؟
نعم، وهي مبنية على إطار عمل smolagents من Hugging Face. تربط وكلاء txtai بين التضمينات وخطوط الأنابيب وسير العمل لإنجاز مهام متعددة الخطوات بشكل مستقل، وتدعم اتفاقيات صياغة أوامر الوكلاء مثل agents.md وskill.md.
بأي ترخيص تُنشر txtai؟
ترخيص Apache 2.0، الذي يسمح بالاستخدام التجاري والتعديل وإعادة التوزيع دون أي إتاوات — وهو نفس الترخيص المتساهل الذي تستخدمه Chroma وQdrant.
من يصون txtai؟
تطوّر txtai وتصونها شركة NeuML، التي أسسها David Mezzetti. تقدّم NeuML، إلى جانب صيانة المكتبة مفتوحة المصدر، استشارات مدفوعة في الذكاء الاصطناعي حول منظومة txtai.
هل يمكن لـ txtai التعامل مع مجموعات بيانات ضخمة لا تسع على جهاز واحد؟
ليس في وضعها المضمّن الافتراضي. يقتصر فهرس Faiss/SQLite ذو الملف الواحد على الجهاز الذي يحمله. أما مجموعات البيانات التي يجب توزيعها عبر عُقد متعددة، أو التي تحتاج إلى استعلام خدمات مستقلة كثيرة عن فهرس مشترك في الوقت نفسه، فهي أنسب لقاعدة بيانات متجهية مخصصة وقابلة للتوسع أفقياً.
هل txtai خيار جيد لأول نموذج أولي لـ RAG؟
نعم، خصوصاً لمطور Python — إذ تُثبَّت المنظومة بأكملها (الفهرس، وخط أنابيب RAG، ونموذج لغة كبير اختيارياً) بأمر واحد pip install txtai وتعمل ضمن نص برمجي واحد، دون الحاجة إلى إعداد حاوية قاعدة بيانات قبل كتابة أول سطر من منطق التطبيق.
