<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      AI再強大,也不如人類員工用的爽?

      2025-07-26 11:07  AlfredZhao  閱讀(1013)  評論(0)    收藏  舉報

      最近刷到一個脫口秀,表演者調侃自己的領導最近把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,有了它,工作效率的確是大大提升了,但我們依然還是要面臨處理很多意料之外的事情,這其實也是我們人類身處于這個豐富多彩的現實世界的魅力所在。

      主站蜘蛛池模板: 泸定县| 肥大bbwbbw高潮抽搐| 广宁县| 自拍偷在线精品自拍偷99| 亚洲午夜爱爱香蕉片| 一区二区亚洲精品国产精华液| 亚洲综合色区另类av| 亚洲综合小综合中文字幕| 少妇被粗大的猛烈进出69影院一 | 国产精品亚洲二区在线播放| 成人精品久久一区二区三区| 精品中文人妻中文字幕| 无码人妻丰满熟妇片毛片| 亚洲一区二区av观看| 亚洲av第一区二区三区| 精品无码人妻| 成在线人免费视频| 国产精品女人毛片在线看| 国产精品久久久福利| 韩国精品一区二区三区在线观看| 91久久天天躁狠狠躁夜夜| 国产精品免费AⅤ片在线观看| 亚洲精品日韩在线丰满| 国产亚洲精品福利在线无卡一| 日本做受高潮好舒服视频| 人成午夜免费大片| 亚洲国产无套无码av电影| AV毛片无码中文字幕不卡| 桃花岛亚洲成在人线AV| 国产羞羞的视频一区二区| 在线观看国产一区亚洲bd| 亚洲国产成人久久一区久久| 亚洲高清国产拍精品熟女| 性欧美videofree高清精品| 天天影视色香欲综合久久| 综合色综合色综合色综合| 亚洲精品美女久久久久9999| 亚洲精品无amm毛片| 亚洲国产av永久精品成人| 日韩av裸体在线播放| 亚洲乱妇老熟女爽到高潮的片|