เว็บไซต์ | เอกสารประกอบ | การสาธิต | วาทกรรม | ชุมชนหย่อน | มาร์โก คลาวด์
Marqo เป็นมากกว่าฐานข้อมูลเวกเตอร์ แต่เป็นเครื่องมือค้นหาเวกเตอร์แบบครบวงจรสำหรับทั้งข้อความและรูปภาพ การสร้างเวกเตอร์ การจัดเก็บ และการเรียกค้นได้รับการจัดการทันทีผ่าน API เดียว ไม่จำเป็นต้องนำฝังมาเอง
ทำไมต้องมาร์โก?
ความคล้ายคลึงกันของเวกเตอร์เพียงอย่างเดียวไม่เพียงพอสำหรับการค้นหาเวกเตอร์ การค้นหาเวกเตอร์ต้องการมากกว่าฐานข้อมูลเวกเตอร์ แต่ยังต้องมีการใช้งานและการจัดการการเรียนรู้ของเครื่อง (ML) การประมวลผลล่วงหน้าและการแปลงอินพุต ตลอดจนความสามารถในการปรับเปลี่ยนพฤติกรรมการค้นหาโดยไม่ต้องฝึกอบรมโมเดลใหม่ Marqo มีชิ้นส่วนเหล่านี้ทั้งหมด ช่วยให้นักพัฒนาสามารถสร้างการค้นหาเวกเตอร์ลงในแอปพลิเคชันของตนได้โดยใช้ความพยายามเพียงเล็กน้อย รายการคุณสมบัติทั้งหมดสามารถพบได้ด้านล่าง
เหตุใดจึงรวมกลุ่มการสร้างการฝังเข้ากับการค้นหาเวกเตอร์
ฐานข้อมูลเวกเตอร์เป็นส่วนประกอบเฉพาะสำหรับความคล้ายคลึงกันของเวกเตอร์ และให้บริการเพียงองค์ประกอบเดียวของระบบค้นหาเวกเตอร์เท่านั้น พวกมันคือ "เวกเตอร์เข้า - เวกเตอร์ออก" ยังคงต้องการการผลิตเวกเตอร์ การจัดการโมเดล ML การประสานและการประมวลผลอินพุตที่เกี่ยวข้อง Marqo ทำให้สิ่งนี้เป็นเรื่องง่ายโดย "เอกสารเข้า เอกสารออก" การประมวลผลข้อความและรูปภาพล่วงหน้า การฝังเนื้อหา การจัดเก็บข้อมูลเมตา และการอนุมานและการจัดเก็บ ล้วนได้รับการดูแลโดย Marqo
เริ่มต้นอย่างรวดเร็ว
นี่คือข้อมูลโค้ดสำหรับตัวอย่างขั้นต่ำของการค้นหาเวกเตอร์ด้วย Marqo (ดูการเริ่มต้นใช้งาน):
Marqo ต้องใช้ Docker หากต้องการติดตั้ง Docker ให้ไปที่เว็บไซต์ทางการของ Docker ตรวจสอบให้แน่ใจว่านักเทียบท่ามีหน่วยความจำอย่างน้อย 8GB และที่เก็บข้อมูล 50GB ใน Docker desktop คุณสามารถทำได้โดยคลิกไอคอนการตั้งค่า จากนั้นเลือกทรัพยากร และเลือกหน่วยความจำ 8GB
ใช้นักเทียบท่าเพื่อรัน 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 ได้รับการผสานรวมเข้ากับ AI ยอดนิยมและเฟรมเวิร์กการประมวลผลข้อมูล และยังมีอีกมากมายในเร็วๆ นี้
- กองหญ้า
Haystack เป็นเฟรมเวิร์กโอเพ่นซอร์สสำหรับการสร้างแอปพลิเคชันที่ใช้เทคโนโลยี NLP เช่น LLM โมเดลการฝัง และอื่นๆ การผสานรวมนี้ช่วยให้คุณใช้ Marqo เป็นที่เก็บเอกสารสำหรับไปป์ไลน์ Haystack เช่น การดึงข้อมูลเสริม การตอบคำถาม การค้นหาเอกสาร และอื่นๆ
- กริปเทป
Griptape ช่วยให้ปรับใช้ตัวแทนที่ใช้ LLM ได้อย่างปลอดภัยและเชื่อถือได้สำหรับแอปพลิเคชันระดับองค์กร MarqoVectorStoreDriver ช่วยให้ตัวแทนเหล่านี้สามารถเข้าถึงการค้นหาที่ปรับขนาดได้ด้วยข้อมูลของคุณเอง การบูรณาการนี้ช่วยให้คุณใช้ประโยชน์จากโอเพ่นซอร์สหรือโมเดลที่ได้รับการปรับแต่งอย่างละเอียดผ่าน Marqo เพื่อส่งมอบผลลัพธ์ที่เกี่ยวข้องให้กับ LLM ของคุณ
- แลงเชน
การผสานรวมนี้ช่วยให้คุณใช้ประโยชน์จากโอเพ่นซอร์สหรือโมเดลที่ได้รับการปรับแต่งแบบกำหนดเองผ่าน Marqo สำหรับแอปพลิเคชัน LangChain ด้วยองค์ประกอบการค้นหาเวกเตอร์ การใช้งานร้านค้าเวกเตอร์ Marqo สามารถเชื่อมต่อกับเครือข่ายที่มีอยู่ เช่น การเรียก QA และ QA การเรียกข้อมูลการสนทนา
⋙ แฮมิลตัน
การผสานรวมนี้ช่วยให้คุณใช้ประโยชน์จากโอเพ่นซอร์สหรือโมเดลที่ได้รับการปรับแต่งแบบกำหนดเองผ่าน Marqo สำหรับแอปพลิเคชัน Hamilton LLM
- เริ่มต้นอย่างรวดเร็ว | สร้างแอปพลิเคชันแรกของคุณด้วย Marqo ภายในเวลาไม่ถึง 5 นาที |
- Marqo สำหรับข้อมูลรูปภาพ | สร้างการค้นหารูปภาพขั้นสูงด้วย Marqo |
มาร์โกสำหรับข้อความ | การสร้างฐานข้อมูลหลายภาษาใน Marqo |
- บูรณาการ Marqo กับ GPT | ทำให้ GPT เป็นผู้เชี่ยวชาญเฉพาะด้านโดยใช้ Marqo เป็นฐานความรู้ |
- Marqo สำหรับ Creative AI | ผสมผสานการแพร่กระจายที่เสถียรเข้ากับการค้นหาเชิงความหมายเพื่อสร้างและจัดหมวดหมู่รูปภาพของฮอทด็อก 100,000 ภาพ |
- ข้อมูล Marqo และคำพูด | เพิ่มการถอดเสียงและการถอดเสียงเป็นคำเพื่อประมวลผลเสียงล่วงหน้าสำหรับการถามตอบด้วย Marqo และ ChatGPT |
Marqo สำหรับการกลั่นกรองเนื้อหา | สร้างการค้นหารูปภาพขั้นสูงด้วย Marqo เพื่อค้นหาและลบเนื้อหา |
☁️ เริ่มต้นใช้งาน Marqo Cloud | ดูวิธีตั้งค่าและใช้งาน Marqo Cloud ตั้งแต่การเข้าสู่ระบบครั้งแรกไปจนถึงการสร้างแอปพลิเคชันแรกด้วย Marqo |
- Marqo สำหรับอีคอมเมิร์ซ | โปรเจ็กต์นี้เป็นเว็บแอปพลิเคชันที่มีส่วนหน้าและส่วนหลังโดยใช้ Python, Flask, ReactJS และ Typescript ส่วนหน้าเป็นแอปพลิเคชัน ReactJS ที่สร้างคำขอไปยังส่วนหลังซึ่งเป็นแอปพลิเคชัน Flask แบ็กเอนด์ส่งคำขอไปยัง Marqo cloud API ของคุณ |
- แชทบอทมาร์โค | ในคู่มือนี้ เราจะสร้างแอปพลิเคชันแชทบอทโดยใช้ Marqo และ ChatGPT API ของ OpenAI เราจะเริ่มต้นด้วยฐานโค้ดที่มีอยู่ จากนั้นจะอธิบายวิธีปรับแต่งพฤติกรรม |
- คุณสมบัติ | คุณสมบัติหลักของ Marqo |
Marqo ต้องใช้ Docker หากต้องการติดตั้ง Docker ให้ไปที่เว็บไซต์ทางการของ Docker ตรวจสอบให้แน่ใจว่านักเทียบท่ามีหน่วยความจำอย่างน้อย 8GB และที่เก็บข้อมูล 50GB
ใช้นักเทียบท่าเพื่อรัน Marqo:
docker rm -f marqo
docker pull marqoai/marqo:latest
docker run --name marqo -p 8882:8882 marqoai/marqo:latest
หมายเหตุ: หากคอนเทนเนอร์ marqo
ของคุณถูกหยุดทำงานอย่างต่อเนื่อง อาจเกิดจากการจัดสรรหน่วยความจำให้กับ Docker ไม่เพียงพอ การเพิ่มขีดจำกัดหน่วยความจำสำหรับ Docker เป็นอย่างน้อย 6GB (แนะนำ 8GB) ในการตั้งค่า 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
APIcreate_index()
สร้างดัชนีใหม่ด้วยการตั้งค่าเริ่มต้น คุณมีตัวเลือกในการระบุรุ่นที่จะใช้ ตัวอย่างเช่น mq.create_index("my-first-index", model="hf/all_datasets_v4_MiniLM-L6")
จะสร้างดัชนีด้วยโมเดลข้อความเริ่มต้น hf/all_datasets_v4_MiniLM-L6
มักต้องมีการทดลองกับโมเดลต่างๆ เพื่อให้ดึงข้อมูลได้ดีที่สุดสำหรับกรณีการใช้งานเฉพาะของคุณ โมเดลต่างๆ ยังมีข้อดีข้อเสียระหว่างความเร็วอนุมานและความเกี่ยวข้องอีกด้วย ดูรายการรุ่นทั้งหมดได้ที่นี่add_documents()
รับรายการเอกสารซึ่งแสดงเป็น python dicts สำหรับการจัดทำดัชนี tensor_fields
หมายถึงฟิลด์ที่จะถูกจัดทำดัชนีเป็นคอลเลกชันเวกเตอร์และทำให้สามารถค้นหาได้_id
พิเศษได้ มิฉะนั้น Marqo จะสร้างขึ้นมาเรามาดูผลลัพธ์กันดีกว่า:
# 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
คือจำนวน Hit สูงสุดที่จะส่งคืน สามารถตั้งค่าเป็นพารามิเตอร์ระหว่างการค้นหาได้_highlights
นี่เป็นส่วนหนึ่งของเอกสารที่ตรงกับข้อความค้นหามากที่สุด ดึงเอกสารด้วย ID
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 ซึ่งคุณสามารถปรับใช้กับผู้ให้บริการคลาวด์ที่คุณเลือกได้ การใช้งาน Kubernetes ของ Marqo ช่วยให้คุณสามารถปรับใช้คลัสเตอร์ที่มีแบบจำลอง ชิ้นส่วนพื้นที่จัดเก็บข้อมูลหลายอัน และโหนดการอนุมานหลายโหนด สามารถพบได้ที่นี่: https://github.com/marqo-ai/marqo-on-kubernetes
หากคุณกำลังมองหาบริการคลาวด์ที่มีการจัดการเต็มรูปแบบ คุณสามารถสมัครใช้งาน Marqo Cloud ได้ที่นี่: https://cloud.marqo.ai
สามารถดูเอกสารฉบับเต็มสำหรับ Marqo ได้ที่นี่ https://docs.marqo.ai/
โปรดทราบว่าคุณไม่ควรเรียกใช้แอปพลิเคชันอื่นบนคลัสเตอร์ Vespa ของ Marqo เนื่องจาก Marqo จะเปลี่ยนและปรับการตั้งค่าบนคลัสเตอร์โดยอัตโนมัติ
Marqo เป็นโครงการชุมชนโดยมีเป้าหมายเพื่อให้ชุมชนนักพัฒนาในวงกว้างสามารถเข้าถึงการค้นหาเทนเซอร์ได้ เราดีใจที่คุณสนใจที่จะช่วยเหลือ! โปรดอ่านสิ่งนี้เพื่อเริ่มต้น
สร้าง env python -m venv ./venv
เปิดใช้งาน source ./venv/bin/activate
/activate
ข้อกำหนดในการติดตั้งจากไฟล์ข้อกำหนด: pip install -r requirements.txt
รันการทดสอบโดยการรันไฟล์ tox ซีดีลงใน dir นี้แล้วเรียกใช้ "tox"
หากคุณอัปเดตการขึ้นต่อกัน อย่าลืมลบ .tox dir แล้วรันใหม่
เรียกใช้ชุดการทดสอบแบบเต็ม (โดยใช้คำสั่ง tox
ใน dir นี้)
สร้างคำขอดึงที่มีปัญหา GitHub ที่แนบมา