基于qwen-long模型實現(xiàn)多模態(tài)和長文本分析 原創(chuàng)
“ 多模態(tài)RAG實現(xiàn)遠比傳統(tǒng)文本RAG要復雜得多。”
在傳統(tǒng)的RAG中我們一般情況下是把其它模態(tài)的數(shù)據(jù)轉換成文本,然后通過對文本數(shù)據(jù)進行向量化,并實現(xiàn)相似度檢索和增強的過程。
但在當今時代,文本只是數(shù)據(jù)表現(xiàn)的一種形式,而圖片音視頻等才是當前的主流形式;還以傳統(tǒng)RAG為例,以word,pdf等復雜文檔中,其數(shù)據(jù)形式往往采用圖文結合的方式,這時傳統(tǒng)的做法是采用OCR或其它形式直接把文檔內容全部轉換成文本格式;但這時圖片和結構圖里面的信息會嚴重丟失。
即使你進行格式轉換,想直接把整個文檔丟給模型進行處理,這時你發(fā)現(xiàn)你很難讀取文檔中的圖片數(shù)據(jù),雖然可以通過一些庫分布讀取文檔中的文本和圖片數(shù)據(jù);但關于圖片的描述數(shù)據(jù)就沒了,因為你不知道應該怎么關聯(lián)文本和圖片之間的關系。

所以,今天我們就使用多模態(tài)模型qwen-long直接對文檔進行處理;我們只需要把文檔上傳即可,其它的都交由模型自己處理;雖然說其并沒有完全達到我們的目的,但也算是一種解決問題的方式。
qwen-long模型多模態(tài)文檔處理
在qwen-long中我們進行文檔處理的第一步就是上傳文檔,然后后續(xù)的處理只需要提供一個文檔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"), # 如果您沒有配置環(huán)境變量,請在此處替換您的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就是我們后續(xù)對話的文檔標識。
之所以使用文檔上傳的方式,是因為其它的方式只支持單模態(tài)數(shù)據(jù)處理,如文本,圖片,表格等;但我們的文檔是一個完整的主體,如果對文檔進行拆分就會導致其內容丟失。
上傳完成之后,我們就可以使用文件ID作為唯一標識進行對話了。這里需要注意的點是,要把fileid后面的文件id換成你自己的f'fileid://{file_id}'。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您沒有配置環(huán)境變量,請在此處替換您的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

















