
基于qwen-long模型实现多模态和长文本分析 原创
“ 多模态RAG实现远比传统文本RAG要复杂得多。”
在传统的RAG中我们一般情况下是把其它模态的数据转换成文本,然后通过对文本数据进行向量化,并实现相似度检索和增强的过程。
但在当今时代,文本只是数据表现的一种形式,而图片音视频等才是当前的主流形式;还以传统RAG为例,以word,pdf等复杂文档中,其数据形式往往采用图文结合的方式,这时传统的做法是采用OCR或其它形式直接把文档内容全部转换成文本格式;但这时图片和结构图里面的信息会严重丢失。
即使你进行格式转换,想直接把整个文档丢给模型进行处理,这时你发现你很难读取文档中的图片数据,虽然可以通过一些库分布读取文档中的文本和图片数据;但关于图片的描述数据就没了,因为你不知道应该怎么关联文本和图片之间的关系。
所以,今天我们就使用多模态模型qwen-long直接对文档进行处理;我们只需要把文档上传即可,其它的都交由模型自己处理;虽然说其并没有完全达到我们的目的,但也算是一种解决问题的方式。
qwen-long模型多模态文档处理
在qwen-long中我们进行文档处理的第一步就是上传文档,然后后续的处理只需要提供一个文档ID即可;至于整个文档是怎么处理的,我们不需要关心,而且对我们也是不可见的。
qwen-long文档地址
在使用qwen-long时,我们第一步就是上传文件,使用openai的组件进行上传,代码案例如下:
import os
from pathlib import Path
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处替换您的API-KEY
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填写DashScope服务base_url
)
file_object = client.files.create(file=Path("阿里云百炼系列手机产品介绍.docx"), purpose="file-extract")
print(file_object.id)
上传完成之后,我们可以获取一个文件ID,这个ID就是我们后续对话的文档标识。
之所以使用文档上传的方式,是因为其它的方式只支持单模态数据处理,如文本,图片,表格等;但我们的文档是一个完整的主体,如果对文档进行拆分就会导致其内容丢失。
上传完成之后,我们就可以使用文件ID作为唯一标识进行对话了。这里需要注意的点是,要把fileid后面的文件id换成你自己的f'fileid://{file_id}'。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处替换您的API-KEY
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填写DashScope服务base_url
)
try:
# 初始化messages列表
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
# 请将 'file-fe-xxx'替换为您实际对话场景所使用的 fileid。
{'role': 'system', 'content': f'fileid://file-fe-xxx'},
{'role': 'user', 'content': '这篇文章讲了什么?'}
],
# 所有代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
stream=True,
stream_optinotallow={"include_usage": True}
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
# 拼接输出内容
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print(full_content)
except BadRequestError as e:
print(f"错误信息:{e}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
之后,我们就可以对文档中的内容进行询问。
本文转载自AI探索时代 作者:DFires
