和大家分享,我们让 ChatGPT 参与编写的 App:心光 – 拥有你独一无二 AI 的随手记录工具

2 天:我用文字 AI-ChatGPT 写了绘画 AI-Stable Diffusion 跨平台绘画应用

文本 AI – ChatGPT 和绘画 AI – Stable Diffusion,平地惊雷,突然进入寻常百姓家。

如果时间可以快进,未来的人们对于我们这段时光的历史评价,大概会说:

当时的人们在短时间连续经历了这几种情感。从不信,去试试看;到远超预期,后怕;到释然钦佩感慨,进步来得太快。人们原以为 AI 是远方的灯塔,转眼,才发现在后面的是人类。再望向 AI,惊觉已望尘莫及。

作为一名开发者,我在想如果让 AI 代替我工作,是个什么感受呢?本文我想和你分享我在过去两天的探索。

前情回顾

倘若你十分幸运,暂时还没有体验这波 AI,以下是简短回顾。

比如下面这张截图,一个人在和一个另一个似乎全知全能的生物对话,这便是隶属于机器学习 NLP 自然语言处理分支的 ChatGPT。这个文本聊天 AI 是一个基于 RLHF,也就是带人工反馈的强化学习技术的超大语言模型

这里面有两个关键点:RLHF,人工干预带奖励机制的训练过程,使它能向人类一样判断;超大语言模型,是将人类文明以文字的方式全盘托出,来赋予它智慧。

如果你最近在朋友圈看到雨后春笋般地艺术作品,或者玩过各类文字画图小程序。这些极大可能是另一个 AI,即用来将文本转为图片,隶属于机器学习 CV 计算机视觉分支的 Stable Diffusion,在后台为你默默工作。

比如下面这张图,就是在向 Stable Diffusion 描述「一种会发光的外星菌菇」这段文字后,AI 生成的作品。

脑洞来源

刚巧最近 Apple 在 iOS 16.2 和 macOS 13.1 中对于 Apple 芯片在 Core ML 大模型的表现作出更新,发论文如下,首次加入了对于 Stable Diffusion 的优化。现如今芯片技术,和手机电脑中神经网络引擎,终于在当下能支持此类推演。

我就在想,能不能写个 iOS 程序,这个程序能用上 Stable Diffusion,让我在 iPad 和电脑上,随时随地画个画。这样就能随时把脑洞转成图片了,也不需要看广告或者付月费,仰仗各种第三方提供方。

出于本能的懒惰,和对于未来的好奇,以及回答 AI 能否替代人类这个问题。我想先抛个砖,让 ChatGPT 为我写这个程序。我的想法是,这个程序能够有个文本框,让我输入信息;有个倒计时,能够看到生成的进度;有个表格,能够让我看到不同设备生成图片需要的时间;有个按钮,能够让我导出和分享图片。

如果可以继续幻想,这个应用能有一些动画,画好的后图片能随意切换风格就好了。这里的切换风格,不是简单的加上滤镜,而是模仿我想要的诸如轮廓线画风,某个笔触风格等等。要在 Mac 上也能用,我就想要这么个随时能用的工具。

抱着以上幻想,我和 ChatGPT 就开工了,来写这么个 Stable Diffusion 绘画应用。

开工和感受

下图,就是我和 ChatGPT,在 2 天写好的绘画应用,实现了上面说的所有想法。你可以看到,在文本框里敲了行描述,就收获了下面画好的图(恰如我制作这个应用的过程,对 AI 进行描述,便收获了这个应用)。

赘述技术细节意义不大,来说说看这 2 天的时间安排,AI 在里面扮演了什么角色。要开工,首先需要 Stable Diffusion 的机器学习模型。下载这一步本来应该很简单,但因为 GitHub 被标注成了诈骗网站,过程繁琐了不少。

在解决下载这一步里,遇到了诸如 M 芯片安装 HomeBrew 困难,Git lfs Clone 存在大坑等问题。原本我是通过搜索引擎来解决问题的,但很快便发现,这些可能偏小众的问题搜索引擎或者问答网站给出的答案时常是答非所问。在此步骤中,ChatGPT 对于我遇到的每个困难,都给出了针对性,可直接实操的解决方案。

让我惊讶的地方在于,对于你的提问,遇到任何困难或者 ChatGPT 提出的方法无效的时候,你都可以继续追问。在和 GPT 持续问答的帮助下,搞定了下图的模型下载。

有了模型后,接下来我需要一些说明文字。对于不同设备,列出表格,比如下面左图。与此同时,我还需要下图右侧的一些横向排列的 UI 元素,比如绘画按钮,切换风格按钮,分享按钮等等。

虽然可以自己用 SwiftUI 写,但本着能让 ChatGPT 干活的地方我不动手的基本原则,UI 的部分我都交给了它来写。而我做的,就是尽可能的把我想要的图景描述给 ChatGPT 听,比如下图代码的的绘画按钮。

我是这样用英文给 ChatGPT 描述的,大概是「想要个能够带动画的按钮,支持两个函数,一个开始动画,另一个结束。动画需要缩放,名字你自己起就好」。而后我就收到了如下完整的 SwiftUI 代码,我负责把这些代码复制到 Xcode 里,选了个合适的图标,UI 就基本完成了。

至此,我已经被 ChatGPT 的工作能力震撼到。以上这些代码我也能写,但最少需要十分钟,而对于 ChatGPT 生成完整代码,只需要几秒,感觉自己的生命被大大节约。更重要的是,它生成的代码,基本都是对的,而且命名非常规范。

如果 UI 和动画这些内容,ChatGPT 可以胜任,那逻辑部分是否也可行?抱着这样试一试的心态,我把较为复杂的 On Demand Resource,即根据需求加载的代码,并且在资源下载完后储存到磁盘的逻辑,也一并描述给了 ChatGPT。

在这个过程中,我主要负责用 Xcode 来调试,并且把不同的模块衔接,从工作量上来说,我和 ChatGPT 几乎达到了一人一半的分工。

花了 2 天时间完整制作好的应用如下,看动图 5 秒,你会看到文字生成图片,绘画过程中的画笔动画,​风格迁移和导出全过程。

其中:图片生成过程中的倒计时(ChatGPT 写的),模型存储逻辑(GPT 写的),机器学习风格切换(我训练的机器学习模型),分享和保存(我写的,因为用到了 2022 的知识 ChatGPT 暂时还没有)。

进度到了这里,就差起个名加个图标了。我一直很想要个头脑风暴的应用,把脑洞具像化,于是就叫 IdeaStorm,也就是想法风暴。既然这个应用,是和 ChatGPT 合作,最后做了神奇的绘画 AI Stable Diffusion,本着复杂的问题交给 AI 的原则,我用这款应用自己,给自己画了个图标。

以下是最左侧,是 IdeaStorm,这款用 AI 写 AI 的尝试应用,给自己画的图标。

总结

AI 能为我们工作吗?或者说,AI 能够替代我们工作吗?本次实践中,我并未因为 IdeaStorm 是和 AI 的合作,而妥协任何原计划。2 天时间,从探索落地的尝试中,答案是肯定的。

曾有人说现在的硬件性能过剩,这次的体会中,过剩的性能很快就被需求所替代了。比如我在用 ChatGPT 工作,用 M2 开发 M1 测试,本应不错的电脑和设备,性能瓶颈是我意料之外的常驻感受。我时常在等设备来运行,来机器学习,来做模型推衍,来做项目编译。

原来不是硬件变慢了,而是在 AI 的加持下,我变快了。原本需要几十分钟才能推进的节点,现在只在一瞬间,就快进到了下一条。的确是生产力得到解放的感受。

奥润橘用 IdeaStorm 创作的图片

正如文章开头所说:人们原以为 AI 是远方的灯塔,重点是远方,很远。转眼,才发现已经在后面的,原来才是人类。再望向 AI,惊觉已是望尘莫及。

亲自尝试之后,这便是我的感受。在这 2 天的开发过程中,遇事不决 ChatGPT,是我能对它给出的最高评价。