游乐游手机版
首页/AI教程/文章详情

阿里云百炼ES AI多模态搜索深度解析

时间:2026-06-03 21:19
导读:在当今搜索场景中,多模态搜索的应用日益广泛,例如通过文字寻找图片、利用图片检索图片,甚至借助图片描述匹配其他描述。本文将以阿里云 Elasticsearch(ES)与千问 VL 大模型为核心,完整演示从图片特征提取到向量检索的实战流程。提供的代码示例覆盖以文搜图、以文搜文、以图搜图、以图搜文四

导读:

在当今搜索场景中,多模态搜索的应用日益广泛,例如通过文字寻找图片、利用图片检索图片,甚至借助图片描述匹配其他描述。本文将以阿里云 Elasticsearch(ES)与千问 VL 大模型为核心,完整演示从图片特征提取到向量检索的实战流程。提供的代码示例覆盖以文搜图、以文搜文、以图搜图、以图搜文四种常见场景,开箱即用。

效果展示>>

背景信息

当图片和文本这类非结构化数据并存时,传统的关键词匹配往往力不从心。更高效的做法是先将它们转换为向量,再通过向量检索快速命中相似内容。本实践使用以下三个工具:

  • Elasticsearch:作为向量存储与检索的核心数据库,此处选用 8.17 及以上版本。

  • 千问 VL 模型:负责从图片中提取描述与关键词,相当于为每张图片生成一段自然语言说明。

  • DashScope Embedding API:将图片和文本分别转化为向量,从而在统一向量空间内实现跨模态匹配。

具体能实现哪些功能?

  • 以文搜图:输入一句话,找出最匹配的图片。

  • 以文搜文:输入一句话,找出最相似的图片描述。

  • 以图搜图:输入一张图片,找出视觉上最相近的图片。

  • 以图搜文:输入一张图片,找出内容描述最接近的文本。

系统架构

下图展示了整个多模态搜索系统的架构概览,从数据录入、向量生成到检索响应,流程一目了然。

前提条件

动手前请确认环境是否准备就绪:

  • 一个 8.17 及以上版本的阿里云 Elasticsearch 实例(创建步骤参见官方文档)。

  • 已开通百炼服务,并获取可用的 API-Key。

  • 本地 Python 版本 ≥ 3.8。

环境准备

安装依赖

执行以下命令,一次性安装所需的库:

pip install elasticsearch dashscope requests streamlit

下载示例数据集

数据集来自公开的图片检索示例包,运行以下命令下载并解压:

wget https://github.com/milvus-io/pymilvus-assets/releases/download/imagedata/reverse_image_search.zip
unzip -q -o reverse_image_search.zip

解压后会得到一个 CSV 文件和多张图片样本。

目录结构

建议将工作目录组织如下:

multi_modal_search/
├── reverse_image_search.csv   # 数据集文件
├── train/                     # 图片目录(解压后生成)
│   └── *.jpg
├── scripts/                   # 脚本目录
│   ├── write.py               # 数据写入脚本
│   ├── read.py                # 查询脚本
│   └── demo.py                # 前端演示脚本

核心代码介绍

写入流程

写入过程分为两步:首先使用千问 VL 模型为每张图片生成一段描述文本,并存入 text_input 字段;然后调用多模态 Embedding 模型,分别将原始图片和描述文本转换为向量,对应 image_embeddingtext_embedding。这样一来,后续无论使用图片还是文字进行查询,都能在同一向量空间内完成比较。

为便于演示,本示例仅处理前 200 张图片。

完整代码可参考官方文档中的 write.py 脚本。请根据实际情况替换以下参数:

  • ES 连接地址、端口、用户名、密码
  • 百炼 API Key

执行 python3 write.py 后,控制台会逐条显示每张图片生成的描述及处理进度。

查询流程

查询脚本定义了四种检索类型。无论查询输入是文本还是图片,都会先调用百炼多模态模型生成对应的向量,然后根据检索类型匹配 image_embeddingtext_embedding 字段,最终返回最相似的结果。

详细代码见 read.py 脚本,其中 ES 配置参数与写入流程保持一致。

前端 Demo

基于 Streamlit 搭建的简易演示界面,可在浏览器中直接交互体验四种搜索模式。代码位于 demo.py 中。

操作流程

步骤一:配置参数

运行脚本前,请打开 write.pyread.py,修改以下配置项:

# ES配置
ES_HOST = ""        # 替换为您的ES实例地址
ES_PORT = 9200
ES_USER = ""        # 替换为您的ES用户名
ES_PASSWORD = "" # 替换为您的ES密码

# 百炼API配置(仅write.py需要)
DASHSCOPE_API_KEY = ""  # 替换为百炼平台中可用的API Key

步骤二:加载数据集

进入 scripts 目录,执行数据写入脚本:

cd scripts
python3 write.py

成功执行后,您会看到类似下面的输出:

INFO - [1/7] 创建 ES 客户端...
INFO - ES连接状态: xxx...
INFO - 处理第 1/200 张图片: xxx
INFO - 描述: xxx
...
INFO - 处理完成!成功: 200, 失败: 0

步骤三:验证数据写入(可选)

运行查询脚本确认数据已正确写入:

python3 read.py

以“以文搜图”为例,搜索关键词“狮子”,结果类似:

以文搜图 - 搜索关键词"狮子"
✓ 得分: 0.8077 - 一只狮子坐在倒下的树干上,周围是茂密的灌木和树枝
✓ 得分: 0.7732 - 雄壮的狮子站在草地上,鬃毛在阳光下威武宁静
✓ 得分: 0.7566 - 雄狮特写,鬃毛浓密,眼神锐利

步骤四:启动前端演示

streamlit run demo.py

浏览器会自动打开 https://localhost:8501,界面直观易用。

步骤五:多模态向量检索

在搜索设置中选择检索类型(以文搜图、以文搜文、以图搜图、以图搜文),输入文字或上传图片,点击搜索即可查看匹配结果。

来源:https://juejin.cn/post/7646633153139359787
上一篇Claude Code工具调用性能分析:瀑布流时间线快速定位瓶颈 下一篇完全解读缺页中断与一般中断的主要区别
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
RAG四标融合企业知识资产体系四库协同GEO优化实践
AI教程 · 2026-07-01

RAG四标融合企业知识资产体系四库协同GEO优化实践

生成式AI正在彻底改写信息检索的底层逻辑。传统SEO依赖关键词堆砌和外链建设的策略,在大模型的内容采信规则下已经基本失效。取而代之的,是生成式引擎优化(GEO)。它不再关注外链数量,而是重点衡量你的知识是否结构化、证据链是否坚实、信源是否可靠——这些维度才是RAG(检索增强生成)架构真正看重的核心指

一个普通上班人分享WorkBuddy使用心得与真实体验
AI教程 · 2026-07-01

一个普通上班人分享WorkBuddy使用心得与真实体验

前言 最近我开始使用WorkBuddy——这是腾讯推出的一款AI办公工作台。差不多用了一周时间,趁印象还新鲜,把真实的使用感受记录下来,给还在犹豫的朋友做个参考。不吹不黑,只说实际体验。 初印象:不只是聊天机器人 之前用过不少AI工具,大多数就是个对话框,你问它答,答完就结束了。WorkBuddy不

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录
AI教程 · 2026-07-01

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录

先讲一个颇具戏剧性的开端。 这件事的开端颇显荒诞——有用户前来咨询,称AI Pro版的介绍中提到我们有一款“视频录制拓展”。团队全体成员都感到困惑,翻遍产品列表,发现根本不存在该组件。AI那种“一本正经胡说八道”的能力,这次确实让我们陷入尴尬。 按常理,此事到此便可结束——一句“抱歉,暂时没有这个拓

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同
AI教程 · 2026-07-01

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同

OLAP和SQL-on-Hadoop虽都使用SQL查询数据,但本质不同。SQL-on-Hadoop负责海量数据批量计算与ETL,查询速度秒级至分钟级;OLAP通过预聚合实现毫秒级多维分析,适合BI报表。两者在数据平台分工协作,前者是后厨加工,后者是前台快速服务。

GEO优化深度解析:AI偏好FAQ还是长文内容?
AI教程 · 2026-07-01

GEO优化深度解析:AI偏好FAQ还是长文内容?

在GEO优化中,AI对内容形式无统一偏好:FAQ在简单查询中引用率41%,长文在复杂查询中达58%。内容应基于用户意图选择形式,FAQ适配简单事实类问题,长文建立主题权威,两者互补而非替代。