大模型招投标文件关键数据提取方案
🖋️
大模型招投标文件关键数据提取方案 🖋️ 大模型招投标文件关键数据提取方案 Modified December 3, 2024 Code block Python Copy Generate JSON string output using best attempt prompting & parsing techniques. try: if len(json info) < len(input): json info, result = try parse ast to json(input) else: result = json.loads(json info) except json.JSONDecodeError: log.exception("error loading json, json=%s", input) return json info, {} else: if not isinstance(result, dict): log.exception("not expected dict type. type=%s:", type(result)) return json info, {} return json info, result else: return input, result 数据格式化 在确保 JSON 结构标准化后,还需要通过格式化工具对内容进行数据格式化。不同类型的数据,如日期、金额、文本等,需要遵循统一的格式要求。 • 日期格式:所有日期和时间字段都应格式化为标准的 14 位日期时间格式:YYYYMMDDHHMMSS。这可以确保时间字段在不同系统中具有一致的解析方式。 • 金额格式:金额字段应保留原单位(如元、万元),并且格式化为无空格、无额外字符的数值形式(如 500000元),以便在后续财务分析或报告生成中能够准确使用。 • 文本字段格式化:对文本字段中的特殊字符(如换行符、双引号)进行处理,确保文本内容不会破坏 JSON 的语法结构。比如,将双引号转义处理,或者移除无意义的换行符和空格。 如输入数据: Code block Plain Text Copy { "项目名称": "智能楼宇工程", "项目编号": "XZL 2023", "采购预算": " 7,000,000.00 元", "开标时间": "2024/01/01 09:00" } 格式化后的输出: Code block Plain Text Copy { "项目名称": "智能楼宇工程", "项目编号": "XZL 2023", "采购预算": "7000000元", "开标时间": "20240101090000" } 数据校验模块 校验模块是数据后处理过程中至关重要的一环。其作用是对最终的数据进行进一步的校验,确保数据的完整性、准确性和一致性。校验模块可以自动检测格式错误、逻辑冲突、缺失值等问题,并提供修复或警报机制。 格式校验 确保所有数据符合预期的格式标准,例如日期、金额、电话号码等字段的格式是否正确。 如:检查金额字段是否包含正确的货币单位,并确保数值的表示形式规范。 • 参考代码 Code block Plain Text Copy def validate currency format(amount str): if '元' in amount str or '万元' in amount str: try: amount = float(amount str.replace("万元", "").replace("元", "").replace(",", "").strip()) return True except ValueError: return False return False 逻辑校验 逻辑校验是检查数据之间的逻辑关系是否符合业务规则。例如: 时间校验:投标截止时间不能晚于开标时间。校验时需检查两个时间字段,确保逻辑正确。 • 校验方法:比较投标截止时间和开标时间,如果投标截止时间晚于开标时间,则返回错误。 • 参考代码 Code block Plain Text Copy from datetime import datetime def validate time order(submit time, open time): submit dt = datetime.strptime(submit time, "%Y%m%d%H%M%S") open dt = datetime.strptime(open time, "%Y%m%d%H%M%S") return submit dt <= open dt • 金额校验:采购预算金额不能小于中标金额。校验预算和中标金额,确保金额逻辑合理。 ◦ 校验方法:如果中标金额高于预算金额,则返回警报。 完整性校验 完整性校验确保所有关键字段都已经填入有效数据,避免信息缺失。对于未提供数据的字段,应填充默认值(如“无”),或触发错误提醒。 • 必填字段检查:对于某些字段,如“项目名称”、“项目编号”、“投标截止时间”,应强制要求填写,若缺失则进行标记或补全。 ◦ 校验方法:通过预定义的字段列表检查 JSON 输出中是否包含所有必填字段。 • 自动填充默认值:如果某个字段为空或缺失,可以自动填充默认值“无”。 • 参考代码 Code block Plain Text Copy def fill missing fields(data, default="无"): required fields = ["项目名称", "项目编号", "采购预算", "投标截止时间"] for field in required fields: if field not in data or not data[field]: data[field] = default return data 一致性校验确保同一信息在不同字段或位置的值保持一致。例如: • 项目编号一致性:项目编号在不同字段中应当相同,如出现在多个部分的项目编号不能出现不一致的情况。 ◦ 校验方法:检查项目编号是否一致,如果发现不同编号,则触发警报。 • 日期一致性:多个时间字段中如果是同一事件(如开始时间和结束时间在不同部分中重复出现),应确保其一致。 • 参考代码 Code block Plain Text Copy def validate data(json data): 1. 格式校验 if not validate date format(json data.get("投标截止时间", "")): print("投标截止时间格式错误") if not validate currency format(json data.get("采购预算", "")): print("采购预算格式错误") 2. 逻辑校验 if not validate time order(json data.get("投标截止时间", ""), json data.get("开标时间", "")): print("投标截止时间不能晚于开标时间") 3. 完整性校验 json data = fill missing fields(json data) 4. 一致性校验 if json data.get("项目编号") != json data.get("计划编号"): print("项目编号与计划编号不一致") return json data 数据修复模块 检测到数据格式或逻辑错误后,通过基于规则修复与更高级模型调用进行修复,确保数据的完整性和准确性。通过修复模块,能够自动纠正常见的错误,如格式错误、缺失数据或逻辑冲突,避免手动修正,提高效率。 基于规则的自动修复 在大部分情况下,错误可以通过预定义的规则和算法进行自动修复。此步骤作为第一层处理机制,针对格式错误、简单的逻辑冲突、特殊字符处理等问题进行修正。 • 格式修正:通过正则表达式或预定义算法修复日期、金额、电话号码等格式错误。 • 逻辑修正:检查和修复时间顺序、金额逻辑等问题。对投标截止时间、开标时间、金额关系进行简单调整。 • 数据填补:自动填补缺失字段,使用“无”或从其他字段推导合理值。 提交更高级模型处理 对于规则无法解决的复杂错误,或者需要更高层次推理的情况,可以将这些Bad Case提交给高级模型(如 GLM 4 plus)处理。 • 处理复杂业务逻辑:当多个数据字段之间存在复杂的依赖关系时,普通的规则引擎可能无法有效处理,例如合同条款中的复杂逻辑冲突,此时可以利用高级模型的上下文理解能力进行推理和调整。 • 识别与处理领域特定信息:高级模型擅长理解和处理特定领域的复杂术语、语境或结构不明的信息,如行业专用术语、合同中的特殊条款等。 数据处理神器 Batch API Batch API 适用于无需即时反馈并需使用大模型处理大量请求的场景。通过 Batch API,开发者可以通过文件提交大量任务,且价格降低50%(GLM 4 Flash免费)、无并发限制。Batch API 使用指南 单次处理千万级数据 限时特惠资源包 GLM 4 AIR:卓越性能,性价比极高,高效处理海量数据,立即抢购: • 10亿 GLM 4 AIR 推理资源包(1个月) :立即购买,限时特惠仅需9.9元 Embedding 3:全新升级,性能全面提升,支持自定义向量维度,限时优惠: • 5000万 Embedding 3 3折尝鲜包(3个月) :立即购买,限时特惠仅需7.5元 Batch API 使用指南 立即购买 立即购买 数据格式化 在确保 JSON 结构标准化后,还需要通过格式化工具对内容进行数据格式化。不同类型的数据,如日期、金额、文本等,需要遵循统一的格式要求。 • 日期格式:所有日期和时间字段都应格式化为标准的 14 位日期时间格式:YYYYMMDDHHMMSS。这可以确保时间字段在不同系统中具有一致的解析方式。 • 金额格式:金额字段应保留原单位(如元、万元),并且格式化为无空格、无额外字符的数值形式(如 500000元),以便在后续财务分析或报告生成中能够准确使用。 • 文本字段格式化:对文本字段中的特殊字符(如换行符、双引号)进行处理,确保文本内容不会破坏 JSON 的语法结构。比如,将双引号转义处理,或者移除无意义的换行符和空格。 如输入数据: 格式化后的输出: 数据校验模块 校验模块是数据后处理过程中至关重要的一环。其作用是对最终的数据进行进一步的校验,确保数据的完整性、准确性和一致性。校验模块可以自动检测格式错误、逻辑冲突、缺失值等问题,并提供修复或警报机制。 格式校验 确保所有数据符合预期的格式标准,例如日期、金额、电话号码等字段的格式是否正确。 如:检查金额字段是否包含正确的货币单位,并确保数值的表示形式规范。 • 参考代码 逻辑校验 逻辑校验是检查数据之间的逻辑关系是否符合业务规则。例如: 时间校验:投标截止时间不能晚于开标时间。校验时需检查两个时间字段,确保逻辑正确。 • 校验方法:比较投标截止时间和开标时间,如果投标截止时间晚于开标时间,则返回错误。 • 参考代码 • 金额校验:采购预算金额不能小于中标金额。校验预算和中标金额,确保金额逻辑合理。 ◦ 校验方法:如果中标金额高于预算金额,则返回警报。 ◦ 校验方法:如果中标金额高于预算金额,则返回警报。 完整性校验 完整性校验确保所有关键字段都已经填入有效数据,避免信息缺失。对于未提供数据的字段,应填充默认值(如“无”),或触发错误提醒。 • 必填字段检查:对于某些字段,如“项目名称”、“项目编号”、“投标截止时间”,应强制要求填写,若缺失则进行标记或补全。 ◦ 校验方法:通过预定义的字段列表检查 JSON 输出中是否包含所有必填字段。 ◦ 校验方法:通过预定义的字段列表检查 JSON 输出中是否包含所有必填字段。 • 自动填充默认值:如果某个字段为空或缺失,可以自动填充默认值“无”。 • 参考代码 一致性校验确保同一信息在不同字段或位置的值保持一致。例如: • 项目编号一致性:项目编号在不同字段中应当相同,如出现在多个部分的项目编号不能出现不一致的情况。 ◦ 校验方法:检查项目编号是否一致,如果发现不同编号,则触发警报。 ◦ 校验方法:检查项目编号是否一致,如果发现不同编号,则触发警报。 • 日期一致性:多个时间字段中如果是同一事件(如开始时间和结束时间在不同部分中重复出现),应确保其一致。 • 参考代码 数据修复模块 检测到数据格式或逻辑错误后,通过基于规则修复与更高级模型调用进行修复,确保数据的完整性和准确性。通过修复模块,能够自动纠正常见的错误,如格式错误、缺失数据或逻辑冲突,避免手动修正,提高效率。 基于规则的自动修复 在大部分情况下,错误可以通过预定义的规则和算法进行自动修复。此步骤作为第一层处理机制,针对格式错误、简单的逻辑冲突、特殊字符处理等问题进行修正。 • 格式修正:通过正则表达式或预定义算法修复日期、金额、电话号码等格式错误。 • 逻辑修正:检查和修复时间顺序、金额逻辑等问题。对投标截止时间、开标时间、金额关系进行简单调整。 • 数据填补:自动填补缺失字段,使用“无”或从其他字段推导合理值。 提交更高级模型处理 对于规则无法解决的复杂错误,或者需要更高层次推理的情况,可以将这些Bad Case提交给高级模型(如 GLM 4 plus)处理。 • 处理复杂业务逻辑:当多个数据字段之间存在复杂的依赖关系时,普通的规则引擎可能无法有效处理,例如合同条款中的复杂逻辑冲突,此时可以利用高级模型的上下文理解能力进行推理和调整。 • 识别与处理领域特定信息:高级模型擅长理解和处理特定领域的复杂术语、语境或结构不明的信息,如行业专用术语、合同中的特殊条款等。 数据处理神器 Batch API Batch API 适用于无需即时反馈并需使用大模型处理大量请求的场景。通过 Batch API,开发者可以通过文件提交大量任务,且价格降低50%(GLM 4 Flash免费)、无并发限制。Batch API 使用指南 Batch API 使用指南 单次处理千万级数据 限时特惠资源包 GLM 4 AIR:卓越性能,性价比极高,高效处理海量数据,立即抢购: • 10亿 GLM 4 AIR 推理资源包(1个月) :立即购买,限时特惠仅需9.9元 立即购买 Embedding 3:全新升级,性能全面提升,支持自定义向量维度,限时优惠: • 5000万 Embedding 3 3折尝鲜包(3个月) :立即购买,限时特惠仅需7.5元 立即购买 😃 BigModel智谱AI大模型开放平台 BigModel智谱AI大模型开放平台 https://open.bigmodel.cn/ ZHIPU AI OPEN PLATFORM 大模型开放平台 新一代国产自主通用AI开放平台,致力于将产品技术与行业场景双轮驱动的中国先进的认知智能技术和千行百业应用相结合,构建更高精度、高效率、通用化的AI开发新模式,实现智谱大模型的产业化,将AI的好处带给每个人。 场景介绍 招投标文件包含大量复杂的信息,包括项目名称、投标方信息、资格要求、技术规范、价格清单、合同条款等。传统人工处理或基于简单规则的自动化工具可能难以快速、准确地从这些文件中提取关键数据。大语言模型(如GLM 4)能够对海量文本进行理解和解析,具备强大的信息提取能力。 本文档详细描述如何从工程化的角度构建一个借助大语言模型进行关键数据提取的方案,包括整体架构设计、数据预处理、Prompt工程、批量处理API、后处理与校验等各个环节。 一、方案框架 二、方案详情 输入模块设计 用于处理各种格式的文档输入,包括PDF、Word、Excel、网页等,转换成可解析的结构化文本。 • 多种文件格式支持: ◦ 需要支持从多种格式(PDF、Word、Excel、TXT等)中提取文本。对于图片,可以借助OCR工具进行文本提取,(开放平台工具:文档内容提取)。 ◦ 网页可以使用网页爬虫工具(如Scrapy、BeautifulSoup、Selenium)抓取网页中的文本和表格数据。通过解析HTML的DOM结构,提取目标数据。(平台暂无工具) 文档内容提取 ◦ 需要支持从多种格式(PDF、Word、Excel、TXT等)中提取文本。对于图片,可以借助OCR工具进行文本提取,(开放平台工具:文档内容提取)。 文档内容提取 ◦ 网页可以使用网页爬虫工具(如Scrapy、BeautifulSoup、Selenium)抓取网页中的文本和表格数据。通过解析HTML的DOM结构,提取目标数据。(平台暂无工具) • 参考代码 预处理模块设计 预处理模块的设计是整个数据处理流程的基础,直接影响到大语言模型后续处理的效果。通过文本清洗、文本规范化、分段分块、表格解析、上下文维护等功能,预处理模块能够将复杂的、多格式的数据源处理成统一、规范的输入数据,确保数据在转换过程中不失真,并为后续模型处理提供高质量的输入。数据的语义、结构以及相关性得以保留,特别是在处理复杂的文档结构、特殊符号、嵌套表格等数据。 • 去除噪音信息:常见的噪音信息包括页眉、页脚、版权声明等,这些信息对关键数据提取无关紧要,可以在预处理时过滤掉。 • 规范化文本:处理文本中的特殊符号、空白字符、异常换行等问题,确保输入给模型的文本格式整洁。 ◦ 日期格式统一:文档中可能会有多种日期表示方式,例如“2024年10月10日”、“10/10/2024”、“10 Oct 2024”。需要通过正则表达式或日期识别工具将所有的日期格式统一转换为标准的ISO格式(如“YYYY MM DD”)。 ◦ 方法:使用正则表达式匹配不同格式的日期,并将其标准化。例如: ◦ 日期格式统一:文档中可能会有多种日期表示方式,例如“2024年10月10日”、“10/10/2024”、“10 Oct 2024”。需要通过正则表达式或日期识别工具将所有的日期格式统一转换为标准的ISO格式(如“YYYY MM DD”)。 ◦ 方法:使用正则表达式匹配不同格式的日期,并将其标准化。例如: • 参考代码 • 货币与金额格式化:货币和金额在招投标文件中非常常见,可能以不同的符号、单位或表示方法出现。例如:“$1,000”、“1000美元”、“壹仟元整”。需要统一这些金额表示,确保货币单位和金额数字的格式标准化。 • 方法:通过正则表达式匹配货币符号或中文大写金额,并转换为标准形式。例如将“壹仟元”转换为“1000 CNY”,或将“$1,000”转换为“1000 USD”。 • 特殊符号处理:招投标文件中可能有特殊符号(如版权符号、数学符号、货币符号等),这些符号如果不加处理,可能在后续的 模型输入中失去原意或导致模型误解。因此,预处理模块需要对这些符号进行规范化处理。 • 表格数据处理:表格提取工具:对于PDF或Word文档中的表格,可以使用表格解析工具(如pdfplumber或python docx)提取表格的结构和数据。提取后的表格数据可以转化为CSV或JSON格式,方便后续处理。 • 合并单元格处理:如果表格包含合并单元格,预处理模块需要将合并单元格的数据平铺展开,确保每个单元格都包含完整的信息。例如,将合并的表头信息扩展到所有相应列的单元格中。 • 方法:表格数据的结构化转换时,可以转换为Markdown和 HTML 格式能很好地保留表格的结构,并方便LLM理解。在实践中,建议使用HTML表示复杂表格,例如: LLM处理模块 在使用大语言模型(LLM,如 GPT)对预处理后的文本进行关键数据提取时,Prompt 工程是方案的核心。Prompt 工程的目标是设计合理的提示词,以最大化 LLM 的性能,从复杂的文本中准确、有效地提取出关键信息。 Prompt 策略 策略 01:明确的待处理内容指引 在构建 Prompt 时,明确告诉模型它需要处理的内容是关键步骤之一。应清晰地定义需要处理的文本,并使用标记将其框起来。例如: 通过这种方式,模型能够准确识别待处理的内容范围,并从中提取需要的信息。 策略 02:提供明确字段定义 这是 Prompt 的关键部分,字段定义明确了需要提取的信息类型,以及每个字段应当填入的内容。每个字段的名称、用途及要求都要具体化,让模型有明确的提取方向。字段定义为 LLM 提供了标准,使它在解析文本时能够准确地提取所需信息并填充到对应字段。例如: 这种方式,Prompt 可以为 LLM 提供清晰的提取标准和目标。 策略 03:异常处理 为确保 LLM 不输出多余信息,并在面对缺失或不明确的数据时进行合理处理,必须设置一些异常处理原则。例如, 如果某些字段信息在文本中缺失或未识别,Prompt 应规定使用默认值(如“无”)填充。同时,针对日期、金额等特殊数据类型,应明确要求 LLM 符合标准格式(如 YYYYMMDDHHMMSS 或保留金额单位)。这一规则可以确保模型输出的完整性和一致性,不会因为部分数据缺失而导致结果异常。 策略 04:要求结构化输出 为了便于后续处理和系统集成,Prompt 应指示 LLM 以结构化的格式输出数据。结构化输出便于自动化处理,常见的格式如 JSON,能够确保每个字段的内容都清晰定义,数据可被轻松解析和使用。例如,要求模型输出的 JSON 格式: Prompt 参考 Model System Prompt User Prompt 处理HTML的Prompt 数据后处理模块 在完成关键数据提取之后,为确保输出的数据能够被系统正确识别和使用,后处理步骤至关重要。数据后处理包括 JSON 格式标准化 和 数据格式化 两个部分,分别解决数据结构的完整性问题和数据内容的准确性问题。 JSON 格式标准化 在使用大语言模型提取数据时,生成的 JSON 格式可能出现结构问题、不正确的语法、特殊字符等问题,导致数据无法正确解析。因此,需要通过 JSON 格式化工具对提取出的 JSON 数据进行标准化处理。使用指南 使用指南 参考代码