之前一篇部落格已經寫了有關AI在部落格編寫方面的優勢與對未來部落格的編寫方面的思考。這篇文件我繼續分享我在開發中的一個案例和相關的感想。
事件還原
我發現ChatGPT也可以幫助我編寫OData,於是我也利用GPT幫助我程式設計。
- OData如何將filter與apply欄位聯合使用?答案如下:
GET /odata/Products?$apply=groupby((Category), aggregate(UnitsInStock with sum as TotalUnitsInStock))&$filter=TotalUnitsInStock gt 100
ChatGPT提供了一個思路,不過這個例子卻不能正確執行,因為透過聚合輸出的結果已經不能再進行進一步的OData篩選操作了。
於是我繼續告訴它這個不對,讓他重新編寫,卻一直得不到令我滿意的結果。
那麼換一個問題,關於聚合查詢的,對應的資料型別,可以看之前的我發的文章,我提問“我需要使用odata查詢按照adcode進行歸類,統計每個類別下面的attachdeviceinfo數量、deviceinfo數量和attachdevicetype數量”。回答如下:
/odata/DeviceInfos?$apply=groupby((Adcode), aggregate(AttachDevices/$count as NumAttachDevices, $count as NumDeviceInfos, AttachDevices/AttachDeviceType/$countdistinct as NumAttachDeviceTypes))
執行後報錯,提示缺少with,於是我定位了問題之後,我重新提問“提示AttachDevices/$count缺少with,請重新修改”
ChatGPT開始給我亂寫了:
“這個錯誤提示是由於count操作需要與一些其他操作一起使用,例如count操作需要與一些其他操作一起使用,例如filter或select。您需要將select。您需要將count操作與其中一個操作組合使用才能使其有效。
例如,如果您想要統計滿足某個過濾條件的裝置數量,您可以使用以下URL:
/AttachDevices?$filter=Property eq 'Value'&$count=true
請注意,在此URL中,count操作需要與count操作需要與filter操作組合使用,並且filter操作必須出現在filter操作必須出現在count操作之前。”
已經開始給我扯東扯西了,然後我繼續修改提問的方式,依舊沒有得到的我想要的結果。我總結一下:
- OData相關的資料比較少,資料集相對也較少,所以適配並不好,感覺還是一個冷門的技術....
- AI提供的思路完全沒有問題,但是具體實現的語法上並不符合OData的規範。
- prompt的方式或許也需要改進,提供更多的上下文或者輔助資訊,幫助AI更好地解決問題。
最後,我想到如果$count不行,那麼使用實體的具體屬性用於統計是否可以?改成以下就OK了。
odata/attachdeviceinfos?$apply=groupby((deviceinfo/Adcode), aggregate($count as NumAttachDevices, deviceinfo/deviceid with countdistinct as NumDevices, attachdevicetype/id with countdistinct as NumTypes))
機會
在整個過程中,AI做了大多數工作,但是我依然是那個臨門一腳的角色。所以,AI時代提供給現在程式設計師的機會:
- 依然需要掌握一些相對冷門,或者較為複雜的技術,這樣在AI給的解決方案錯誤的情況下,不至於完全抓瞎。
- 掌握快速Troubleshooting的技巧,遇見AI也不能解決的問題時,透過文件和相關經驗迅速給出符合場景要求的方案。
所以,請警惕完全依賴AI時,它可能無法提供答案或者是錯誤答案。我想起了一個很久之前的電影《機械公敵》,人類在AI背叛的時候一時束手無策。。。希望我們未來不會這樣。