Situs web | Dokumentasi | Demo | Wacana | Komunitas Kendur | Marqo Cloud
Marqo lebih dari sekedar basis data vektor, ini adalah mesin pencari vektor ujung ke ujung untuk teks dan gambar. Pembuatan, penyimpanan, dan pengambilan vektor ditangani secara langsung melalui satu API. Tidak perlu membawa perlengkapan sendiri.
Kenapa Marqo?
Kesamaan vektor saja tidak cukup untuk pencarian vektor. Penelusuran vektor memerlukan lebih dari sekadar basis data vektor - penelusuran ini juga memerlukan penerapan dan pengelolaan pembelajaran mesin (ML), pemrosesan awal, dan transformasi masukan serta kemampuan untuk mengubah perilaku penelusuran tanpa melatih ulang model. Marqo berisi semua bagian ini, memungkinkan pengembang untuk membangun pencarian vektor ke dalam aplikasi mereka dengan sedikit usaha. Daftar lengkap fitur dapat ditemukan di bawah.
Mengapa menggabungkan generasi penyematan dengan pencarian vektor?
Basis data vektor adalah komponen khusus untuk kesamaan vektor dan hanya melayani satu komponen sistem pencarian vektor. Mereka adalah “vektor masuk – vektor keluar”. Mereka masih memerlukan produksi vektor, pengelolaan model ML, orkestrasi terkait, dan pemrosesan masukan. Marqo membuat hal ini mudah dengan menjadi “dokumen masuk, dokumen keluar”. Pemrosesan awal teks dan gambar, penyematan konten, penyimpanan metadata, serta penerapan inferensi dan penyimpanan semuanya ditangani oleh Marqo.
Mulai cepat
Berikut cuplikan kode untuk contoh minimal pencarian vektor dengan Marqo (lihat Memulai):
Marqo membutuhkan Docker. Untuk menginstal Docker, kunjungi situs resmi Docker. Pastikan buruh pelabuhan memiliki setidaknya memori 8GB dan penyimpanan 50GB. Di desktop Docker, Anda dapat melakukan ini dengan mengklik ikon pengaturan, lalu sumber daya, dan memilih memori 8GB.
Gunakan buruh pelabuhan untuk menjalankan 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?"
)
? Penyematan canggih
⚡ Kinerja
? Dokumen-dalam-dokumen-keluar
? Awan yang dikelola
Marqo terintegrasi ke dalam kerangka AI dan pemrosesan data yang populer, dan masih banyak lagi yang akan segera hadir.
? tumpukan jerami
Haystack adalah kerangka kerja sumber terbuka untuk membangun aplikasi yang menggunakan teknologi NLP seperti LLM, model penyematan, dan lainnya. Integrasi ini memungkinkan Anda menggunakan Marqo sebagai Penyimpanan Dokumen untuk alur Haystack seperti pengambilan-augmentasi, menjawab pertanyaan, pencarian dokumen, dan banyak lagi.
? Pita pegangan
Griptape memungkinkan penyebaran agen berbasis LLM yang aman dan andal untuk aplikasi perusahaan, MarqoVectorStoreDriver memberi agen ini akses ke pencarian terukur dengan data Anda sendiri. Integrasi ini memungkinkan Anda memanfaatkan model open source atau model yang disesuaikan melalui Marqo untuk memberikan hasil yang relevan dengan LLM Anda.
?? rantai langka
Integrasi ini memungkinkan Anda memanfaatkan model sumber terbuka atau model khusus yang disesuaikan melalui aplikasi Marqo untuk LangChain dengan komponen pencarian vektor. Implementasi penyimpanan vektor Marqo dapat dihubungkan ke rantai yang sudah ada seperti Retrieval QA dan Conversational Retrieval QA.
⋙Hamilton
Integrasi ini memungkinkan Anda memanfaatkan model sumber terbuka atau model khusus yang disesuaikan melalui aplikasi Marqo untuk Hamilton LLM.
? Mulai cepat | Bangun aplikasi pertama Anda dengan Marqo dalam waktu kurang dari 5 menit. |
? Marqo untuk data gambar | Membangun pencarian gambar tingkat lanjut dengan Marqo. |
Marqo untuk teks | Membangun database multibahasa di Marqo. |
? Mengintegrasikan Marqo dengan GPT | Menjadikan GPT sebagai ahli materi pelajaran dengan menggunakan Marqo sebagai basis pengetahuannya. |
? Marqo untuk AI Kreatif | Menggabungkan difusi stabil dengan pencarian semantik untuk menghasilkan dan mengkategorikan 100 ribu gambar hotdog. |
? Marqo dan Data Pidato | Tambahkan diarisisasi dan transkripsi ke praproses audio untuk Tanya Jawab dengan Marqo dan ChatGPT. |
Marqo untuk moderasi konten | Membangun pencarian gambar tingkat lanjut dengan Marqo untuk menemukan dan menghapus konten. |
☁️ Memulai dengan Marqo Cloud | Pelajari cara menyiapkan dan menjalankan Marqo Cloud mulai dari pertama kali Anda masuk hingga membuat aplikasi pertama Anda dengan Marqo |
? Marqo untuk e-niaga | Proyek ini merupakan aplikasi web dengan frontend dan backend menggunakan Python, Flask, ReactJS, dan TypeScript. Frontend adalah aplikasi ReactJS yang melakukan request ke backend yang merupakan aplikasi Flask. Backend membuat permintaan ke API cloud Marqo Anda. |
? bot obrolan Marqo | Dalam panduan ini kita akan membangun aplikasi chat bot menggunakan Marqo dan API ChatGPT OpenAI. Kita akan mulai dengan basis kode yang ada dan kemudian membahas cara menyesuaikan perilaku. |
? Fitur | Fitur inti Marqo. |
Marqo membutuhkan Docker. Untuk menginstal Docker, kunjungi situs resmi Docker. Pastikan buruh pelabuhan memiliki setidaknya memori 8GB dan penyimpanan 50GB.
Gunakan buruh pelabuhan untuk menjalankan Marqo:
docker rm -f marqo
docker pull marqoai/marqo:latest
docker run --name marqo -p 8882:8882 marqoai/marqo:latest
Catatan: Jika container marqo
Anda terus mati, kemungkinan besar ini disebabkan oleh kurangnya memori yang dialokasikan untuk Docker. Meningkatkan batas memori Docker hingga setidaknya 6 GB (disarankan 8 GB) di pengaturan Docker Anda mungkin dapat memperbaiki masalah.
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
adalah klien yang membungkus API marqo
.create_index()
membuat indeks baru dengan pengaturan default. Anda memiliki opsi untuk menentukan model apa yang akan digunakan. Misalnya, mq.create_index("my-first-index", model="hf/all_datasets_v4_MiniLM-L6")
akan membuat indeks dengan model teks default hf/all_datasets_v4_MiniLM-L6
. Eksperimen dengan model yang berbeda sering kali diperlukan untuk mencapai pengambilan terbaik untuk kasus penggunaan spesifik Anda. Model yang berbeda juga menawarkan keseimbangan antara kecepatan inferensi dan relevansi. Lihat di sini untuk daftar lengkap model.add_documents()
mengambil daftar dokumen, direpresentasikan sebagai dicts python untuk pengindeksan. tensor_fields
mengacu pada bidang yang akan diindeks sebagai koleksi vektor dan dapat dicari._id
khusus. Jika tidak, Marqo akan menghasilkannya.Mari kita lihat hasilnya:
# 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
adalah jumlah maksimum pukulan yang dapat dikembalikan. Ini dapat ditetapkan sebagai parameter selama pencarian._highlights
. Ini adalah bagian dokumen yang paling cocok dengan kueri. Ambil dokumen berdasarkan ID.
result = mq . index ( "my-first-index" ). get_document ( document_id = "article_591" )
Perhatikan bahwa dengan menambahkan dokumen menggunakan add_documents
lagi menggunakan _id
yang sama akan menyebabkan dokumen diperbarui.
Dapatkan informasi tentang indeks.
results = mq . index ( "my-first-index" ). get_stats ()
Lakukan pencarian kata kunci.
result = mq . index ( "my-first-index" ). search ( 'marco polo' , search_method = marqo . SearchMethods . LEXICAL )
Untuk mendukung pencarian gambar dan teks, Marqo memungkinkan pengguna untuk plug and play dengan model CLIP dari HuggingFace. Perhatikan bahwa jika Anda tidak mengonfigurasi pencarian multimodal, url gambar akan diperlakukan sebagai string. Untuk mulai mengindeks dan mencari gambar, pertama-tama buat indeks dengan konfigurasi CLIP, seperti di bawah ini:
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 )
Gambar kemudian dapat ditambahkan dalam dokumen sebagai berikut. Anda dapat menggunakan url dari internet (misalnya S3) atau dari disk mesin:
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" ])
Anda kemudian dapat mencari bidang gambar menggunakan teks.
results = mq . index ( "my-multimodal-index" ). search ( 'animal' )
Pencarian menggunakan gambar dapat dilakukan dengan menyediakan link gambar.
results = mq . index ( "my-multimodal-index" ). search ( 'https://raw.githubusercontent.com/marqo-ai/marqo-api-tests/mainline/assets/ai_hippo_statue.png' )
Kueri juga dapat disediakan sebagai kamus yang setiap kuncinya adalah kueri dan nilainya yang terkait adalah bobot. Hal ini memungkinkan kueri tingkat lanjut yang terdiri dari beberapa komponen dengan bobot yang mendukung atau menentang komponen tersebut, kueri dapat memiliki negasi melalui bobot negatif.
Contoh di bawah menunjukkan penerapan ini pada skenario di mana pengguna mungkin ingin mengajukan pertanyaan tetapi juga meniadakan hasil yang sesuai dengan kriteria semantik tertentu.
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 memungkinkan Anda memiliki indeks dengan bidang kombinasi multimodal. Bidang kombinasi multimodal dapat menggabungkan teks dan gambar menjadi satu bidang. Hal ini memungkinkan penilaian dokumen di seluruh gabungan bidang teks dan gambar secara bersamaan. Ini juga memungkinkan representasi vektor tunggal daripada memerlukan banyak representasi sehingga menghemat penyimpanan. Bobot relatif masing-masing komponen dapat diatur per dokumen.
Contoh di bawah menunjukkan hal ini dengan pengambilan pasangan keterangan dan gambar menggunakan beberapa jenis kueri.
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 )
Hapus dokumen.
results = mq . index ( "my-first-index" ). delete_documents ( ids = [ "article_591" , "article_602" ])
Hapus indeks.
results = mq . index ( "my-first-index" ). delete ()
Kami mendukung template Kubernetes untuk Marqo yang dapat Anda terapkan pada penyedia cloud pilihan Anda. Implementasi Kubernetes Marqo memungkinkan Anda menyebarkan cluster dengan replika, beberapa pecahan penyimpanan, dan beberapa node inferensi. Repo dapat ditemukan di sini: https://github.com/marqo-ai/marqo-on-kubernetes
Jika Anda mencari layanan cloud yang terkelola sepenuhnya, Anda dapat mendaftar Marqo Cloud di sini: https://cloud.marqo.ai.
Dokumentasi lengkap Marqo dapat ditemukan di sini https://docs.marqo.ai/.
Perhatikan bahwa Anda tidak boleh menjalankan aplikasi lain di cluster Vespa Marqo karena Marqo secara otomatis mengubah dan menyesuaikan pengaturan pada cluster.
Marqo adalah proyek komunitas dengan tujuan membuat pencarian tensor dapat diakses oleh komunitas pengembang yang lebih luas. Kami senang Anda tertarik untuk membantu! Silakan baca ini untuk memulai.
Buat env virtual python -m venv ./venv
.
Aktifkan source ./venv/bin/activate
.
Instal persyaratan dari file persyaratan: pip install -r requirements.txt
.
Jalankan tes dengan menjalankan file tox. CD ke dalam direktori ini dan kemudian jalankan "tox".
Jika Anda memperbarui dependensi, pastikan untuk menghapus direktori .tox dan jalankan kembali.
Jalankan rangkaian pengujian lengkap (dengan menggunakan perintah tox
di direktori ini).
Buat permintaan tarik dengan masalah github terlampir.