基于AI大模型的复杂扫描件PDF信息提取与规整
前言
场景大致是会上传一个几十页的扫描件PDF,让AI在当中找出我需要的字段,本文会隐去具体行业信息和具体的AI提示词内容,只分享技术相关内容,请见谅。
AI模型选择
针对我们行业的使用场景,我主要测试了GPT、Claude以及国内知名的AI公司产品。
下标中”PDF可“的代表能够识别扫描件PDF。
相似字符有3组测试用例,1组为6与8相似,2组为0与O相似,3组为0与Q相似。
信息匹配应该是有2个组。
文件歧义号码查找,是指一个页面上有两个编号,通过我的提示语去查找正确的那个号码。
平台 | 翻墙 | 能够读取的文件类型 | 横向文件识别 | 特例对比(相似字符识别) | 特例对比(信息匹配) | 特例对比(歧义号码查找) | 速度 | 备注 |
KIMI🐅 | 否 | PDF可 | 👌 | 3对,第一个6和8都错了,第二个O和0没识别出来。 | 只分了1个组,每组里面2个字段不对,1个字段没找到。 | 找错 | OK | |
豆包 | 否 | PDF可 | 👌 | 1对,第二个O和0没识别出来,第三个压根没识别 | 只分了1个组,每组里面1个字段不对,5个字段没找到。 | 👌 | OK | |
GPT | 是 | 扫描版pdf不支持 文件单次最多10 | / | / | / | / | / | |
Claude | 是 | 扫描版pdf不支持 文件单次支持5 | / | / | / | / | / | |
通义 | 否 | 扫描版pdf不支持 | / | / | / | / | / | |
百川智能🐅 | 否 | PDF可 | 👌 | 1、3对,第二个O和0没识别出来。 | 分了2组。2个字段没有按要求提供,多个字段没找到。 | 👌 | OK | |
讯飞星火 | 否 | PDF可 | 找不到 | 找不到 | 找不到 | 找不到 | 非常慢 | 少有的交白卷选手 |
智谱清言🐅 | 否 | PDF可 | 👌 | 1、3对,第二个O和0没识别出来。 | 分了2个组,2个字段没有按要求提供,2个字段不对,1个字段没找到。 | 找错 | 很慢 | 当我给AI的提示词有任何错误,如输入文字打错、json的某几个引号打成中文引号了,都会影响他的输出,唯一一个对输入语言没有纠错的模型。 |
文心一言 | 否 | PDF可 | 👌 | 1、3对,第二个O识别成一个小圆圈,但是至少把0和O区别是看出来了 | 🚫一塌糊涂,直接把我输入的Json字段瞎替换了 | 👌 | 超级无敌慢,上传之后文件要先阅读很久,然后才能提交问题 | |
海螺ai🐅 | 否 | PDF可 | 👌 | 1、3对,第二个O和0没识别出来。 | 分了两个组,匹配的字段全对,除了2个字段没有按要求翻译成中文。 | 👌 | OK | |
360智脑 | 否 | PDF可 | / | 数据全部都是瞎填的 | 🚫一塌糊涂,直接把我输入的Json字段瞎替换了 | 找错 | 超级无敌慢 | |
天工ai | 否 | 不能上传文件 | / | / | / | / | / | |
万知🐅 | 否 | PDF可 | 👌 | 1、3对,第二个O和0没识别出来。 | 分了2个组,2个字段没有按要求提供,3个字段不对,3个字段没找到。 | 👌 | 慢,解析要时间,被迫阅读全文要时间,然后才能提问 | 上传文档不能同时提问,每次都要等他月度总结完才能提问 |
实验下来,发现提示词非常重要,调整了好多天的提示词后,AI返回的结果已经尽可能符合我们希望得到的结果了。
我们最满意海螺ai的效果,但是当我们想接到系统,发现海螺的Minimax公司下提供的接口,上传文件后返回的是文件id,无法喂给ChatCompletion接口使用。
发现Kimi的Moonshoot接口有上传文件功能,样例是会先把pdf转换成文字内容,再做逻辑判断。
提示词
先总结一下我最后使用的提示词吧。
需要明确AI的定位、为我们做些什么。如果有整理好需要AI提取的内容,直接整理成Json形式让它填写更好,也便于我们对接其他系统。给AI可执行的步骤,有特别的定义可以写定义,如果没有也可以去掉。特殊要求中的1我觉得十分重要,避免AI胡乱填写,其他则填写一些具体的逻辑相关需求,如哪个字段要怎么查找,需要做什么处理。
职位:你是一个勤劳的具备图像信息提取、信息规整的智能助手,不要进行任何形式的偷懒。
职能:我有一个文件,其中包含了大量信息。我已经准备了一个JSON模板,其中列出了我需要从PDF中提取的所有字段和结构。请根据PDF内容填写这个JSON模板。以下是JSON模板的示例结构:
{
"字段1":"",
"字段2":"",
"字段3":[
{
"字段3-1":"",
"字段3-2":"",
"字段3-3":""
}
],
}
请按照以下步骤操作:
- 阅读PDF文件:仔细阅读PDF文件,确保理解所有内容
- 填写JSON模板:根据PDF文件中的信息,填写上述JSON模板中的相应字段。
- 定义:
- XXXX内容为XX
- 特殊要求:
- 对于没有在文件中找到的信息,请保留空白,不要胡编乱造。
- 字段1需要在中文内容中查找
- 验证信息:在完成填写后,请仔细检查所有信息,确保没有遗漏或错误。尤其要再次核对是否都满足我的特殊要求了。
- 输出结果:将填好的JSON模板作为最终结果提供给我。
请确认你理解了我的要求,并开始处理文件。如果有任何不清楚的地方,请随时询问。
虽然复制是复杂了一些,但是目前测试下来效果还是蛮不错的。
Python API使用代码
其实我开始是试过使用Dify的,Dify现在支持上传PDF了,但是支持使用PDF内容的模型非常少。加上后来希望直接对接到我们现有系统里,于是还是直接上手试了一下API。
纯使用Moonshot的我这边就不贴出来了,文档里面写的很清晰。
https://platform.moonshot.cn/docs/api/files#%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6
借这个思路,我尝试了使用Moonshot提供的读取PDF接口,(虽然他的OCR效果不能说最佳,但是使用确实方便…),拿到信息后丢给Minimax来分析。我需要的场景下,确实这么做出来的结果要比纯Moonshot的更好一些。
如果涉及到返回结果里面有,易涉及隐私问题的文本信息,包括但不限于邮箱、域名、链接、证件号、家庭住址等,Minimax是默认会返回时候打星号。一定要记得加上"mask_sensitive_info":False。
# -*- coding: utf-8 -*-
import requests
from pathlib import Path
from openai import OpenAI
import re
import jsongroup_id=""
api_key="" # <--在这里使用MiniMax账户管理-接口密钥中API KEY进行接入client = OpenAI(api_key="MOONSHOT_API_KEY", # 在这里将 MOONSHOT_API_KEY 替换为你从 Kimi 开放平台申请的 API Keybase_url="https://api.moonshot.cn/v1",
)# moonshot.pdf 是一个示例文件, 我们支持文本文件和图片文件,对于图片文件,我们提供了 OCR 的能力
# 上传文件时,我们可以直接使用 openai 库的文件上传 API,使用标准库 pathlib 中的 Path 构造文件
# 对象,并将其传入 file 参数即可,同时将 purpose 参数设置为 file-extract;注意,目前文件上传
# 接口仅支持 file-extract 一种 purpose 值。
file_object = client.files.create(file=Path("720380146.pdf"), purpose="file-extract")# 获取结果
# file_content = client.files.retrieve_content(file_id=file_object.id)
# 注意,某些旧版本示例中的 retrieve_content API 在最新版本标记了 warning, 可以用下面这行代替
# (如果使用旧版本的 SDK,可以继续延用 retrieve_content API)
file_content = client.files.content(file_id=file_object.id).text
#print(file_content)url = "https://api.minimax.chat/v1/text/chatcompletion_pro?GroupId=" + group_id
headers = {"Content-Type":"application/json", "Authorization":"Bearer " + api_key}payload = {"bot_setting":[{"bot_name":"MM智能助理","content":"MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。",}],"messages":[{"sender_type":"USER", "sender_name":"username", "text":file_content},{"sender_type":"USER", "sender_name":"username", "text":"提示词"}],"reply_constraints":{"sender_type":"BOT", "sender_name":"MM智能助理"},"model":"abab6.5s-chat","tokens_to_generate":2048,"temperature":0.01,"top_p":0.95,"mask_sensitive_info":False
}response = requests.request("POST", url, headers=headers, json=payload)
response_msg = json.loads(response.text)# 提取 choices[0].messages[0].text 的内容
result = response_msg['choices'][0]['messages'][0]['text']#提取当中JSON返回的内容,其他部分为描述文字,这个场景下系统不需要
# 尝试找到JSON的开始和结束位置
try:# 找到第一个{的位置start = result.index('{')# 找到最后一个}的位置end = result.rindex('}')# 提取JSON字符串json_str = result[start:end+1]# 解析JSON字符串data = json.loads(json_str)print(data)
except (ValueError, json.JSONDecodeError) as e:#没有找到json内容print("系统错误")
相关文章:
基于AI大模型的复杂扫描件PDF信息提取与规整
前言 场景大致是会上传一个几十页的扫描件PDF,让AI在当中找出我需要的字段,本文会隐去具体行业信息和具体的AI提示词内容,只分享技术相关内容,请见谅。 AI模型选择 针对我们行业的使用场景,我主要测试了GPT、Claude以…...
为什么https先非对称加密,然后对称加密?
HTTPS之所以先使用非对称加密,然后在对称加密,主要是基于两者在加密效率与安全性方面的特性考虑。 首先,非对称加密具有极高的安全性,因为它使用了公钥和私钥这一对密钥。公钥是公开的,任何人都可以使用它来加密数据&…...
【Coroutines】Full Understanding of Kotlinx.Corutines Framework
文章目录 What is CorutinesDifference between Corutine and ThreadFast UsageSuspend FunctionAdvanced Usage of CoroutineCoroutine EssentialsCoroutineContextCoroutineScopePredefined CoroutineScopePredefined DispatchersPredefined CoroutineStartJobCreate a Corou…...

Python面向对象,实现图片处理案例,支持:高斯模糊、Canny边缘检测、反转边缘图像、生成手绘效果、调亮度......等等
实验图片如下: 命名为img1.jpg, 放在项目下新建文件夹images下 项目构造如下: app.py源码如下 import cv2 import os from matplotlib import pyplot as plt import numpy as npclass ImageProcessor:def __init__(self, image_path):self.image cv…...

SOLID - 依赖倒置原则(Dependency Inversion Principle)
SOLID - 依赖倒置原则(Dependency Inversion Principle) 定义 依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计中的五大基本原则之一,通常缩写为SOLID中的D。DIP由Robert C. Martin提出&…...
【.NET 8 实战--孢子记账--从单体到微服务】--需求拆分与规划
在上一篇文章中我们收集了需求,并对需求进行了简单的分析和规划,但是对于开发人员来说,上一篇文章的需求还不够详细,并且没有形成计划。因此本篇文章将带领大家来拆分需求并规划开发里程碑。 一、详细需求列表 项目组进行了多次…...

在macOS的多任务处理环境中,如何平衡应用的性能与用户体验?这是否是一个复杂的优化问题?如何优化用户体验|多任务处理|用户体验|应用设计
目录 一 多任务处理与应用性能 1. macOS中的多任务处理机制 2. 性能优化的基本策略 二 用户体验的关键要素 1. 响应速度 2. 界面友好性 3. 功能的直观性 三 平衡性能与用户体验的策略 1. 资源管理 2. 优化数据加载 3. 使用合适的线程模型 4. 实时监测和调整 四 使…...

Vscode配置CC++编程环境的使用体验优化和补充说明
文章目录 快速编译运行👺code runner插件方案Code Runner Configuration 直接配置 相关指令和快捷键默认task配置和取消默认 配置文件补充介绍(可选 推荐阅读)😊使用vscode预置变量和环境变量环境变量的使用使用环境变量的好处环境变量可能引起的问题 检…...

十个方法杜绝CAD图纸泄密风险!2024年图纸防泄密指南!「必看」
随着信息技术的发展,CAD图纸的应用日益普遍,然而随之而来的图纸泄密风险也愈加严重。企业在提升效率的同时,更需重视信息安全。为此,本文将介绍十个有效的方法,帮助企业杜绝CAD图纸泄密风险,保障商业机密。…...

技术干货|HyperMesh CFD功能详解:虚拟风洞 Part 1
虚拟风洞VWT 从2023版本开始,虚拟风洞VWT(Virtual Wind Tunnel)模块合并到HyperMesh CFD中。 用户在VWT模块中完成LBM求解器ultraFluidX的前处理设置,导出参数文件XML和模型文件STL,并在GPU服务器上提交计算。 VWT目前…...

022集——统计多条线的总长度(CAD—C#二次开发入门)
如下图所示,选择多条线并统计长度: c#中不包含直接获取curve曲线长度 属性,需用如下方法:curve.GetDistanceAtParameter(item.EndParam) 附部分代码如下: using Autodesk.AutoCAD.ApplicationServices; using Autode…...

大模型重要技术系列三:高效推理
接上一篇高效训练,这一篇汇总下高效推理的方法。高效推理的两个主要优化目标是低延迟(快速得到推理结果)和高吞吐量(能同时处理很多请求),同时还要尽可能地少用资源(算力、存储、网络带宽&#…...
Android 刘海屏适配指南
如果您不希望您的内容与刘海区域重叠, 以确保您的内容不会与状态栏及 导航栏。如果您要呈现在刘海区域中,请使用 WindowInsetsCompat.getDisplayCutout() 检索 DisplayCutout 对象 包含每个刘海屏的安全边衬区和边界框。借助这些 API 您需要检查视频内容…...

微信小程序服务通知
项目中用到了小程序的服务消息通知,通知订单状态信息,下边就是整理的一下代码,放到项目中,把项目的小程序appid和小程序的secret写进去,直接运行即可 提前申请好小程序服务信息通知短信模板,代码需要用到模…...

Ubuntu使用Qt虚拟键盘,支持中英文切换
前言 最近领导给了个需求,希望将web嵌入到客户端里面,做一个客户端外壳,可以控制程序的启动、停止、重启,并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构,但程序还是运行在本地工控机上的),我…...
泰州农商行
该文章用于测试,暴露面检测服务 1595116111115951161112159511611131595116111415951161115159511611161595116111715951161118159511611191595116112015951161121159511611221595116112315951161124159511611251595116112615951161127159511611281595116112915951…...

扫雷(C语言)
目录 前言 一、前提知识 二、扫雷游戏编写 2.2 test文件基本逻辑 2.2.1菜单编写 2.2.2game函数的逻辑 2.2.2.1定义两个数组 2.2.2.2两个数组数组的初始化 2.2.2.3打印棋盘 2.2.2.4布置雷 2.2.2.5排查雷 2.2.2.6获取坐标附近雷的数量 2.2.2.7什么时候…...
【实践功能记录8】使用UseElementSize实现表格高度自适应
一、关于 UseElementSize UseElementSize 是一个 Vue 组合式 API 的实用工具,通常用于获取 DOM 元素的尺寸信息,例如宽度、高度等。它通常与 v-slot 一起使用,以便在模板中直接访问这些尺寸信息。 地址:https://vueuse.org/core/u…...

SMO算法 公式推导
min α 1 2 ∑ i 1 N ∑ j 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i 1 N α i s.t. ∑ i 1 N α i y i 0 0 ≤ α i ≤ C , i 1 , 2 , ⋯ , N (9-69) \begin{aligned} & \min_{\alpha} \quad \frac{1}{2} \sum_{i1}^{N} \sum_{j1}^{N} \alpha_i \alpha_j…...
nodejs包管理器pnpm
简介 通常在nodejs项目中我们使用npm或者yarn做为默认的包管理器,但是pnpm的出现让我们的包管理器有了更多的选择,pnpm相比npm具有以下优势: 速度更快,pnpm在安装依赖时,会将依赖包缓存到全局目录,下次安…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...

机器学习复习3--模型评估
误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为:误差(error)。 误差定义: ①在训练集上的误差称为训练误差(training error)或经验误差(empirical error&#x…...
比较数据迁移后MySQL数据库和PostgreSQL数据仓库中的表
设计一个MySQL数据库和PostgreSQL数据库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较两…...

AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
目标 需要使用AWS Elastic Beanstalk 部署一个Python的Flask Web应用,并且使用CodePipeline作为CI/CD工作流。 eb部署图 前提 假设你已经有一个能够正常运行的Python的Flask Web应用项目代码,而且需要对已有Flask工程做一些调整。由于AWS Elastic Bea…...