游乐游手机版
首页/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工具调用性能分析:瀑布流时间线快速定位瓶颈 下一篇完全解读缺页中断与一般中断的主要区别
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

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

同类最新

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

更多
2026实测解析GPT-5.5模型能力详解与国内合规使用规范
AI教程 · 2026-06-03

2026实测解析GPT-5.5模型能力详解与国内合规使用规范

2026年,AI大模型迎来了又一次迭代升级。GPT-5 5凭借在多模态精细化处理能力上的跨越式突破,正逐步成为职场办公、内容创作、代码开发以及数据优化等领域的核心生产力工具。然而,对国内多数用户而言,当前仍面临不少现实难题:渠道杂乱、合规边界模糊、账号频繁被封、数据泄露风险——各类非正规镜像站、共享

分时操作系统和实时操作系统的主要区别
AI教程 · 2026-06-03

分时操作系统和实时操作系统的主要区别

分时操作系统和实时操作系统区别 ?️ 操作系统家族里,有两类系统经常被放在一起比较:分时操作系统和实时操作系统。它们虽然都叫“操作系统”,但设计哲学、工作机制和应用场景可以说是天差地别。一个追求“公平共享”,一个追求“确定性响应”。这篇文章打算从定义、核心机制、调度策略、实际应用等维度,把这两者的本

企业AI智能体从零搭建实战踩坑经验全记录
AI教程 · 2026-06-03

企业AI智能体从零搭建实战踩坑经验全记录

去年开始用腾讯云智能体开发平台(ADP)跑了几个企业项目,从最基础的客服Bot一路干到多Agent协同系统,中间踩的坑不少,但积累下来的经验价值也相当可观。这篇文章就聊聊实际落地过程里的那些关键节点和教训,给同样在腾讯云上折腾AI Agent的朋友做个参考。为什么选腾讯云ADP而不是从零搭建做第一个

Selenium自动化测试入门:从环境搭建到首个可维护用例
AI教程 · 2026-06-03

Selenium自动化测试入门:从环境搭建到首个可维护用例

Selenium 入门的核心不在于记住多少 API,而在于把三件事想清楚:环境别装错版本、等待机制别用 sleep、用例结构别写成流水账。下面按照“装环境 → 跑通第一个脚本 → 理解等待 → 选对定位器 → 拆成 Page Object”的顺序走一遍,每一步都附上代码,踩过的坑直接标出来。 Sel

专业表格魔法师 QoderWork CN 让脏数据秒变仪表盘神器
AI教程 · 2026-06-03

专业表格魔法师 QoderWork CN 让脏数据秒变仪表盘神器

使用案例 今天聊聊怎么用阿里巴巴的 QoderWork CN 桌面应用智能体,把 Excel 里那堆乱糟糟的原始数据清洗干净,再做成可视化的看板。整个过程基本不需要写代码,全靠自然语言对话就能搞定。下面就用一个实际案例,把操作步骤拆开来讲。 步骤一:安装并注册 QoderWork CN 账号 先到