AI再强大,也不如人类员工用的爽?
最近刷到一个脱口秀,表演者调侃自己的领导最近把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再强大,也不如人类员工用的爽?的更多相关文章
- 面对AI的兴起,从人类发展到个人发展,普通人应当如何抉择?
这一周被各种 AI 卷的不行,从 ChatGPT 4.0 上线到百度文心一言发布会,再到微软的 Microsoft 365 Copilot. 网上有很多人.公众号吐嘈百度,而晓衡接触到的圈子还有一些不 ...
- 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识
原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI) ------------------------------- ...
- [1.1W字] 复习: CSS 9个背景属性&6种渐变函数, 学会可以手写实现AI中强大的"任意渐变"! #Archives009
Title/ CSS Background&Gradient完全指南 #Archives009 序: 关于 background 属性, 了解点CSS的人总会知道个大概. 但是你肯定多半还有点 ...
- AI的胜利,人类的荣耀
在围棋界,AI战胜人类,这不是人类的耻辱,是人类的荣耀. 看到柯洁悲伤哭泣的画面,曾经放出豪言的大男孩,低下了骄傲的头.我相信经过这样一次挑战,对他的成长有好处,无论是人生,还是棋艺. 在围棋领域,人 ...
- AI超越人类大脑,或许是场“别有用心者”的骗局
谷歌.微软.苹果.特斯拉.百度.腾讯.阿里等互联网巨头企业,以及纳德拉.马斯克.扎克伯格.马云等互联网大佬,近年来一直都对人工智能--AI非常上心.在众多场合对AI给予了或肯定,或恐惧的评价.但无 ...
- 清明节特辑 |记忆存储、声音还原、性格模仿……AI可以让人类永生吗?
摘要:如果能用AI "复活"逝去的亲人 你愿意吗? 清明节,很少有人会去特地想这样一个问题:我们为什么要给过世的人修墓,然后每年固定的时间去扫墓?当农耕文化的色彩褪去,清明节的祭祀 ...
- (原创)我对未来的人类的发展,以及AI技术发展的一些思考。
最近AI非常的火,不仅仅是阿尔法狗的成功,因为它击败了人类最强的大脑,颠覆了人类几千年来的对传统的认识,也让人类意识 到了一个问题:天外有天,人外有AI. 那么AI究竟会对人类的未来造成什么深远的影响 ...
- AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...
- AI将带我们走向何方?
AI即人工智能,对科幻着迷的博主对此认知颇深,打算从科幻电影入手,先讲下未来的AI将给人类带来哪些变化,哪些思考. 从最初的<星际航行>中的各种星球.地形等的介绍,到各个鉴于的探索,以及其 ...
- AI赌神称霸德扑的秘密,刚刚被《科学》“曝光”了
AI赌神称霸德扑的秘密,刚刚被<科学>“曝光”了 称霸德州扑克赛场的赌神Libratus,是今年最瞩目的AI明星之一. 刚刚,<科学>最新发布的预印版论文,详细解读了AI赌神背 ...
随机推荐
- 一个低PE的股票池--选股策略
EP因子即市盈率因子,常被投资者使用的几个估值因子之一.一般使用PE,即Price to Earning,维基百科上的解释:市盈率指每股市价除以每股收益盈利(Earning Per Share,EPS ...
- Number of Digit One——LeetCode⑩
//原题链接https://leetcode.com/problems/number-of-digit-one/ 题目描述 Given an integer n, count the total nu ...
- 抽象类&&接口做形参(其实同理)
抽象类:传入该抽象类的子类对象 eg: package javaBasic; public class TestAbstract { public static void main(String[] ...
- Odoo14前端框架常用操作
单页Web应用(single page web application,SPA): SPA 是一种特殊的 Web 应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的. 它将所有的 ...
- Manim实现旋转变色特效
在数学动画的世界里,旋转与变色特效无疑是最能吸引观众眼球的元素之一. 今天,就让我们一起探索如何使用Manim框架来实现自定义的旋转变色特效吧! 1. 实现原理 Manim的动画魔法源于Animati ...
- obs学习之3——obs初始化、析构
在app的开发过程中,obs相关函数的使用顺序如下: 1.首先,初始化obs // 创建obs if ( !obs_startup( "en-US", nullptr, nullp ...
- 「Temp」CSP-S 2023 JL 迷惑代码大赏
(欢迎投稿.) 在 \(213\) 份代码中共查找到 \(21\) 个 //freopen,来自 JL-S00031.JL-S00045.JL-S00047.JL-S00085.JL-S00123.J ...
- 使用scheduler-plugins实现自定义调度器
一.环境说明 开发环境 部署环境 操作系统 Windows10 Centos7.9 Go版本 go version go1.24.2 windows/amd64 go version go1.23.6 ...
- 东吴证券X袋鼠云:数据轻松可取、毫秒级反应能力,东吴证券做对了什么?
"所有事情都可以用数字表达." 这句话是1998年一部非典型金融影片<圆周率>的男主独白.影片中,天才数学家Max发现了一套数学模型在"操纵"着股票 ...
- uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步
UTS 插件鸿蒙端开发示例 以上示例已开源 项目地址 请参考 示例代码. 前言 虽然这个 UTS 插件鸿蒙端的示例看起来很简单,但说实话,这一步其实难住了不少开发者.很多人第一次做 UTS 插件,尤其 ...