最近刷到一个脱口秀,表演者调侃自己的领导最近把AI看成“全能员工”或“终极救星”,甚至还没用过就信仰上头。

于是跟风投资建设了一套企业内部AI平台,搭建好之后呢,兴奋无比地给AI甩了一堆材料,然后就跟往常对人类员工布置任务一样,跟AI讲,“你给我弄下。”

结果AI自然get不到领导的真实意图,究竟是要弄啥嘞,只能一通胡乱输出。

其实呢,AI确实很强大,但前提是:你得会用、会说清楚你的目标、会给清晰的数据或上下文。

那如今AI应用的真实场景是什么样的呢?

今天我们就聊一个AI应用中的真实案例,小小的揭露下AI的神秘面纱。

最近在测试AI文生SQL的场景中,遇到因数据日期格式不符合最佳实践的情况,导致AI无法直接得到预期结果。

这类问题比较典型,因为各种各样的原因,即便在很多客户的生产环境中也广泛存在,就是在业务表中的某个时间类型的字段,对应的数据类型设置不符合规范,经常被错误设置为字符串数据类型,从而导致一些潜在问题。

下面我们就来模拟下这个场景。

注意:本文并不是标准答案,因为实际场景可能涉及更多的细节和个性化设置,所以本文只是提供一个调试思路,当大家未来遇到类似问题时,参考使用。

构造测试表,插入7条典型的测试数据,代表常见场景:

--创建测试表,指定日期格式为varchar2,模拟客户环境
create Table test (id number, delivery_date varchar2(20), content varchar2(50)); --插入几行测试数据
insert into test values (1,'20250722','normal');
insert into test values (2,'20250511','normal');
insert into test values (3,'20250518','normal');
insert into test values (4,null,'null值');
insert into test values (5,' ','space空格'); --模拟数据质量问题"空格"
insert into test values (6,'20250230','非法日期');--模拟数据质量问题
insert into test values (7,'20251301','非法日期');--模拟数据质量问题
--delete from test where id=6; --删除2月30号非法日期(测试过程中会用到)
--delete from test where id=7; --删除13月1号非法日期 commit;

这里也可以看到,因为字段不是date时间数据类型,如果程序逻辑再处理不当或有bug,后台表中就可能存在被插入任意非法值,导致一系列的数据质量问题。

select id, length(delivery_date), content from test;

可以看到,如果是null值(正常),length长度也是null,如果是错误的space空格这种,长度就是1:

--ORA-01840: 输入值对于日期格式不够长。 "input value not long enough for date format"
select to_date(' ','yyyymmdd') from dual; --注意:null值不算有问题,因为null值不会报错,返回也是null:
select to_date(null,'yyyymmdd') from dual; --针对空格的workaround,使用trim函数,这样也会返回null:
select to_date(trim(' '),'yyyymmdd') from dual;

这类数据其实相对比较好过滤,比如通过length函数来过滤,只取length(delivery_date) = 8的数据即可。

--过滤掉长度不为8的无效数据
select * from test where length(delivery_date) = 8; --严谨角度也可以加入trim,过滤掉极端场景,比如恰好有8个空格的情况..
select * from test where length(trim(delivery_date)) = 8;

但是,另外一些符合长度8的非法日期,依然存在,

比如这里模拟构建的2个非法日期,分别都会报错,而且可以看到错误描述非常精细,具体区别到究竟是月份无效还是月份中没有这一天,如下:

--ORA-01839: 指定月份的日期无效。 "date not valid for month specified"
SELECT TO_DATE('20230230', 'YYYYMMDD') FROM dual;
--因为你传入的字符串,年份和月份是合法的,但对应的日期 在该月中并不存在。 --ORA-01843: 指定的月份无效。 "An invalid month was specified."
SELECT TO_DATE('20251301', 'YYYYMMDD') FROM dual;
--因为你传入的字符串,经过解析后发现 月份部分不是 01~12 的有效值。

如果我们使用简单过滤规则,比如限定月份和天数的合法数值:

select * from test
where length(delivery_date) = 8
and SUBSTR(delivery_date,5,2) BETWEEN '01' AND '12'
AND SUBSTR(delivery_date,7,2) BETWEEN '01' AND '31'

不过上述过滤其实不够严谨,例如没有对年份检查,同时也仅能过滤类似13月这种明显错误数据。

如果使用正则表达式来过滤(这里多校验了年份):

select * from test
where length(delivery_date) = 8
AND REGEXP_LIKE(delivery_date, '^(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$')

正则表达式中虽然加了年份过滤,也把20251301这种明显违法范围值的无效数据就会被过滤掉了,但是像20250230这种特殊的情况,表面上满足定义的基本规律,但因为2月份压根就没有30号,所以就依然存在漏洞。

这个当然也可以写复杂规则来过滤,但过滤起来就比较麻烦了,这也是为何强烈建议要用date数据类型存储时间格式数据的原因之一。

下面我们来具体测试AI文生SQL场景下这类问题的影响:

场景:要求查询2025年上半年的数据

自然语言转成SQL,LLM默认过滤时间基本都会使用标准的to_date()函数操作,这也是情理之中,符合正常情况下的最佳实践。但是因为我们这里的时间是字符串存储的,属于非正常情况,可能会因此报各种错误信息:

--使用to_date函数来过滤时间列,查询2025年上半年的数据:
--该查询会报错:ORA-01840: 输入值对于日期格式不够长
select * from test
where TO_DATE(delivery_date, 'YYYYMMDD') >= TO_DATE('20250101','YYYYMMDD') and to_date(delivery_date,'YYYYMMDD') < to_date('20250701','YYYYMMDD')

此时,如果想继续查询,就需要添加各种过滤限制条件,比如:

--报错变成:ORA-01839: 指定月份的日期无效
--这是因为表中还有20250230这样的非法日期没过滤掉,但如果没有这条数据,就可以成功执行了:
select * from test
where TO_DATE(delivery_date, 'YYYYMMDD') >= TO_DATE('20250101','YYYYMMDD') and to_date(delivery_date,'YYYYMMDD') < to_date('20250701','YYYYMMDD')
and length(delivery_date) = 8
AND REGEXP_LIKE(delivery_date, '^(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$')

而一般使用字符串定义日期格式的用户,通常对应的程序也都是直接使用字符串来比较时间的:

--这样虽然不会报错,但是例如20250230这样的非法日期数据,也会被查询出来
--只能依靠程序来控制不要输入此类非法数据
select * from test
where delivery_date >= '20250101' and delivery_date < '20250701'

现在问题就明朗了,要么还是选择to_date方式,要额外增加各种过滤条件,要么干脆直接选择字符比较。

二者各有利弊,前者写法复杂,但会校验日期格式,如果有非法日期问题还是会报错;后者是直接出结果,不会过多考虑数据是否正确的问题。

而至于如何让AI文生SQL按你的实际场景生成想要的SQL,本质就是通过提示词工程。好的文生SQL软件会提供非常灵活的各种配置选项,来应对适配各类复杂场景,最终在相互配合下就可以做到相对精确的影响到LLM的处理行为逻辑,从而生成符合实际用户需求的SQL并执行得到预期结果。

另外通过这个典型场景也可以切身领悟到,就算AI再强大,但对那些让人类实际工作都踩过坑的事情,对于AI来说同样是挑战,你不跟他通过“提示词”交流说清楚具体是个啥情况,对于特定场景下那些稀奇古怪的弯弯绕它一样无法理解。

所以呢,AI虽然厉害,但也不必迷信AI,有了它,工作效率的确是大大提升了,但我们依然还是要面临处理很多意料之外的事情,这其实也是我们人类身处于这个丰富多彩的现实世界的魅力所在。

AI再强大,也不如人类员工用的爽?的更多相关文章

  1. 面对AI的兴起,从人类发展到个人发展,普通人应当如何抉择?

    这一周被各种 AI 卷的不行,从 ChatGPT 4.0 上线到百度文心一言发布会,再到微软的 Microsoft 365 Copilot. 网上有很多人.公众号吐嘈百度,而晓衡接触到的圈子还有一些不 ...

  2. 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

    原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI)     ------------------------------- ...

  3. [1.1W字] 复习: CSS 9个背景属性&6种渐变函数, 学会可以手写实现AI中强大的"任意渐变"! #Archives009

    Title/ CSS Background&Gradient完全指南 #Archives009 序: 关于 background 属性, 了解点CSS的人总会知道个大概. 但是你肯定多半还有点 ...

  4. AI的胜利,人类的荣耀

    在围棋界,AI战胜人类,这不是人类的耻辱,是人类的荣耀. 看到柯洁悲伤哭泣的画面,曾经放出豪言的大男孩,低下了骄傲的头.我相信经过这样一次挑战,对他的成长有好处,无论是人生,还是棋艺. 在围棋领域,人 ...

  5. AI超越人类大脑,或许是场“别有用心者”的骗局

    ​ 谷歌.微软.苹果.特斯拉.百度.腾讯.阿里等互联网巨头企业,以及纳德拉.马斯克.扎克伯格.马云等互联网大佬,近年来一直都对人工智能--AI非常上心.在众多场合对AI给予了或肯定,或恐惧的评价.但无 ...

  6. 清明节特辑 |记忆存储、声音还原、性格模仿……AI可以让人类永生吗?

    摘要:如果能用AI "复活"逝去的亲人 你愿意吗? 清明节,很少有人会去特地想这样一个问题:我们为什么要给过世的人修墓,然后每年固定的时间去扫墓?当农耕文化的色彩褪去,清明节的祭祀 ...

  7. (原创)我对未来的人类的发展,以及AI技术发展的一些思考。

    最近AI非常的火,不仅仅是阿尔法狗的成功,因为它击败了人类最强的大脑,颠覆了人类几千年来的对传统的认识,也让人类意识 到了一个问题:天外有天,人外有AI. 那么AI究竟会对人类的未来造成什么深远的影响 ...

  8. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...

  9. AI将带我们走向何方?

    AI即人工智能,对科幻着迷的博主对此认知颇深,打算从科幻电影入手,先讲下未来的AI将给人类带来哪些变化,哪些思考. 从最初的<星际航行>中的各种星球.地形等的介绍,到各个鉴于的探索,以及其 ...

  10. AI赌神称霸德扑的秘密,刚刚被《科学》“曝光”了

    AI赌神称霸德扑的秘密,刚刚被<科学>“曝光”了 称霸德州扑克赛场的赌神Libratus,是今年最瞩目的AI明星之一. 刚刚,<科学>最新发布的预印版论文,详细解读了AI赌神背 ...

随机推荐

  1. 完整版QQ(腾讯)开放平台操作指南(包含:qq登录能力获取等等)

    之前我和大家提过,我要购买第三方的APP服务,就相当于有自己的APP了,现在APP对接上线之前需要做大量的准备工作,在此把步骤分享给大家,这样可以节省大家很多时间. 完整版QQ(腾讯)开放平台操作指南 ...

  2. ceph存储介绍

    一.ceph简介 ceph是一个开源的.统一的分布式存储系统,设计初衷是提供较好的性能.可靠性和可扩展性.其中"统一"是说ceph可以一套存储系统同时提供块存储设备.文件系统存储和 ...

  3. 操作系统 :AArch64体系--ARM最新编程架构模型剖析

    本节来讲讲 ARM 的 AArch64 体系结构,扩展一下视野. 看看什么是 AArch64 体系,然后分析一下 AArch64 体系有什么特点,最后了解一下 AArch64 体系下运行程序的基础,包 ...

  4. 会用 AI 的工程师,效率已经拉开差距了 - “ 我们曾经引以为傲的编码能力,正在被改写。”

    最近尝试用Cursor做了几个内部业务系统,发现一个越来越明显的趋势 真正会用 AI 的工程师,效率已经拉开差距了. 做了十几年 Java, 这波 AI 编程浪潮来得快,一开始我也没太当回事,以为这波 ...

  5. 洛谷题解:P12364 [蓝桥杯 2022 省 Python B] 寻找整数

    注:可以在两分钟内跑出. 看到这题,暴力枚举跑不出来.如果你有没有充分的数学知识,那又怎么办呢? 减少枚举量 首先,注意到许多余数都是 \(11\),有图为证: 设这个数为 \(n\),则有: \[n ...

  6. ODOO里面的约束与PG数据库里面的约束

    一.odoo里面的约束写法 1.模型约束@api @api.constrains('parent_id') def _check_parent_id(self): if not self._check ...

  7. Java中如何让多线程按照自己指定的顺序执行

    摘要:基于如何让多线程按照自己指定的顺序执行这个场景,浅谈Thread中join()函数的作用和原理. join的作用    之前有人问过我一个这样的面试题:如何让多线程按照自己指定的顺序执行?这个问 ...

  8. 洛谷 P4820 [国家集训队]书堆

    题目描述 让N本密度均匀的相同的书摆在桌上.最下面的摆在桌子边缘,其他的书依次堆叠在一本书上.每本书都只能水平放置,宽必须垂直于桌子边缘.如(洛谷的)图: 求书本最右能到多远(这个距离是指最右边的书的 ...

  9. 终极指南:Scrum中如何设置需求优先级

    需求众多不知道如何下手?总想先做简单的需求,复杂需求却一拖再拖?那么,我们是时候开始考虑如何设置需求优先级了. 本期终极指南将展示如何为需求设置有效优先级,如何有效管理工作量,让效率指数倍增长,搭配  ...

  10. 深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容

    在多用户和高安全性要求的系统中,文件与目录权限控制是实现资源隔离与系统安全的基础机制.Linux 操作系统的文件权限模型提供了灵活强大的权限控制机制,通过对用户.组和其他用户的权限设置,确保系统资源的 ...