探索多模态本地视觉搜索:构建你自己的智能照片搜索应用
引言
在现代智能手机的支持下,视觉搜索已经成为一种常见功能,允许用户通过自然语言搜索照片。随着开源多模态大模型(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.py和ingest.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---