大家好,我是星浩。该项目为某游乐园AI客服助手,旨在全天候自动解答票务等高频问题并支持图片查询。核心技术为RAG,挑战在于处理多样非结构化文档并确保答案准确。方案涉及PyMuPDF等多模态文档解析、FAISS向量检索、文本与CLIP图像Embedding混合检索,并根据场最选用不同知识切片策略以平衡效果与成本。
打造一款7x24小时在线的AI客服助手,主要实现以下功能:
如票务、入园须知、会员权益等,减轻人工客服压力。
所有答案均来源于官方知识库,杜绝错误或过时信息。
不仅能处理文本问题,还能理解并回应图片相关的查询(如活动海报等)。
1.知识来源多样化
官方规定(PDF)、内部FAQ(Word)、网页公告、活动介绍(含大量图片和表格)等多种文档格式。
2.非结构化数据处理
如何有效提取并理解PDF、Word中的表格与图片信息,是RAG成功的关键。
3.知识有效组织
需将海量、零散知识点切片(Chunking)并建立索引,确保检索准确。
4.答案有效性保障
确保最终答案严格基于检索内容,避免大模型“幻觉”。
1.文档处理库
2.文本Embedding模型
3.图像Embedding模型
4.向量数据库/库
5.大语言模型(LLM)
6.流程编排
1.安装所有必需的 Python 库
2.安装 Google Tesseract OCR 引擎
从 github.com/UB-Mannheim… 下载并安装。
请确保 tesseract 的可执行文件路径已添加到系统的 PATH 环境变量中。
3.设置环境变量:
从阿里云百炼平台获取的 API Key。
(可选) 您的 Hugging Face Token,用于下载 CLIP 模型,避免手动确认。
检查环境变量
初始化百炼兼容的 OpenAI 客户端
加载 CLIP 模型用于图像处理
定义全局变量
遍历docx文件所有元素(段落、表格),提取为独立内容区块(chunks)。
提取每个段落内的纯文本内容,去除多余空白,并标注"type":"text"。
将Word表格转换为Markdown格式,读取表头与数据,组合为Markdown表格字符串,并标注"type":"table"。
使用fitz(PyMuPDF)逐页读取PDF,将复合文档拆解为纯文本与独立图片,便于RAG后续处理。
遍历每页,提取所有纯文本内容,每页文本保存为独立chunk,附带页码。
检测并提取页面中所有图片,保存为唯一文件名(含原始文件名、页码、图片索引),记录图片路径。
通过OCR“看图识字”,提取图片中的文字信息,适用于扫描版PDF或截图。
调用Tesseract OCR引擎的Python封装,image_to_string为核心方法,lang='chi_sim+eng'支持中英文识别。
4.小结
OCR技术处理扫描文档与图片文字,确保多格式内容完整转换为可检索数据。
所有内容按类型标记并分块存储,为后续向量化处理奠定基础。
模型:CLIP ViT-Base-Patch32
维度:512
用途:文本与图像向量在同一空间,支持跨模态相似度计算,可实现文本到图像检索。
1.文本检索和图像检索
结合文本和图像的搜索结果,为LLM提供更丰富的上下文:
文本检索:无条件执行,向量化查询后在文本索引库中检索相似文本片段;
图像检索:当用户查询包含“海报”、“图片”等关键词时触发,使用CLIP生成向量,在图像索引库检索相关图片。
2. 构建 Prompt
3.调用LLM生成最终答案
调用LLM生成答案
答案后处理:如果上下文包含图片,提示用户
4.模拟问题
知识切片是RAG系统的核心,直接影响检索质量和回答准确性。常见切片策略如下:
方法:优先在句子边界切分,采用重叠机制确保上下文连续,长度可控。
优点:实现简单、速度快、长度统一,适合批量处理技术文档和规范文件。
场景:需统一长度、批量处理大量文档。
改进的固定长度切片:统一长度,适合批量处理,灵活性一般。 语义切片:语义完整,适合自然语言文本,长度不均。 LLM切片:智能分割,质量高,成本高。 层次切片:结构清晰,适合结构化文档,依赖格式。 滑动窗口切片:上下文好,召回率高,重复内容多。 结论:针对不同知识库和应用场景,应根据实际需求选择合适的切片策略,综合考虑处理效率、检索准确性与系统成本。
END
如果你觉得本文有帮助,欢迎点赞、在看、转发,也欢迎留言分享你的经验!
往期文章回顾:
目录
大家好,我是星浩。该项目为某游乐园AI客服助手,旨在全天候自动解答票务等高频问题并支持图片查询。核心技术为RAG,挑战在于处理多样非结构化文档并确保答案准确。方案涉及PyMuPDF等多模态文档解析、FAISS向量检索、文本与CLIP图像Embedding混合检索,并根据场最选用不同知识切片策略以平衡效果与成本。
1.项目目标和定位
打造一款7x24小时在线的AI客服助手,主要实现以下功能:
如票务、入园须知、会员权益等,减轻人工客服压力。
所有答案均来源于官方知识库,杜绝错误或过时信息。
不仅能处理文本问题,还能理解并回应图片相关的查询(如活动海报等)。
2.核心挑战分析
1.知识来源多样化
官方规定(PDF)、内部FAQ(Word)、网页公告、活动介绍(含大量图片和表格)等多种文档格式。
2.非结构化数据处理
如何有效提取并理解PDF、Word中的表格与图片信息,是RAG成功的关键。
3.知识有效组织
需将海量、零散知识点切片(Chunking)并建立索引,确保检索准确。
4.答案有效性保障
确保最终答案严格基于检索内容,避免大模型“幻觉”。
3.技术架构选型
1.文档处理库
2.文本Embedding模型
3.图像Embedding模型
4.向量数据库/库
5.大语言模型(LLM)
6.流程编排
4.安装与准备
1.安装所有必需的 Python 库
2.安装 Google Tesseract OCR 引擎
从 github.com/UB-Mannheim… 下载并安装。
请确保 tesseract 的可执行文件路径已添加到系统的 PATH 环境变量中。
3.设置环境变量:
从阿里云百炼平台获取的 API Key。
(可选) 您的 Hugging Face Token,用于下载 CLIP 模型,避免手动确认。
5.全局配置与模型加载
检查环境变量
初始化百炼兼容的 OpenAI 客户端
加载 CLIP 模型用于图像处理
定义全局变量
6.文档解析与内容提取详解
1. Word文档处理(.docx)
遍历docx文件所有元素(段落、表格),提取为独立内容区块(chunks)。
提取每个段落内的纯文本内容,去除多余空白,并标注"type":"text"。
将Word表格转换为Markdown格式,读取表头与数据,组合为Markdown表格字符串,并标注"type":"table"。
2. PDF文档处理(.pdf)
使用fitz(PyMuPDF)逐页读取PDF,将复合文档拆解为纯文本与独立图片,便于RAG后续处理。
遍历每页,提取所有纯文本内容,每页文本保存为独立chunk,附带页码。
检测并提取页面中所有图片,保存为唯一文件名(含原始文件名、页码、图片索引),记录图片路径。
3. 图片文件处理(.jpg, .png, .jpeg)
通过OCR“看图识字”,提取图片中的文字信息,适用于扫描版PDF或截图。
调用Tesseract OCR引擎的Python封装,image_to_string为核心方法,lang='chi_sim+eng'支持中英文识别。
4.小结
word文档分段提取文本与表格,PDF通过PyMuPDF解析文本和图片元素。
OCR技术处理扫描文档与图片文字,确保多格式内容完整转换为可检索数据。
所有内容按类型标记并分块存储,为后续向量化处理奠定基础。
7.模态处理与索引
1. 文本Embedding
2. CLIP图像Embedding
3. CLIP文本Embedding(用于图像检索)
模型:CLIP ViT-Base-Patch32
维度:512
用途:文本与图像向量在同一空间,支持跨模态相似度计算,可实现文本到图像检索。
4.创建 Faiss 索引
8.RAG问答流程
1.文本检索和图像检索
结合文本和图像的搜索结果,为LLM提供更丰富的上下文:
文本检索:无条件执行,向量化查询后在文本索引库中检索相似文本片段;
图像检索:当用户查询包含“海报”、“图片”等关键词时触发,使用CLIP生成向量,在图像索引库检索相关图片。
2. 构建 Prompt
3.调用LLM生成最终答案
调用LLM生成答案
答案后处理:如果上下文包含图片,提示用户
4.模拟问题
9.知识切片(Chunking)策略
知识切片是RAG系统的核心,直接影响检索质量和回答准确性。常见切片策略如下:
1. 改进的固定长度切片
方法:优先在句子边界切分,采用重叠机制确保上下文连续,长度可控。
优点:实现简单、速度快、长度统一,适合批量处理技术文档和规范文件。
场景:需统一长度、批量处理大量文档。
2. 语义切片
3. LLM语义切片
4. 层次切片
5. 滑动窗口切片
6. 切片策略对比与优缺点
改进的固定长度切片:统一长度,适合批量处理,灵活性一般。 语义切片:语义完整,适合自然语言文本,长度不均。 LLM切片:智能分割,质量高,成本高。 层次切片:结构清晰,适合结构化文档,依赖格式。 滑动窗口切片:上下文好,召回率高,重复内容多。 结论:针对不同知识库和应用场景,应根据实际需求选择合适的切片策略,综合考虑处理效率、检索准确性与系统成本。
END
如果你觉得本文有帮助,欢迎点赞、在看、转发,也欢迎留言分享你的经验!
往期文章回顾: