引言
我是一名大型企业的IT技术采购负责人,从一年前开始关注基于LLM的企业知识库部署可行方案;我从各种开源框架和LLM模型的组合开始测试,伴随着框架功能的完善,模型能力的提升,切实感受到企业RAG知识库的可用性显著提高,落地时机正逐步成熟,然而将 RAG 框架应用于企业内部的知识库管理时,面临着数据安全、半结构化文档处理等挑战。本文将探讨如何使用Qwen-coder在本地实现RAG框架能力Bootstrap,解决上述问题,并提供详细的技术实现和案例分析。
发现问题
在企业内部,知识库通常包含大量的半结构化文档,如 PDF、Word 文档等,这些文档中往往含有丰富的图表信息。传统的 RAG 框架在处理这类文档时,难以有效完整提取图表中的信息,导致知识库检索的准确性降低。此外,企业在使用外部 API 服务时,还存在数据安全这条红线,这里需要提供足够技术手段使数据泄露安全风险可控,保证原始数据在企业本地存储,提交给API服务接口的输入数据无法恢复出原始数据。如何在保证数据安全的前提下,实现高效的知识库管理和信息检索,成为了一个亟待解决的问题。
定义问题
两个月前,我偶然搜到一篇大模型服务平台百炼实践教程 基于本地知识库构建RAG应用link,如获至宝立刻进行了本地搭建的尝试,测试后发现该方案无法对半结构化文档中的图表信息内容进行提取,这确实对RAG企业知识库实现打了不小折扣;我继续在阿里云的文档与社区中尝试搜索“文档RAG”,发现了文档理解这个产品主题,于是我在阿里云的文档与社区中尝试搜索“文档RAG”,发现了文档理解这个主题,点入后体验了文档智能解析的轻应用之后,一切豁然开朗:只要本地调用文档理解API,就可以实现文档页面中包含图表内容的全量分析提取,从而可以解决上述问题,而且在API调用过程中,原始数据被同步为生命周期为12小时的页面快照,该快照为受限访问,上述措施保证了企业数据的安全可控。到这里,我忽然萌生了一个想法,尝试通过RAG知识库的工作范式,来实现文档理解个预处理过程的闭环Bootstrap。
解决问题
之前在开源框架和LLM模型测试中,受限于本地显卡资源,只尝试过Qwen2.5-14b版本,这次断然要领教一下Qwen2.5-72b的魄力。按link链接的实践教程创建并启动本地RAG应用,如图
首先制作上传文档解析的API文档,选定模型Qwen2.5-72b,参数配置中,“最大回复长度”表示生成代码及其说明的总token量,为了得到完整的生成结果,这个值尽可能选最大值;"携带上下文轮数"表示之前n轮次的对话内容可保留进行再推理的,我对这个代码生成范式很有信心,认为9轮内肯定能生成符合期望的代码,召回片断数量我选了“5”,因为API文档很确定给出了代码实现的顺序步骤与结果响应的规范,且各步骤及其响应消息间不存在混叠;用户提示词:作为一位python编程专家,你的任务是使用专业的python编程语言来实现用户的具体需求。该需求:通过图形化界面选择本地文档(文件类型可为pdf、doc、docx、xlsx、xls、txt、md),通过文档解析(大模型版)接口调用,按步骤顺序处理,在每个步骤打印接口调用的消息,最后获取该本地文档的全部解析结果,并把该结果写入一个本地文本文件,新文本文件命名规则:原本地文档的文件名加上"预处理”。请针对该需求编写高效且规范的python代码。在编写过程中,请考虑代码的可读性、运行效率及异常处理,并假设你有完整的类库和框架支持。为确保解决方案的适用性,请提供相应注释说明关键逻辑部分,以及在必要时如何配置和调用该代码片段。接下来开始确认生成,果然不出所料生成代码存在瑕疵,接连出现了如图所示的报错,
原因是输入形参数量不匹配,响应消息的状态常量不正确,遇到这些问题只需要在下一轮提示词中,复制命令行的报错内容,并附加上“运行代码出现上述报错,修改与该报错有关的代码”,并执行继续代码生成,多半可以解决当前代码中的bug。但接下来图中的问题有点儿棘手,
除了需要修正响应数据的类型定义还要在生成输出文本时再进行数据类型转换,最终代码生成没有让我失望,巧妙解了决这个问题,对包含图表内容的半结构文档成功实现了预处理。为了验证上述解决方案的有效性,我选取了包含图中所示图表内容的半结构文档,
之前未经过预处理的文档,进行Rag知识库检索时无法定位到图表中的大量信息
经过预处理的文档,可以正确提取到图表中的信息并实现有效的对话问答。
总结
这种基于Rag知识库的工作范式,在参考API文档知识库的基础上,通过有效的提示词和强大的Qwen2.5-72b,在多轮对话推理中实现了文件解析的目标代码;该解决方案在满足企业数据安全合规的同时,增强了原有本地Rag框架对知识库信息获取的完整性,0代码开发实现了框架的闭环Bootstrap