ChatGPT与码农的机会

之前一篇博客已经写了有关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背叛的时候一时束手无策。。。希望我们未来不会这样。