(2023)用AIGC写iOS项目单元总结

3,169 阅读8分钟

尝试开发的项目

项目功能

用 ChatGPT 开发了一个视频播放器。需要它编写的功能包括:

☆ 本地文件,在线 URL 播放,暂停 ☆ 点击空白区域弹出操作菜单,再点击消失 ☆ 手动横竖屏切换 ☆ 播放速度调整,限定 0.5, 1.0, 2.0 倍速 ☆ 进度条拖动 ☆ 其它一些下载,缓冲区管理等功能

最后由 ChatGPT 帮我完成多个类代码的编写,其中最主要的对外接口类是 VideoPlayerView

目标平台和语言

☆ 系统 iOS 环境 Xcode

没别的,选熟悉的来。

另一方面,刚好需要写一个播放器嵌入到开发的产品中,正好拿 ChatGPT 练手。

☆ 语言 Objective C

这么做是想给 ChatGPT 降降难度,也是给我自己降降难度,Swift 的语言版本兼容性是个灾难。如果出现大量因为不兼容导致的编译错误,到时候负责打扫的还是我。

而 OC 这样一门成熟的语言,我相信 AI 能很好胜任。

但是,因为有时候会用到 iOS 的 C SDK,所以 ChatGPT 也需要写一些调用 C API 的代码。

以下就是我通过测试这个项目,实践出来的对 ChatGPT 的看法。

开发中遇到的问题

沟通问题

☆ 需求陈述是一个大问题

和 ChatGPT 描述清楚自己的需求是比较费神的,在部分场合很容易让人产生“干脆自己写了算了”的想法。

例如如下的需求,需要仔细跟 AI 说明白。

  • 播放器不依赖手机的方向感应,它应该是固定竖屏为基准。
  • 播放器可以手动旋转方向,但是这个旋转不是“真旋转”,也就是说,旋转的是视图本身,而手机屏幕的显示方向事实上不变。

假设我是产品经理,我搭档是个程序员,一般来说对于说起来费劲的事,我们会通过给图片,或者现场展示一些实体来交流。

这也是为什么人和人“当面沟通”对于解决复杂问题更高效。

然而面对 ChatGPT 这一点是做不到的。

AI 不懂装懂

☆ ChatGPT 会撒谎

ChatGPT 会撒谎,而且因为它不是人,所以脸不红心不跳,你甚至不知道它在撒谎(可能它自己也不知道)。

例如,有时候我让 ChatGPT 写一段代码出来,它会写出来,大部分时候都能正常工作,但是偶尔会编造根本不存在的 API 。

☆ AI 无法正视错误

如果 AI 的代码里有 bug,我尝试向它指出来,它一般会这么回答。

抱歉,我犯了错误。以下是我的修改方案……

然而,很多时候 AI 给出的修改方案并不能解决问题,但是它会“装得”好像已经解决了一样。

例如,我尝试让 ChatGPT 来写播放器的进度条控件,并且该控件要带一个进度条显示球来展示播放进度,并能方便用户拖拽进度。

为了测试它的能力,我不自己写,尽量反复和它沟通让它完成。然而,它写的进度条确实存在显示上的问题,以下是我和它的沟通简略过程。


我:UIProgressView 的 duration 小于 0.1 时进度条没有显示。 它:为了修复这个 bug,你可以通过设置 minTimeInterval 属性。

progressView.minTimeInterval = 0.1

……此处省略…… 我:我:UIProgressView 并没有 minTimeInterval 这个属性。 它:抱歉,我犯了个错误。………此处省略………


以上这类会话我已经见怪不怪,这只是无数次例子中的小小一个,从以上会话可以看出,AI 遇到自己不太理解的问题时,会尝试编造一个解决方案来,而且听起来像模像样。

这对于很多容错率很低,或者出错就酿成大祸的工业级产品来说,很可能会产生灾难。

AI 的知识是死的

AI 知识是死的,而开发遇到的问题是活生生的,脱离了文档知识的。

例如,如果 iOS 某个 SDK 现阶段有 bug,以至于用标准代码不能解决时,那么程序员就需要另辟蹊径,重新开创解法。

而 ChatGPT 只能依赖于已经知道的知识去创造代码(当然了,除非它提前吃了stackoverflow的帖子,这也是为什么stackoverflow在控诉内容隐私的原因),它不但没有能力调试,而且也没有能力去理解更细碎的现实问题(除非你去告诉他)。

当然了,现在还有 AutoGPT 这些更厉害的 AI 出来了,可以自动查资料,调试编译代码,但是我还没尝试过,不发表看法。

AI 代码的安全隐患

ChatGPT 写出来的代码非常规整,但是如果是写 C/C++ 语言的代码,那么就要小心了。

因为它真的会写出很多漏洞来。

例如,ChatGPT 会在某些缓冲区偏移量计算时犯错,导致内存写入时的溢出。

AI 没有感知能力

没有感知能力的 AI,是无法胜任大量任务的,例如对于音视频的播放,人用“耳朵”去听,“眼睛”去看。通过这种方式来察觉播放器是否存在跳帧、卡顿、破音等现象。

而 ChapGPT 无法帮助你,而且即使你发现了问题,将问题告诉它,由于它无法感知问题的细节(因为它不会陪你“看”和“听”)所以设计不出解决方案来。

这也是为什么,这个测试项目虽然最后跑起来了,但是耗费的心力(指的是完全让AI写代码)让我觉得不太值得的缘故。

项目结束后的总结

ChatGPT 是 API 活字典

ChatGPT 对所有公开的技术文档都非常熟悉,可以说是手到拈来。对于 iOS SDK 自然是不在话下。

所以,对于“某个实现用什么系统 API 来完成”,ChatGPT 可以完成的非常漂亮。

如果不让它写代码,而是把它当成 SDK 顾问,然后让它提供示例代码,对开发者来说等于多了一个高级帮工。

模版大师

ChatGPT 太擅长写模板了。所以开发者完全可以在设计一个类的时候,让 AI 帮忙写模板,自己去填细节。这比纯粹让 AI 写全部代码要靠谱的多。

要让 AI 独立解决问题,除非它变成“人”

如果 AI 没有作为人的行动能力,那么它就注定只能是个吃数据,吐结果的终端。

它无法通过声音判断音频数据播放出来的效果,也无法通过眼睛判断画面是否符合预期,更无法主动去外界测试设备,调试每一个设备上产生的问题。

当然了,你大可以说未来 AI 外接了各种设备被赋能之后如何如何厉害。但我仅就目前最成熟的 AI 产品的体验得出结论。

☆ “喜欢撒谎”的AI永远靠不住

ChatGPT 会胡编乱造,这早就不是新闻了,它会在不了解情况的前提下试图整合出一个像模像样的解决方案来。

从职业伦理角度讲,这几乎是不可容忍的。

所以,我认为只要 AI “喜欢撒谎”,那么就要尽量避免让它独立完成任务(何况现在让它独立完成也确实够呛)

AIGC 用的效果好不好,取决于你强不强

AIGC 要求使用者自身有更高维度的水平。

技术人要求能辨别 AIGC 产生的错误。

画师要求能辨别和修复 AIGC 画作中的错误。

更关键的,AIGC 需要提问者提出问题,更优秀的人才能提出更优秀的问题,就这么简单。

请拉黑身边贩卖焦虑的号贩子

不是说 AIGC 不强,也不是说开设 AIGC 课程有问题。

就现在来说,AIGC 真的很好用。

☆ 另外,ChatGPT 独立完成成熟的代码框架,尤其是安全性要求低的小模型能力还是很强的。

主要是想说,现在 “AI 黄牛”太泛滥了。一个个到处贩卖焦虑,大肆鼓吹 AI 未来会让什么什么行业消失。

就算 AI 未来会让这么多行业消失,我相信解决方案也不是去找人买号,或者买什么midjourney课程。这种行为和房地产泡沫时期鼓吹房价的中介没有区别。

未来的变数很多,AI 会发展成什么样谁也没有数,如果它会对行业造成威胁,焦虑也没用,如果它不会造成威胁,焦虑也依然没用。所以停止焦虑,也应该立刻屏蔽贪财短视的焦虑贩卖者。

如果想体验 AIGC,用一些免费的国内镜像即可,然后亲自体验,逐渐领会,大可不必求新求大。

记住上一条结论:“AIGC 用的效果好不好,取决于你强不强”。

更多阅读

ChatGPT 能帮开发者上架做什么

生成式人工智能服务管理办法(征求意见稿)

移动开发者联盟加入指引