链载Ai

标题: 多模态RAG的三类图文问答实现方式,你知道多少种? [打印本页]

作者: 链载Ai    时间: 昨天 18:38
标题: 多模态RAG的三类图文问答实现方式,你知道多少种?

多模态RAG的三类图文问答实现方式,你知道多少种?


文章目标

本文面向RAG 图文混合问答系统感兴趣的读者,旨在帮助大家:

小提示
本次文章配套代码开源地址:https://github.com/li-xiu-qi/XiaokeAILabs/tree/main/datas/mixd_image_text


目录



前言

本文围绕嵌入型图文混合问答系统的实现展开,核心内容包括:

图文混合问答是当前AI领域的一个热门研究方向,能够让机器更好地理解和回应包含视觉信息的用户查询。本文详细介绍了一种嵌入型图文混合问答系统的实现原理与技术架构。我们将探讨如何从Markdown文档中提取图片信息,利用视觉语言模型(VLM)对图片内容进行智能分析和描述生成,并将这些视觉信息与文本内容有效融合。通过异步批量处理、正则表达式图片链接提取、AI描述增强等技术,系统能够高效处理图文混合内容。最终,大型语言模型(LLM)基于增强后的图文内容生成包含相关图片的准确回答。本文旨在为开发者提供一个清晰、可实践的嵌入型图文问答系统构建介绍。

三类实现图文问答的方式

三类图文问答系统

最近有群友问我:图文问答是如何实现的呢?本来我觉得过于简单了,但是对于某些人群来说,这确实是个很有意思的问题,所以本次专门准备了这篇文章来详细聊聊。

其实图文问答有多种实现方式,我可以把它分成三个主要类别:

第一种:嵌入型

嵌入型就是指图片是嵌入到文章或者说参考内容里面的,比如Markdown语法里面同时嵌入了图片链接,这就是嵌入型。本次教程使用的就是嵌入型,我们会详细讲解如何实现。

第二种:检索型

检索型可以参考我的SmartImageFinder项目,地址在:

https://github.com/li-xiu-qi/SmartlmageFinder

,本质上就是通过多模态检索的形式对图片进行检索,然后结合检索到的图片进行问答,但在这之前,也是需要对图片进行一些描述性的工作,不然效果也不太好。SmartImageFinder是一个智能的图片搜索引擎和管理系统,能够实现精准的文本搜图、以图搜图等智能检索方式,同时提供完整的图片管理解决方案。该项目采用 FastAPI + React 技术栈,集成 Jina CLIP V2 和多模态大语言模型,为个人图片管理提供一站式解决方案。

第三种:生成型

生成型可以是类似Stable Diffusion这类图片生成模型生成的图片,再让模型基于生成的图片输出带有图片的答案,或者反过来说先生成文本,再使用大模型调用工具使得输出对应的配图,并且插入到文章里面。

其他细分

当然,嵌入型还有其他的细分实现方式:

感兴趣的同学可以看看,但是我们不能一次性讲太多,要渐进式学习哈?

文章内容来源

顺便提一下,本次教程的核心技术其实是从我的另一个项目 Linka 中抽离出来的一个重要知识点

Linka是一个基于大语言模型的智能联网搜索系统,为每个回答提供详细的信息来源和引用链接,确保信息的可靠性,专注于提供准确、实时的信息检索,能够在回答中智能地插入相关图片,提供更直观的信息展示。

我们今天要讲的嵌入型图文问答系统正是 Linka 项目中的一个重要技术环节——当 Linka 从网页中提取到包含图片的内容时,就需要使用类似的技术来让大模型理解和处理这些图文混合的信息。

觉得有收获记得给我点赞、关注,转发给需要的人,作者的创作能量就差您这关键的一份鼓励,您的支持必不可少!本次教程的完整代码可以在这里找到:地址:https://github.com/li-xiu-qi/XiaokeAILabs/tree/main/datas/mixd_image_text

好了,言归正传,今天我们主要聊聊嵌入型图文问答系统的具体实现。


?️ 系统架构概览

图文混合问答系统主要包含以下几个核心组件:

架构图
  1. 图片内容分析器- 负责提取和理解图片中的视觉信息
  2. 文本处理引擎- 处理Markdown文档中的文本内容
  3. 多模态融合模块- 将图片分析结果与文本内容整合
  4. 问答生成器- 基于融合后的内容生成最终答案

⚙️ 核心技术实现

嵌入型图文问答系统架构

? 1. 图片内容智能分析

系统的第一个关键步骤是对文档中的图片进行智能分析。我们使用了基于视觉语言模型(VLM)的异步图片分析技术:

classMarkdownImageEnhancer:
def__init__(self, provider="zhipu", api_key=None, vision_model=None):
self.provider = provider
self.api_key = api_key
self.vision_model = vision_model

技术特点:

? 2. 图片URL提取与预处理

系统使用正则表达式提取Markdown文档中的图片信息:

IMG_TAG_RE = re.compile(r'!\[([^\]]*)\]\((https?://[^\)]+)\)', re.IGNORECASE)

? Markdown图片和链接语法基础

在深入解析正则表达式之前,我们先回顾一下Markdown中图片和链接的基本语法:

图片语法

Markdown图片语法遵循以下格式:

![alt文本](图片URL "可选标题")

语法构成:

示例:

![可爱的小猫](https://example.com/cat.jpg "我家的小猫咪")
![](https://example.com/dog.png) <!-- 空的alt文本 -->
![边境牧羊犬](./images/border-collie.jpg) <!-- 相对路径 -->
链接语法

Markdown链接语法格式:

[链接文本](URL "可选标题")

对比图片和链接:

类型
语法
示例
图片
![alt文本](URL)![猫咪](cat.jpg)
链接
[链接文本](URL)[点击这里](https://example.com)

关键区别就是图片语法前面有感叹号!

支持的图片格式

我们的系统主要处理远程图片(HTTP/HTTPS协议),常见格式包括:

实际应用场景

在RAG系统中,我们经常遇到这些情况:

# 技术文档示例
![系统架构图](https://cdn.example.com/architecture.png)
> 这是我们的整体系统架构,包含前端、后端和数据库三层结构。

详细的实现可以参考[官方文档](https://docs.example.com)。

![流程图](https://static.example.com/workflow.svg "业务流程示意图")
> 业务处理流程从用户请求开始,经过验证、处理、存储等多个环节。

让我们详细解析这个正则表达式的构成:

正则表达式详解

整体结构:!\[([^\]]*)\]\((https?://[^\)]+)\)

  1. !- 匹配感叹号,Markdown图片语法的开始标识
  2. \[- 匹配左方括号[,需要转义因为方括号在正则中有特殊含义
  3. ([^\]]*)- 第一个捕获组,匹配alt文本







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5