探索多模态本地视觉搜索:构建你自己的智能照片搜索应用

159 阅读3分钟

探索多模态本地视觉搜索:构建你自己的智能照片搜索应用

引言

在现代智能手机的支持下,视觉搜索已经成为一种常见功能,允许用户通过自然语言搜索照片。随着开源多模态大模型(LLM)的出现,我们可以为自己的私人照片集构建类似的应用。本篇文章将介绍如何运用nomic-embed-vision-v1多模态嵌入来实现本地视觉搜索和问答功能。

主要内容

准备工作

首先,我们需要准备一组照片,放在项目的/docs目录下。模板中默认包含了三张食物照片。用户可以输入类似“我吃了什么软冰淇淋?”的问题来测试。

图像索引创建

要为图像创建索引,需运行以下命令:

poetry install
python ingest.py

存储和嵌入

该模板使用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
)

语言模型 (LLM)

模板默认使用Ollama。下载最新版本的Ollama和开源多模态LLM,例如bakllava

ollama pull bakllava

可以在chain.pyingest.py中更改应用的模型配置。

使用方法

首先,确保你已安装LangChain CLI:

pip install -U langchain-cli

创建一个新的LangChain项目并安装该组件:

langchain app new my-app --package rag-chroma-multi-modal

在现有项目中添加:

langchain app add 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")

可选地,配置LangSmith以帮助跟踪、监控和调试LangChain应用。

启动本地FastAPI应用:

langchain serve

在本地访问服务器:http://localhost:8000

代码示例

以下是一个简单的使用示例:

from langserve.client import RemoteRunnable

# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://localhost:8000/rag-chroma-multi-modal")

response = runnable.invoke({"question": "What kind of soft serve did I have?"})
print(response)

常见问题和解决方案

网络访问问题

由于某些地区的网络限制,开发者可能需考虑使用API代理服务以提高访问的稳定性。

模型下载失败

确保网络连接稳定,并检查模型下载路径的权限。

总结和进一步学习资源

通过本文,我们了解了如何利用多模态嵌入和开源LLM搭建本地视觉搜索应用。以下是一些推荐的学习资源:

参考资料

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

---END---