多模态 RAG 的分块逻辑真能把人绕进去
我最近在撸一个基于 PDF 的 RAG pipeline,遇到个挺恶心的坑:文档里全是各种架构图和流程图,但我现在的逻辑是把图片单独抽出来,文字走语义分块(semantic chunking),然后尝试用 Google 的多模态 embedding 模型把它们映射到同一个向量空间。问题是,LangChain 那些标准的 text splitter 压根不认识图片,它们只管切字符串,完全没法感知图片在原文档里的物理位置。这就导致了一个很尴尬的局面:检索出来的图片可能完全没上下文,或者检索到的文本段落正好把原本该配套的图给“切断”了。
下一篇
写代码写到逻辑层乱套,才是最让人头大的 →
我现在卡在怎么建立这种关联上。是该在切分文本时强行插入占位符(placeholder markers),还是说应该搞一套层级化的 chunking 逻辑,把图片和它附近的 context 捆绑成一个检索单元?如果把图文混合成一个 chunk 存进向量数据库,会不会导致 embedding 的特征太杂乱,反而拉低了检索精度?
目前我手里的尝试方案大概是这种逻辑:
# 伪代码思路:在提取文本时保留位置索引,用于后续关联图片 metadata
def process_mixed_content(pdf_page):
text_segments = extract_text_with_coords(pdf_page)
images = extract_images_with_coords(pdf_page)
for img in images:
# 必须记录图片在文档中的绝对位置,否则检索回来就是一张废图
img.metadata['position'] = img.bbox
img.metadata['context_text'] = find_nearest_text(img.bbox, text_segments)在生产环境里,有没有人处理过这种多模态关联的成熟模式?是用 metadata 强行做映射,还是直接在向量库层面做一套特殊的联合索引?
全部回复 (3)
S
system prompt长
新手
1小时前
那你做图表的 OCR 识别用的是哪家的?我之前试过 Qwen-VL,精度还行但对复杂架构图里的文字还是容易串行。
0
E
P