웹사이트 | 문서 | 데모 | 담론 | 슬랙 커뮤니티 | 마르코 클라우드
Marqo는 벡터 데이터베이스 그 이상입니다. 텍스트와 이미지 모두에 대한 엔드투엔드 벡터 검색 엔진입니다. 벡터 생성, 저장 및 검색은 단일 API를 통해 즉시 처리됩니다. 자신만의 임베딩을 가져올 필요가 없습니다.
왜 마르코인가?
벡터 유사성만으로는 벡터 검색에 충분하지 않습니다. 벡터 검색에는 벡터 데이터베이스 이상의 것이 필요합니다. 또한 기계 학습(ML) 배포 및 관리, 입력 전처리 및 변환은 물론 모델을 재교육하지 않고 검색 동작을 수정하는 기능도 필요합니다. Marqo에는 이러한 모든 요소가 포함되어 있어 개발자가 최소한의 노력으로 애플리케이션에 벡터 검색을 구축할 수 있습니다. 전체 기능 목록은 아래에서 확인할 수 있습니다.
왜 번들 임베딩 생성을 벡터 검색과 함께 사용하나요?
벡터 데이터베이스는 벡터 유사성을 위한 특수 구성 요소이며 벡터 검색 시스템의 한 구성 요소만 서비스합니다. 이는 "벡터 입력 - 벡터 출력"입니다. 여전히 벡터 생성, ML 모델 관리, 관련 오케스트레이션 및 입력 처리가 필요합니다. Marqo는 "문서 입력, 문서 출력"을 통해 이를 쉽게 만듭니다. 텍스트와 이미지의 전처리, 콘텐츠 삽입, 메타데이터 저장, 추론 및 저장 배포는 모두 Marqo에서 처리합니다.
빠른 시작
다음은 Marqo를 사용한 벡터 검색의 최소 예에 대한 코드 조각입니다(시작하기 참조).
Marqo에는 Docker가 필요합니다. Docker를 설치하려면 Docker 공식 웹사이트로 이동하세요. Docker에 최소 8GB 메모리와 50GB 스토리지가 있는지 확인하세요. Docker 데스크탑에서는 설정 아이콘을 클릭한 다음 리소스를 클릭하고 8GB 메모리를 선택하여 이를 수행할 수 있습니다.
docker를 사용하여 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은 LLM, 임베딩 모델 등과 같은 NLP 기술을 사용하는 애플리케이션을 구축하기 위한 오픈 소스 프레임워크입니다. 이 통합을 통해 Marqo를 검색 확대, 질문 답변, 문서 검색 등과 같은 Haystack 파이프라인을 위한 문서 저장소로 사용할 수 있습니다.
? 그립테이프
Griptape을 사용하면 엔터프라이즈 애플리케이션을 위한 LLM 기반 에이전트를 안전하고 안정적으로 배포할 수 있으며, MarqoVectorStoreDriver는 이러한 에이전트가 자신의 데이터로 확장 가능한 검색에 액세스할 수 있도록 해줍니다. 이러한 통합을 통해 Marqo를 통해 오픈 소스 또는 맞춤형 미세 조정 모델을 활용하여 LLM에 관련 결과를 제공할 수 있습니다.
?? 랭체인
이 통합을 통해 벡터 검색 구성 요소가 포함된 LangChain 애플리케이션용 Marqo를 통해 오픈 소스 또는 사용자 정의 미세 조정 모델을 활용할 수 있습니다. Marqo 벡터 저장소 구현은 검색 QA 및 대화형 검색 QA와 같은 기존 체인에 연결할 수 있습니다.
⋙ 해밀턴
이 통합을 통해 Hamilton LLM 애플리케이션용 Marqo를 통해 오픈 소스 또는 맞춤형 미세 조정 모델을 활용할 수 있습니다.
? 빠른 시작 | Marqo를 사용하여 5분 이내에 첫 번째 애플리케이션을 구축하세요. |
? 이미지 데이터용 Marqo | Marqo로 고급 이미지 검색을 구축해 보세요. |
텍스트를 위한 Marqo | Marqo에서 다국어 데이터베이스를 구축합니다. |
? Marqo를 GPT와 통합 | Marqo를 지식 기반으로 사용하여 GPT를 주제 전문가로 만듭니다. |
? 창의적인 AI를 위한 Marqo | 안정적인 확산과 의미론적 검색을 결합하여 100,000개의 핫도그 이미지를 생성하고 분류합니다. |
? Marqo 및 음성 데이터 | Marqo 및 ChatGPT를 사용하여 Q&A용 오디오를 전처리하려면 분할 및 텍스트 변환을 추가하세요. |
콘텐츠 조정을 위한 Marqo | Marqo로 고급 이미지 검색을 구축하여 콘텐츠를 찾고 제거하세요. |
☁️ Marqo Cloud 시작하기 | 처음 로그인부터 Marqo를 사용하여 첫 번째 애플리케이션을 구축하는 것까지 Marqo Cloud를 설정하고 실행하는 방법을 살펴보세요. |
? 전자상거래를 위한 Marqo | 이 프로젝트는 Python, Flask, ReactJS 및 Typescript를 사용하여 프런트엔드와 백엔드를 갖춘 웹 애플리케이션입니다. 프론트엔드는 Flask 애플리케이션인 백엔드에 요청을 보내는 ReactJS 애플리케이션입니다. 백엔드는 Marqo 클라우드 API에 요청합니다. |
? 마르코 챗봇 | 이 가이드에서는 Marqo와 OpenAI의 ChatGPT API를 사용하여 채팅 봇 애플리케이션을 구축합니다. 기존 코드 기반으로 시작한 다음 동작을 사용자 정의하는 방법을 살펴보겠습니다. |
? 특징 | Marqo의 핵심 기능. |
Marqo에는 Docker가 필요합니다. Docker를 설치하려면 Docker 공식 웹사이트로 이동하세요. Docker에 최소 8GB 메모리와 50GB 스토리지가 있는지 확인하세요.
docker를 사용하여 Marqo를 실행합니다.
docker rm -f marqo
docker pull marqoai/marqo:latest
docker run --name marqo -p 8882:8882 marqoai/marqo:latest
참고: marqo
컨테이너가 계속 종료되는 경우 Docker에 할당되는 메모리가 부족하기 때문일 가능성이 높습니다. Docker 설정에서 Docker의 메모리 제한을 최소 6GB(8GB 권장)로 늘리면 문제가 해결될 수 있습니다.
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
API를 래핑하는 클라이언트입니다.create_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
필드를 사용하여 문서 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
반환될 최대 히트 수입니다. 검색 시 매개변수로 설정할 수 있습니다._highlights
필드가 있습니다. 이것은 쿼리와 가장 잘 일치하는 문서의 일부였습니다. ID로 문서를 검색합니다.
result = mq . index ( "my-first-index" ). get_document ( document_id = "article_591" )
동일한 _id
사용하여 add_documents
를 사용하여 문서를 다시 추가하면 문서가 업데이트됩니다.
인덱스에 대한 정보를 얻습니다.
results = mq . index ( "my-first-index" ). get_stats ()
키워드 검색을 수행합니다.
result = mq . index ( "my-first-index" ). search ( 'marco polo' , search_method = marqo . SearchMethods . LEXICAL )
이미지 및 텍스트 검색을 강화하기 위해 Marqo를 사용하면 HuggingFace의 CLIP 모델을 연결하고 재생할 수 있습니다. 다중 모달 검색을 구성하지 않으면 이미지 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 )
그러면 다음과 같이 문서 내에 이미지를 추가할 수 있습니다. 인터넷(예: S3) 또는 머신 디스크의 URL을 사용할 수 있습니다.
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 ()
우리는 귀하가 선택한 클라우드 제공업체에 배포할 수 있는 Marqo용 Kubernetes 템플릿을 지원합니다. Marqo의 Kubernetes 구현을 사용하면 복제본, 여러 스토리지 샤드 및 여러 추론 노드가 포함된 클러스터를 배포할 수 있습니다. 저장소는 여기에서 찾을 수 있습니다: https://github.com/marqo-ai/marqo-on-kubernetes
완전관리형 클라우드 서비스를 찾고 계시다면 여기에서 Marqo Cloud에 가입하실 수 있습니다: https://cloud.marqo.ai.
Marqo에 대한 전체 문서는 여기(https://docs.marqo.ai/)에서 찾을 수 있습니다.
Marqo는 클러스터의 설정을 자동으로 변경하고 적용하므로 Marqo의 Vespa 클러스터에서 다른 애플리케이션을 실행해서는 안 됩니다.
Marqo는 더 넓은 개발자 커뮤니티가 텐서 검색에 액세스할 수 있도록 하는 것을 목표로 하는 커뮤니티 프로젝트입니다. 귀하께서 도움에 관심을 가져주셔서 기쁩니다! 시작하려면 이 내용을 읽어 보십시오.
가상 환경을 생성합니다 python -m venv ./venv
.
가상 환경 source ./venv/bin/activate
활성화합니다.
요구 사항 파일 pip install -r requirements.txt
에서 요구 사항을 설치합니다.
tox 파일을 실행하여 테스트를 실행합니다. CD를 이 디렉토리에 넣은 다음 "tox"를 실행하십시오.
종속성을 업데이트하는 경우 .tox 디렉터리를 삭제하고 다시 실행하세요.
전체 테스트 스위트를 실행하십시오(이 디렉토리에서 tox
명령을 사용하여).
Github 이슈가 첨부된 풀 리퀘스트를 생성하세요.