الموقع | التوثيق | العروض التوضيحية | الخطاب | مجتمع سلاك | ماركو كلاود
Marqo هي أكثر من مجرد قاعدة بيانات متجهة، إنها محرك بحث متجه شامل لكل من النصوص والصور. يتم التعامل مع إنشاء المتجهات وتخزينها واسترجاعها خارج الصندوق من خلال واجهة برمجة تطبيقات واحدة. لا حاجة لإحضار التضمينات الخاصة بك.
لماذا ماركو؟
إن تشابه المتجهات وحده لا يكفي للبحث عن المتجهات. يتطلب البحث المتجه أكثر من مجرد قاعدة بيانات متجهة - فهو يتطلب أيضًا نشر وإدارة التعلم الآلي (ML) والمعالجة المسبقة وتحويلات المدخلات بالإضافة إلى القدرة على تعديل سلوك البحث دون إعادة تدريب النموذج. يحتوي Marqo على كل هذه الأجزاء، مما يمكّن المطورين من إنشاء بحث متجه في تطبيقاتهم بأقل جهد. يمكن العثور على قائمة كاملة بالميزات أدناه.
لماذا يتم إنشاء حزمة التضمين مع البحث المتجه؟
قواعد بيانات المتجهات هي مكونات متخصصة لتشابه المتجهات وتخدم مكونًا واحدًا فقط من نظام بحث المتجهات. إنهم "ناقلات للداخل - متجهات للخارج". لا تزال تتطلب إنتاج المتجهات وإدارة نماذج تعلم الآلة والتنسيق المرتبط بها ومعالجة المدخلات. يجعل Marqo هذا الأمر سهلاً من خلال "إدخال المستندات وإخراج المستندات". يعتني Marqo بالمعالجة المسبقة للنصوص والصور، وتضمين المحتوى، وتخزين البيانات الوصفية، ونشر الاستدلال والتخزين.
بداية سريعة
فيما يلي مقتطف من التعليمات البرمجية للحصول على مثال مبسط للبحث المتجه باستخدام Marqo (راجع الخطوات الأولى):
ماركو يتطلب دوكر. لتثبيت Docker، انتقل إلى موقع Docker الرسمي. تأكد من أن عامل الإرساء يحتوي على ذاكرة بسعة 8 جيجابايت على الأقل ومساحة تخزين تبلغ 50 جيجابايت. في Docker لسطح المكتب، يمكنك القيام بذلك عن طريق النقر على أيقونة الإعدادات، ثم الموارد، واختيار ذاكرة سعة 8 جيجابايت.
استخدم عامل الإرساء لتشغيل Marqo:
docker rm -f marqo
docker pull marqoai/marqo:latest
docker run --name marqo -it -p 8882:8882 marqoai/marqo:latest
pip install marqo
import marqo
mq = marqo . Client ( url = 'http://localhost:8882' )
mq . create_index ( "my-first-index" , model = "hf/e5-base-v2" )
mq . index ( "my-first-index" ). add_documents ([
{
"Title" : "The Travels of Marco Polo" ,
"Description" : "A 13th-century travelogue describing Polo's travels"
},
{
"Title" : "Extravehicular Mobility Unit (EMU)" ,
"Description" : "The EMU is a spacesuit that provides environmental protection, "
"mobility, life support, and communications for astronauts" ,
"_id" : "article_591"
}],
tensor_fields = [ "Description" ]
)
results = mq . index ( "my-first-index" ). search (
q = "What is the best outfit to wear on the moon?"
)
؟ أحدث التضمينات
⚡ الأداء
؟ المستندات داخل المستندات خارج
؟ السحابة المُدارة
تم دمج Marqo في أطر عمل الذكاء الاصطناعي ومعالجة البيانات الشائعة، وهناك المزيد في الطريق.
؟ كومة قش
Haystack هو إطار عمل مفتوح المصدر لبناء التطبيقات التي تستخدم تقنية البرمجة اللغوية العصبية (NLP) مثل LLMs ونماذج التضمين والمزيد. يتيح لك هذا التكامل استخدام Marqo كمخزن المستندات الخاص بك لخطوط أنابيب Haystack مثل زيادة الاسترجاع والإجابة على الأسئلة والبحث في المستندات والمزيد.
؟ شريط الإمساك
يتيح Griptape النشر الآمن والموثوق للوكلاء المعتمدين على LLM لتطبيقات المؤسسات، ويمنح MarqoVectorStoreDriver هؤلاء الوكلاء إمكانية الوصول إلى بحث قابل للتطوير باستخدام بياناتك الخاصة. يتيح لك هذا التكامل الاستفادة من النماذج مفتوحة المصدر أو النماذج المخصصة المضبوطة بدقة من خلال Marqo لتقديم النتائج ذات الصلة إلى LLMs الخاص بك.
؟؟ لانجشين
يتيح لك هذا التكامل الاستفادة من النماذج مفتوحة المصدر أو النماذج المخصصة التي تم ضبطها بدقة من خلال تطبيقات Marqo for LangChain مع مكون بحث متجه. يمكن توصيل تطبيق متجر Marqo Vector Store بالسلاسل الموجودة مثل Retrieval QA وConversational Retrieval QA.
⋙ هاملتون
يتيح لك هذا التكامل الاستفادة من النماذج مفتوحة المصدر أو المخصصة التي تم ضبطها بدقة من خلال تطبيقات Marqo for Hamilton LLM.
؟ بداية سريعة | أنشئ تطبيقك الأول باستخدام Marqo في أقل من 5 دقائق. |
؟ ماركو لبيانات الصورة | إنشاء بحث متقدم عن الصور باستخدام Marqo. |
ماركو للنص | بناء قاعدة بيانات متعددة اللغات في ماركو. |
؟ دمج ماركو مع GPT | جعل GPT خبيرًا في الموضوع باستخدام Marqo كقاعدة معرفية. |
؟ ماركو للذكاء الاصطناعي الإبداعي | الجمع بين الانتشار المستقر والبحث الدلالي لإنشاء وتصنيف 100 ألف صورة للنقانق المقلية. |
؟ ماركو وبيانات الكلام | أضف التدوين والنسخ إلى المعالجة المسبقة للصوت للأسئلة والأجوبة باستخدام Marqo وChatGPT. |
ماركو للإشراف على المحتوى | إنشاء بحث متقدم عن الصور باستخدام Marqo للعثور على المحتوى وإزالته. |
☁️ البدء مع Marqo Cloud | تعرف على كيفية الإعداد والتشغيل مع Marqo Cloud بدءًا من تسجيل الدخول لأول مرة وحتى إنشاء أول تطبيق لك باستخدام Marqo |
؟ ماركو للتجارة الإلكترونية | هذا المشروع عبارة عن تطبيق ويب ذو واجهة أمامية وخلفية باستخدام Python وFlask وReactJS وTypescript. الواجهة الأمامية هي تطبيق ReactJS الذي يقدم طلبات إلى الواجهة الخلفية وهو تطبيق Flask. تقوم الواجهة الخلفية بتقديم طلبات إلى Marqo cloud API الخاص بك. |
؟ ماركو الشات بوت | في هذا الدليل، سنقوم ببناء تطبيق روبوت للدردشة باستخدام واجهة برمجة تطبيقات ChatGPT الخاصة بـ Marqo وOpenAI. سنبدأ بقاعدة التعليمات البرمجية الموجودة ثم نتعرف على كيفية تخصيص السلوك. |
؟ سمات | ميزات ماركو الأساسية. |
ماركو يتطلب دوكر. لتثبيت Docker، انتقل إلى موقع Docker الرسمي. تأكد من أن عامل الإرساء يحتوي على ذاكرة بسعة 8 جيجابايت على الأقل ومساحة تخزين تبلغ 50 جيجابايت.
استخدم عامل الإرساء لتشغيل Marqo:
docker rm -f marqo
docker pull marqoai/marqo:latest
docker run --name marqo -p 8882:8882 marqoai/marqo:latest
ملاحظة: إذا استمرت حاوية marqo
الخاصة بك في التوقف، فمن المرجح أن يكون ذلك بسبب نقص الذاكرة المخصصة لـ Docker. قد تؤدي زيادة حد ذاكرة Docker إلى 6 جيجابايت على الأقل (يوصى بـ 8 جيجابايت) في إعدادات Docker إلى حل المشكلة.
pip install marqo
import marqo
mq = marqo . Client ( url = 'http://localhost:8882' )
mq . create_index ( "my-first-index" )
mq . index ( "my-first-index" ). add_documents ([
{
"Title" : "The Travels of Marco Polo" ,
"Description" : "A 13th-century travelogue describing Polo's travels"
},
{
"Title" : "Extravehicular Mobility Unit (EMU)" ,
"Description" : "The EMU is a spacesuit that provides environmental protection, "
"mobility, life support, and communications for astronauts" ,
"_id" : "article_591"
}],
tensor_fields = [ "Description" ]
)
results = mq . index ( "my-first-index" ). search (
q = "What is the best outfit to wear on the moon?"
)
mq
هو العميل الذي يغلف واجهة برمجة تطبيقات marqo
.create_index()
بإنشاء فهرس جديد بالإعدادات الافتراضية. لديك خيار تحديد النموذج الذي تريد استخدامه. على سبيل المثال، mq.create_index("my-first-index", model="hf/all_datasets_v4_MiniLM-L6")
سينشئ فهرسًا بنموذج النص الافتراضي hf/all_datasets_v4_MiniLM-L6
. غالبًا ما يكون التجريب باستخدام نماذج مختلفة مطلوبًا لتحقيق أفضل استرجاع لحالة الاستخدام المحددة الخاصة بك. تقدم النماذج المختلفة أيضًا مقايضة بين سرعة الاستدلال والملاءمة. انظر هنا للحصول على القائمة الكاملة للنماذج.add_documents()
قائمة بالمستندات، ممثلة بإملاءات بايثون للفهرسة. يشير tensor_fields
إلى الحقول التي سيتم فهرستها كمجموعات متجهة وجعلها قابلة للبحث._id
الخاص. خلاف ذلك، سوف يقوم ماركو بإنشاء واحد.دعونا نلقي نظرة على النتائج:
# let's print out the results:
import pprint
pprint . pprint ( results )
{
'hits' : [
{
'Title' : 'Extravehicular Mobility Unit (EMU)' ,
'Description' : 'The EMU is a spacesuit that provides environmental protection, mobility, life support, and'
'communications for astronauts' ,
'_highlights' : [{
'Description' : 'The EMU is a spacesuit that provides environmental protection, '
'mobility, life support, and communications for astronauts'
}],
'_id' : 'article_591' ,
'_score' : 0.61938936
},
{
'Title' : 'The Travels of Marco Polo' ,
'Description' : "A 13th-century travelogue describing Polo's travels" ,
'_highlights' : [{ 'Title' : 'The Travels of Marco Polo' }],
'_id' : 'e00d1a8d-894c-41a1-8e3b-d8b2a8fce12a' ,
'_score' : 0.60237324
}
],
'limit' : 10 ,
'processingTimeMs' : 49 ,
'query' : 'What is the best outfit to wear on the moon?'
}
limit
هو الحد الأقصى لعدد الزيارات التي سيتم إرجاعها. يمكن تعيين هذا كمعلمة أثناء البحث._highlights
. كان هذا هو الجزء من المستند الذي يطابق الاستعلام بشكل أفضل. استرجاع وثيقة عن طريق الهوية.
result = mq . index ( "my-first-index" ). get_document ( document_id = "article_591" )
لاحظ أن إضافة المستند باستخدام add_documents
مرة أخرى باستخدام نفس _id
سيؤدي إلى تحديث المستند.
الحصول على معلومات حول الفهرس.
results = mq . index ( "my-first-index" ). get_stats ()
إجراء بحث عن الكلمات الرئيسية.
result = mq . index ( "my-first-index" ). search ( 'marco polo' , search_method = marqo . SearchMethods . LEXICAL )
لتشغيل البحث عن الصور والنصوص، يتيح Marqo للمستخدمين التوصيل والتشغيل باستخدام نماذج CLIP من HuggingFace. لاحظ أنه إذا لم تقم بتكوين بحث متعدد الوسائط، فسيتم التعامل مع عناوين URL للصور كسلاسل. لبدء الفهرسة والبحث بالصور، قم أولاً بإنشاء فهرس بتكوين CLIP، كما يلي:
settings = {
"treat_urls_and_pointers_as_images" : True , # allows us to find an image file and index it
"model" : "ViT-L/14"
}
response = mq . create_index ( "my-multimodal-index" , ** settings )
ويمكن بعد ذلك إضافة الصور داخل المستندات على النحو التالي. يمكنك استخدام عناوين URL من الإنترنت (على سبيل المثال S3) أو من قرص الجهاز:
response = mq . index ( "my-multimodal-index" ). add_documents ([{
"My_Image" : "https://raw.githubusercontent.com/marqo-ai/marqo-api-tests/mainline/assets/ai_hippo_realistic.png" ,
"Description" : "The hippopotamus, also called the common hippopotamus or river hippopotamus, is a large semiaquatic mammal native to sub-Saharan Africa" ,
"_id" : "hippo-facts"
}], tensor_fields = [ "My_Image" ])
يمكنك بعد ذلك البحث في حقل الصورة باستخدام النص.
results = mq . index ( "my-multimodal-index" ). search ( 'animal' )
يمكن إجراء البحث باستخدام صورة من خلال توفير رابط الصورة.
results = mq . index ( "my-multimodal-index" ). search ( 'https://raw.githubusercontent.com/marqo-ai/marqo-api-tests/mainline/assets/ai_hippo_statue.png' )
يمكن أيضًا توفير الاستعلامات كقواميس حيث يكون كل مفتاح عبارة عن استعلام والقيم المقابلة لها عبارة عن أوزان. يسمح هذا باستعلامات أكثر تقدمًا تتكون من مكونات متعددة ذات ترجيحات تجاهها أو ضدها، ويمكن أن تحتوي الاستعلامات على نقاط سلبية عبر الترجيح السلبي.
يوضح المثال أدناه تطبيق ذلك على سيناريو حيث قد يرغب المستخدم في طرح سؤال ولكن أيضًا يلغي النتائج التي تطابق معيارًا دلاليًا معينًا.
import marqo
import pprint
mq = marqo . Client ( url = "http://localhost:8882" )
mq . create_index ( "my-weighted-query-index" )
mq . index ( "my-weighted-query-index" ). add_documents (
[
{
"Title" : "Smartphone" ,
"Description" : "A smartphone is a portable computer device that combines mobile telephone "
"functions and computing functions into one unit." ,
},
{
"Title" : "Telephone" ,
"Description" : "A telephone is a telecommunications device that permits two or more users to"
"conduct a conversation when they are too far apart to be easily heard directly." ,
},
{
"Title" : "Thylacine" ,
"Description" : "The thylacine, also commonly known as the Tasmanian tiger or Tasmanian wolf, "
"is an extinct carnivorous marsupial."
"The last known of its species died in 1936." ,
}
],
tensor_fields = [ "Description" ]
)
# initially we ask for a type of communications device which is popular in the 21st century
query = {
# a weighting of 1.1 gives this query slightly more importance
"I need to buy a communications device, what should I get?" : 1.1 ,
# a weighting of 1 gives this query a neutral importance
# this will lead to 'Smartphone' being the top result
"The device should work like an intelligent computer." : 1.0 ,
}
results = mq . index ( "my-weighted-query-index" ). search ( q = query )
print ( "Query 1:" )
pprint . pprint ( results )
# now we ask for a type of communications which predates the 21st century
query = {
# a weighting of 1 gives this query a neutral importance
"I need to buy a communications device, what should I get?" : 1.0 ,
# a weighting of -1 gives this query a negation effect
# this will lead to 'Telephone' being the top result
"The device should work like an intelligent computer." : - 0.3 ,
}
results = mq . index ( "my-weighted-query-index" ). search ( q = query )
print ( " n Query 2:" )
pprint . pprint ( results )
يتيح لك Marqo الحصول على فهارس تحتوي على حقول مركبة متعددة الوسائط. يمكن للحقول المركبة متعددة الوسائط دمج النص والصور في حقل واحد. يتيح ذلك تسجيل المستندات عبر حقول النص والصور المدمجة معًا. كما يسمح أيضًا بتمثيل متجه واحد بدلاً من الحاجة إلى العديد مما يوفر مساحة التخزين. يمكن تعيين الوزن النسبي لكل مكون لكل مستند.
يوضح المثال أدناه ذلك من خلال استرجاع التسميات التوضيحية وأزواج الصور باستخدام أنواع متعددة من الاستعلامات.
import marqo
import pprint
mq = marqo . Client ( url = "http://localhost:8882" )
settings = { "treat_urls_and_pointers_as_images" : True , "model" : "ViT-L/14" }
mq . create_index ( "my-first-multimodal-index" , ** settings )
mq . index ( "my-first-multimodal-index" ). add_documents (
[
{
"Title" : "Flying Plane" ,
"caption" : "An image of a passenger plane flying in front of the moon." ,
"image" : "https://raw.githubusercontent.com/marqo-ai/marqo/mainline/examples/ImageSearchGuide/data/image2.jpg" ,
},
{
"Title" : "Red Bus" ,
"caption" : "A red double decker London bus traveling to Aldwych" ,
"image" : "https://raw.githubusercontent.com/marqo-ai/marqo/mainline/examples/ImageSearchGuide/data/image4.jpg" ,
},
{
"Title" : "Horse Jumping" ,
"caption" : "A person riding a horse over a jump in a competition." ,
"image" : "https://raw.githubusercontent.com/marqo-ai/marqo/mainline/examples/ImageSearchGuide/data/image1.jpg" ,
},
],
# Create the mappings, here we define our captioned_image mapping
# which weights the image more heavily than the caption - these pairs
# will be represented by a single vector in the index
mappings = {
"captioned_image" : {
"type" : "multimodal_combination" ,
"weights" : {
"caption" : 0.3 ,
"image" : 0.7
}
}
},
# We specify which fields to create vectors for.
# Note that captioned_image is treated as a single field.
tensor_fields = [ "captioned_image" ]
)
# Search this index with a simple text query
results = mq . index ( "my-first-multimodal-index" ). search (
q = "Give me some images of vehicles and modes of transport. I am especially interested in air travel and commercial aeroplanes."
)
print ( "Query 1:" )
pprint . pprint ( results )
# search the index with a query that uses weighted components
results = mq . index ( "my-first-multimodal-index" ). search (
q = {
"What are some vehicles and modes of transport?" : 1.0 ,
"Aeroplanes and other things that fly" : - 1.0
},
)
print ( " n Query 2:" )
pprint . pprint ( results )
results = mq . index ( "my-first-multimodal-index" ). search (
q = { "Animals of the Perissodactyla order" : - 1.0 }
)
print ( " n Query 3:" )
pprint . pprint ( results )
حذف المستندات.
results = mq . index ( "my-first-index" ). delete_documents ( ids = [ "article_591" , "article_602" ])
حذف فهرس.
results = mq . index ( "my-first-index" ). delete ()
نحن ندعم قوالب Kubernetes لـ Marqo والتي يمكنك نشرها على مزود سحابي من اختيارك. يتيح لك تطبيق Marqo's Kubernetes نشر مجموعات تحتوي على نسخ متماثلة وأجزاء تخزين متعددة وعقد استدلال متعددة. يمكن العثور على الريبو هنا: https://github.com/marqo-ai/marqo-on-kubernetes
إذا كنت تبحث عن خدمة سحابية مُدارة بالكامل، يمكنك الاشتراك في Marqo Cloud هنا: https://cloud.marqo.ai.
يمكن العثور على الوثائق الكاملة لـ Marqo هنا https://docs.marqo.ai/.
لاحظ أنه لا ينبغي عليك تشغيل تطبيقات أخرى على مجموعة Marqo's Vespa حيث يقوم Marqo تلقائيًا بتغيير الإعدادات وتكييفها في المجموعة.
Marqo هو مشروع مجتمعي يهدف إلى جعل البحث الموتر في متناول مجتمع المطورين الأوسع. يسعدنا أنك مهتم بالمساعدة! يرجى قراءة هذا للبدء.
قم بإنشاء بيئة افتراضية python -m venv ./venv
.
تفعيل source ./venv/bin/activate
.
تثبيت المتطلبات من ملف المتطلبات: pip install -r requirements.txt
.
قم بإجراء الاختبارات عن طريق تشغيل ملف tox. قم بإدخال القرص المضغوط في هذا الدليل ثم قم بتشغيل "tox".
إذا قمت بتحديث التبعيات، فتأكد من حذف .tox dir وإعادة التشغيل.
قم بتشغيل مجموعة الاختبار الكاملة (باستخدام الأمر tox
الموجود في هذا الدليل).
قم بإنشاء طلب سحب مع مشكلة جيثب المرفقة.