Back to Headlines

无框架环境下利用 PyMuPDF 与 ChromaDB 构建高效文档摘要与问答系统(RAG实战)

16 小时前

本文详细展示了如何在不依赖框架的情况下,使用 PyMuPDF 和 ChromaDB 构建一个端到端的 PDF 文档摘要与问答系统(RAG),并以 SEAD-Agent 项目为例进行实践说明。 首先,在文档处理阶段,系统通过 fitz.open 读取 PDF 文件,逐页提取文本与图像。文本使用 get_text() 提取,图像通过 get_images(full=True) 获取原始像素数据。提取后的文本交由 _split_text 方法按句号分段,每段不超过 512 字符,形成文本块;图像则通过 tobytes("png") 转为字节流,再使用 VLM(Pixtral 12B)生成描述性标题。每个文本块和图像标题均分配唯一 ID,统一加入 chunks 列表。 在图像 caption 生成中,系统将图像编码为 Base64 字符串,并通过多模态提示(包含系统指令与图像 URL)调用大模型,生成精准的视觉内容描述。例如,一张脑与叶结合的 logo 被识别为“象征环境神经科学的组织标志”,而流程图则被解析为“数据创建—模型构建—模拟分析—结果输出”的四阶段流程。 随后,系统对每个文本块进行独立摘要。通过 DOCUMENT_SUMMARIZATION_PROMPT 模板,结合内容生成结构化摘要,涵盖研究目标、关键发现、方法、应用与局限。所有块摘要汇总后,根据用户需求(简要或详细)调用 VLM 生成最终综合摘要。例如,文档《EcoSphere:可持续城市发展的自动化碳排放与成本优化决策支持工具》被总结为:该工具整合生命周期评估与多目标优化算法,支持城市规划中碳排放与成本的协同优化,适用于政策制定与工程设计。 在向量化存储环节,系统使用本地 SentenceTransformer 模型(all-MiniLM-L6-v2)生成嵌入向量,并通过 ChromaDB 的持久化客户端将文本块、元数据与嵌入存储至本地数据库。每个条目包含 chunk 类型、页码、来源等信息,确保检索可追溯。 在问答阶段,用户输入问题后,系统将问题编码为向量,通过语义搜索在 ChromaDB 中检索最相似的前 3 个文档块。日志显示,查询“城市规划、EcoSphere”返回的相似度均在 0.797 左右,匹配内容涉及区域评估与可视化对比,有效支持了精准回答。 整个流程完整实现了从文档解析、内容理解、向量化存储到语义检索与生成的 RAG 闭环,无需依赖 LangChain 等框架,展现了底层技术的灵活性与可控性。

Related Links