使用开源多模态LLM搭建私人视觉搜索和问答应用
引言
视觉搜索是许多iPhone或Android设备用户熟悉的应用,它允许用户使用自然语言来搜索照片。随着开源多模态LLM(大规模语言模型)的发布,您可以为自己的私人照片集合构建这种应用。这篇文章将演示如何执行私人视觉搜索,并通过多模态LLM回答有关您的照片的问题。
主要内容
图片摘要生成与存储
该应用程序使用开源的多模态LLM来为每张照片创建摘要,并将摘要嵌入存储在Chroma中。具体步骤如下:
- 图片输入:提供一组照片到
/docs目录中。默认情况下,该模板包含3张食物图片。 - 创建索引:运行以下命令来创建图片索引:
poetry install python ingest.py - 存储:使用本地文件存储(LocalFileStore)来存储图片,并将摘要存储在Chroma中。
图片检索与回答生成
在用户提出问题时,系统会根据图像摘要和用户输入之间的相似性检索相关片段,并将这些图片传递给多模态LLM生成回答。主要步骤如下:
- 生成摘要:使用名为
bakllava的多模态LLM为每张图片生成摘要。 - 嵌入摘要:将摘要嵌入并与原始图片链接存储。
- 检索图片:根据用户问题,通过嵌入模型(例如Ollama embeddings)找出与问题相关的图片。
- 回答合成:将检索到的图片传递给
bakllava生成最终回答。
配置与使用
该应用程序默认配置为使用bakllava。您可以在chain.py和ingest.py中更改模型配置。以下是具体使用步骤:
- 生成摘要和嵌入模型:
# 下载最新版本的Ollama https://ollama.ai/ # 拉取开源多模态LLM:bakllava ollama pull bakllava # 拉取开源嵌入模型:llama2:7b ollama pull llama2:7b - 安装LangChain CLI:
pip install -U langchain-cli - 创建LangChain项目并安装包:
或者将包添加到现有项目中:langchain app new my-app --package rag-multi-modal-mv-locallangchain app add rag-multi-modal-mv-local - 在
server.py文件中添加以下代码:from rag_multi_modal_mv_local import chain as rag_multi_modal_mv_local_chain add_routes(app, rag_multi_modal_mv_local_chain, path="/rag-multi-modal-mv-local") - 配置LangSmith(可选):
export LANGCHAIN_TRACING_V2=true export LANGCHAIN_API_KEY=<your-api-key> export LANGCHAIN_PROJECT=<your-project> - 启动LangServe实例:
这将启动FastAPI应用程序,本地运行在langchain servehttp://localhost:8000。您可以在http://127.0.0.1:8000/docs查看所有模板,并在http://127.0.0.1:8000/rag-multi-modal-mv-local/playground访问操场。
代码示例
以下是一个完整的代码示例,展示如何使用该应用进行图片检索和问答:
from langserve.client import RemoteRunnable
# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://localhost:8000/rag-multi-modal-mv-local")
# 提供问题并获取回答
response = runnable.run({
"question": "我吃了什么冰淇淋?"
})
print(response)
常见问题和解决方案
- 网络访问稳定性:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。
- 模型兼容性问题:确保所选的多模态LLM和嵌入模型兼容,并且下载了正确的版本。
- 存储问题:检查本地文件存储和Chroma的配置,确保摘要和图片可以正确存储和检索。
总结和进一步学习资源
通过使用开源的多模态LLM和嵌入模型,您可以搭建一个强大的私人视觉搜索和问答应用。希望这篇文章能帮助您理解并实现该应用,进一步资源建议参考以下内容:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---