前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >要啥OCR,我用GLM-4V-Flash做了一个"随手拍"个人消费管理小助手!

要啥OCR,我用GLM-4V-Flash做了一个"随手拍"个人消费管理小助手!

作者头像
程序猿DD
发布于 2025-02-10 07:41:46
发布于 2025-02-10 07:41:46
22500
代码可运行
举报
文章被收录于专栏:程序猿DD程序猿DD
运行总次数:0
代码可运行

估计很多人都用过类似下面这种记账软件,也就是需要每次手动录入消费金额。用过一段时间后发现不可行,因为很多时候更不想不起来记录,久而久之也就卸载了!

其实个人对记账软件的要求没那么复杂,无需那么多复杂的功能,只要能拍下消费记录,就能够自动识别消费类型,消费时间,消费金额,而且还能实时查询和统计消费情况就行了。一直想自己做一个类似的小助手,最后发现第一关OCR就过不去。不同企业OCR需求,只要标准的发票即可,采用发票样本训练过的OCR模型即可准确识别。

个人消费会涉及到衣食住行方方面面。除了发票、火车票等,还涉及到线下餐饮小票、购物小票、微信淘宝支付记录、数字人民币消费记录等等。从各式各样的消费小票中提前消费时间、金融等等,传统的OCR实现将会是“难上加难”。

正好最近看到了智谱 BigModel 开放平台,Flash 系列免费模型全家桶上线,覆盖语言、图像理解、图像生成、视频生成,均可免费调用 API,多能力多维度应用场景,实现理想效果。

最后灵光一闪,OCR不行,我可以用智谱免费开放的 GLM-4V-Flash 多模态大模型实现以下效果啊:

  • 任何的消费记录上传或者拍照,可以自动提取消费内容,自动录入数据库
  • 可以针对消费情况进行回答和总结,比如今年9月份最大的一笔支出是多?这类问题。

备注:GLM-4V-Flash 专注于高效的单一图像理解,适用于快速图像解析的场景,例如实时图像分析或批量图像处理

- 实现思路 -

在设计上,希望尽量简单,英文涉及到消费记录的存储,底层我们采用MySQL进行存储消费数据表。在逻辑上主要包含以下几个方面:

  • 采用 GLM-4V-Flash 对上传或者拍照的消费记录进行内容提取
  • 采用 GLM-4-Flash 模型对 GLM-4V-Flash提取到信息进行处理,输出入库SQL
  • 采用 MaxKB 的函数库执行SQL,将消费记录入库。
  • 整体采用MaxKB工作流实现串接。

备注:MaxKB开源的RAG系统,其工作流可按照需求进行任务进行编排。

- 可行性验证 -

此方案最核心的点在于 GLM-4V-Flash 模型能否正常识别各种消费小票,这需要我们提前验证。GLM-4V-Flash调用提供了API和SDK两种使用方式!在使用前我们需要智谱AI开放平台中获取API KEY:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#智谱AI开放平台地址
https://bigmodel.cn/usercenter

本文我们采用使用SDK调用方式,需要先安装智谱Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装SDK库
pip install zhipuai

详细的接口,可见智谱官网说明文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.bigmodel.cn/dev/api/normal-model/glm-4v

验证脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from zhipuai import ZhipuAI

client = ZhipuAI(api_key='b975b3xxxxxxxxxxxxq3y') # 填写您自己的APIKey
response = client.chat.completions.create(
    model='glm-4v-flash',  # 填写 GLM-4V-Flash 模型名称
    messages=[
       {
        'role': 'user',
        'content': [
          {
            'type': 'text',
            'text': '请提取这张消费中消费信息'
          },
          {
            'type': 'image_url',
            'image_url': {
                'url' : 'https://pic.rmb.bdstatic.com/bjh/events/283bf6b358d25244dd3c22b85f44b2893954.jpeg@h_1280'
            }
          }
        ]
      }
    ]
)
print(response.choices[0].message)
代码语言:javascript
代码运行次数:0
运行
复制

经过多次的验证,发现GLM-4V-Flash的识别效果杠杠的,百分百准确!(下图片来源于网上):

- 数据表设计 -

在MySQL中创建相关数据库和表(MySQL部署略...)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建finance库
CREATE DATABASE finance /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
#创建consumptions表
CREATE TABLE consumptions (  consumption_id int NOT NULL AUTO_INCREMENT,  amount decimal(10,2) NOT NULL,  consumption_date datetime NOT NULL,  category varchar(255) COLLATE utf8mb4_general_ci NOT NULL,  PRIMARY KEY (consumption_id)) ENGINE=InnoDB AUTO_INCREMENT=2572 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

为了方便后续测试,我们可以用下列脚本提前在 consumptions 表中生成300条消费记录数据;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO `consumptions` (`amount`, `consumption_date`, `category`) 
SELECT 
  FLOOR(RAND() * 2000 + 1) AS amount, 
  DATE_ADD('2024-01-01', INTERVAL FLOOR(RAND() * 335) DAY) AS consumption_date, 
  CASE 
    WHEN RAND() < 0.25 THEN '餐饮'
    WHEN RAND() < 0.5 THEN '购物'
    WHEN RAND() < 0.75 THEN '交通'
    ELSE '娱乐'
  END AS category
FROM 
  (SELECT a.N + b.N * 10 + c.N * 100 AS N 
   FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
   CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
   LIMIT 300) AS nums;

- 接入智谱AI -

第一步:在MaxKB中接入 GLM-4V-Flash 和 GLM-4-Flash模型,两个都免费不限量

备注:MaxKB是一款基于大语言模型和 RAG 的开源知识库问答系统。

- 函数库设计 -

为了实现数据写入和查询,MaxKB的函数库需要两个,一个获取金额数据后,写入数据库,另外一个查询数据库中所有的消费信息。

需要提前在MaxKB的主机中安装MySQL连接库库;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装MySQL连接库
docker exec -it maxkb bash
pip install mysql-connector-python -i https://mirrors.aliyun.com/pypi/simple/
  • 写入MySQL数据函数库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#函数库Python脚本
import mysql.connector
from mysql.connector import Error
 
 
def execute_sql_query(query):
    '''
    :param query: 要执行的SQL查询
    :return: 查询结果
    '''
    connection = None
    result = None
    try:
        connection = mysql.connector.connect(
            host= '10.1.240.130',
            user= 'root',
            passwd= 'Password123@mysql',
            database= 'finance'
        )
        if connection.is_connected():
            cursor = connection.cursor()
            cursor.execute(query)
            # 对于SELECT查询,我们使用fetchall()来获取所有结果
            # 对于INSERTUPDATEDELETE等,你可以通过cursor.rowcount来获取影响的行数
            if query.upper().startswith('SELECT'):
                result = cursor.fetchall()
            else:
                connection.commit()  # 确保更改被提交到数据库
                result = cursor.rowcount  # 获取影响的行数
    except Error as e:
        print(f'Error while connecting to MySQL {e}')
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
            print('MySQL connection is closed')
    return result

具体节点如下:

  • 读取MySQL数据函数库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import mysql.connector
from mysql.connector import Error
 
 
def execute_sql_query():
    '''
    :param query: 要执行的SQL查询
    :return: 查询结果
    '''
    connection = None
    result = None
    query = 'SELECT amount,consumption_date,category FROM finance.consumptions;'#全表查询语句
    try:
        connection = mysql.connector.connect(
            host= 'xxx.xxx.xxx.xxx',
            user= 'root',
            passwd= 'xxxxxx',
            database= 'finance'
        )
        if connection.is_connected():
            cursor = connection.cursor()
            cursor.execute(query)
            # 对于SELECT查询,我们使用fetchall()来获取所有结果
            # 对于INSERTUPDATEDELETE等,你可以通过cursor.rowcount来获取影响的行数
            if query.upper().startswith('SELECT'):
                result = cursor.fetchall()
            else:
                connection.commit()  # 确保更改被提交到数据库
                result = cursor.rowcount  # 获取影响的行数
    except Error as e:
        print(f'Error while connecting to MySQL {e}')
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
            print('MySQL connection is closed')
    return result

具体节点如下:

- 小助手实现 -

至此,所有的验证和准备工作已经完成,剩下的就是利用MaxKB的应用编排能力,将“随手拍”消费管理小助手搭建起来。

第一步:创建高级编排应用

第二步:编排界面中,应用开启上传图片功能

第二步:利用智谱 GLM-4V-Flash 模型理解图片,提取信息,并且生成可执行SQL。具体的提示词如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
图片:
- {{开始.image}}

第一点要求:
- 理解图片中的信息,请判断图片信息是否属于消费类型,如果不属于消费类型,请直接输出0,无需执行第二点要求。如果是消费类型,执行第二点要求。

第二点要求:
- 理解图片中的信息,判断此消费属于什么类型(从餐饮、出行、住房、服装、娱乐、家庭、工作,这几类中进行选择进行选择);
- 提取图片中消费金额、消费时间(格式为 2024-12-17 12:00:00- 依据提取的信息,严格按照此SQL语句 [INSERT INTO `consumptions` (`amount`, `consumption_date`, `category`) VALUES (100.00, '2024-12-17 12:00:00', '餐饮');] 生成可执行SQL语句。其中提取到的消费金额字段为amount,消费时间字段为consumption_date,消费类型字段为category;
- 最后只输出完整的SQL语句即可,无需回复任何其他内容

节点配置如下:

当然我们,还需要支持查询功能,可以在工作流中加上查询节点

最后:整体的工作流如下:

- 小助手效果 -

比如我们可以拍照,然后通过 GLM-4V-Flash 模型理解,生成SQL后,自动落入库,方便,快捷!

小票类自动识别和录入:

微信支付类自动识别和录入:

支付宝支付类自动识别和录入:

可以看到 GLM-4V-Flash 详细的处理过程和生成的SQL:

如果不录入,可以直接查询,比如提问上图的消费清单内容,”2023-01-01有哪些消费?“和”上个月一共消费了多少金额?“

看到这,你是不是也觉得很6?当然你也可以通过 GLM-4V-Flash 充分验证自己的想法和思路,如果感兴趣的话,赶紧试试吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿DD 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
智谱免费GLM-4V-Flash助力多模态RAG实现
多模态检索增强生成(RAG)技术正快速发展,但部署成本较高。智谱科技开放的GLM-4V-Flash作为免费多模态大模型,具备图文理解、知识检索等能力,为构建RAG系统提供了经济实惠的选择。
致Great
2024/12/28
5950
智谱免费GLM-4V-Flash助力多模态RAG实现
使用LLM实现自然语言的SQL查询代理
相信大部分研发同学都遇到过这样的场景:业务已经上线了一段时间,产品或运营同学想查看一下实时的业务数据。虽然对于成熟的系统来说,大多有完善的数据分析平台或运营管理后台,可以在各个维度展示业务数据,但是产品和运营同学的查询需求可能是频繁变更的,如“帮我查一下粉丝数>100的用户有哪些?”、“最近1小时内点赞数超过100的视频有多少条?”…。针对这种场景,现有的平台可能无法完全覆盖多样化的查询需求,所以通常需要研发同学手动跑 SQL,这也是很多后端同学经常自嘲为 “SQL Boy” 的原因。这种手动跑 SQL 的流程大致如下:
张申傲
2024/09/06
6140
使用LLM实现自然语言的SQL查询代理
Flink+Clickhouse在广投集团实时数仓的最佳实践
由于历史原因,大型集团企业往往多个帐套系统共存,包括国内知名ERP厂商浪潮、用友、金蝶、速达所提供的财务系统,集团财务共享中心的财务人员在核对财务凭证数据时经常需要跨多个系统查询且每个系统使用方式不一,同时因为系统累计数据庞大,制单和查询操作经常出现卡顿,工作效率非常低。
Spark学习技巧
2023/03/21
1K0
Flink+Clickhouse在广投集团实时数仓的最佳实践
从零到手搓一个Agent:AI Agents新手入门精通(二)以智谱为例
书接上文,我们梳理一个Agent的定义,也梳理了什么LLM和Agents的区别,看不到的小伙伴可以点击链接传送门:从零到手搓一个Agent:AI Agents新手入门精通(一)。现在我们开始我们第二个学习。
一个正经的AI
2025/01/17
1K0
从零到手搓一个Agent:AI Agents新手入门精通(二)以智谱为例
(中)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)
CREATE 语句用于向当前或指定的 Catalog 中注册库、表、视图或函数。注册后的库、表、视图和函数可以在 SQL 查询中使用。
公众号:大数据羊说
2022/04/04
6.4K0
(中)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)
大数据运维之数据质量管理
数据质量管理(Data Quality Management),是指对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题,进行识别、度量、监控、预警等一系列管理活动,并通过改善和提高组织的管理水平使得数据质量获得进一步提高。
Maynor
2024/05/26
9060
大数据运维之数据质量管理
开发者视角看GLM-4-9B!Datawhale成员万字测评(二)
智谱于 2024年6月5日发布了其新一代开源模型——GLM-4-9B,以 9B 的体量,同时支持了 128K 长上下文推理、26种语言多语言支持,且在多个经典评测任务上都实现了超过以往同等开源模型的效果。在 GLM-4-9B 发布之初,我们抢先体验了其效果,并在多种开发者常见任务上进行评测,帮助开发者进一步了解该模型的使用和性能。
Datawhale
2024/06/08
8200
开发者视角看GLM-4-9B!Datawhale成员万字测评(二)
sqlmap的浅研究
sqlmap 是一个开源的渗透测试工具,他可以自动的检测和利用SQL注入漏洞;sqlmap配置了一个强大功能的检测引擎,如果URL存在注入漏洞,它就可以从数据库中提取数据,完成注入。
Mirror王宇阳
2020/11/12
1.1K0
高并发幂等计数器的设计与实现
本文探讨了如何实现一个高并发、幂等的计数器服务,该服务用于处理外部的 inc 请求以增加特定视频的播放计数。考虑到网络延迟和重试等因素,该服务需要确保每个请求至少被处理一次,同时避免重复计数。我们使用了 MySQL 用于持久化存储计数数据,并用 Redis 进行幂等性检查。本文通过 Go、Java 和 Python 三种编程语言展示了具体的实现代码,并对核心逻辑进行了详细解释。Java 代码部分更是进行了全流程的展示,包括幂等性检查、数据库更新和已处理请求的记录。这样的设计不仅确保了高并发处理能力,还实现了请求的幂等性。
猫头虎
2024/04/09
3010
高并发幂等计数器的设计与实现
sqlmap简单中文说明
首先下载需要的文件,如果是windows环境直接到http://sqlmap.org/下载安装所需要的文件即可。 更新 svn checkout https://svn.sqlmap.org/sql
Angel_Kitty
2018/04/08
1.5K0
性能监控之Telegraf+InfluxDB+Grafana+Python实现Oracle实时监控
通过查询 V$FIXED_TABLE ,可以列出所有可用的动态性能视图和动态性能表。
高楼Zee
2019/10/17
2.7K0
性能监控之Telegraf+InfluxDB+Grafana+Python实现Oracle实时监控
Flask-SQLAlchemy
一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 1 pip3 install sqlalchemy 组成部分: Engine,框架的引擎 Connection Pooling ,数据库连接池 Dialect,选择连接数据库的DB API种类 Schema/Types,架构和类型 SQL Ex
用户1214487
2018/01/24
5.6K0
Flask-SQLAlchemy
sqlmap的使用介绍
一、sqlmap获取目标 1.sql注入介绍 所谓SQL注入,就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 具体来说,它是利用现有
XRSec
2022/02/11
2.9K0
SQLAlchemy
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
小小咸鱼YwY
2020/06/19
3.3K0
sqlmap命令详解pdf_SQLmap
服务型数据库(前提知道数据库用户名和密码) DBMS://USER:PASSWORD@DBMS_PORT/DATABASE_NAME (MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc)
全栈程序员站长
2022/11/01
2.9K0
sqlmap命令详解pdf_SQLmap
sqlmap手册
sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了。 一共有1
JathonKatu
2020/10/27
2.6K0
SeaCMS v10.1代码审计实战
seacms是一个代码审计入门级的cms,比较适合我这种小白玩家来学习,如果有什么错误欢迎指出。
FB客服
2020/07/15
1.4K0
SeaCMS v10.1代码审计实战
Python3快速入门(十一)——Pyt
mysql-connector 是 MySQL 官方提供的驱动器。 使用pipenv进行包管理,安装命令如下: pipenv install mysql-connector
py3study
2020/01/03
6960
Flask框架(五)之SQLAlchemy
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
GH
2020/03/19
3K0
如何利用 Flink CDC 实现数据增量备份到 Clickhouse
首先什么是CDC ?它是Change Data Capture的缩写,即变更数据捕捉的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等操作。
麒思妙想
2021/07/19
4.7K0
相关推荐
智谱免费GLM-4V-Flash助力多模态RAG实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验