命令行的复兴
AI时代的UI界面
2023/8/4 by DKZ
最近在研究各种软件的插件,做了一个 chrome 的插件用于知识管理。研究了一下 blender 的插件系统,blender 有一个 tab 是 script 在其中可以直接执行 python 代码调用 blender 官方的 bpy api 就可以实现一些功能。我尝试用 chatgpt 写了一个小功能放进去执行完全没有问题,而且已经有人将 chatgpt 整合成插件放到 blender 里面了。
其他软件似乎也在做同样的事情,微软给 office 接入了 copilot,PhotoShop 也接入了一套生成式 AI ,Unity Muse 等等。这些新的工具都是使用一个类似命令行的交互界面,用户输入一段 prompt 软件给出结果。其原因在于目前的 AI 都是由大语言模型组织在一起的,输入的基本上是一段文本(或语音转文字)用于指示期望的结果,输出的是直接的结果,而不关心中间的过程。
这与命令行的行为极为相似,输入的是文本,输出运行结果,如果运行正确甚至可以不输出。我觉得在近未来 Command Line 会迎来一轮复兴,代替现在我们司空见惯的 GUI 界面。虽然我大部分的日常工作前端客户端是和这个相关但我一直是一个技术乐观者,我并不害怕 AI 会取代我导致失业。因为实际上 AI 并不是直接代替人,而是改变了机器和人的交互方式,从某种程度来说 AI 有希望在不久的将来把我从现在的工作中解放出来。
虽然 GUI 一直是主流的发展方向,好的交互也一直是我们努力的目标。在教育行业涌现出很多可视化编程的方案,让青少年能不接触代码,降低了学习成本有助于培养兴趣;在游戏行业更是如此,几乎所有的引擎都推出了面向关卡设计师和美术的工具,很大程度上降低了制作游戏的门槛;甚至在程序员的领域也出现了很多低代码的工具。但我还是不得不指出很多 GUI 存在的很多根本性的缺陷。
首先就是随着复杂度的上升 GUI 会变得不可用,很容易出现飞行仪表界面这样的情况,虽然我们可以用折叠,分步等方式将复杂的问题拆解。但实际上这并没有把问题简单化了,从全局的视角它甚至更复杂了。从制作的角度也需要更多的工作才能实现,大多数情况下我们可能需要的只是其中的一两个按钮而已,个性化定制化这种事情在 GUI 界面上只会带来更大的复杂度。而且本来通过一个文档就可以学习的东西可能需要一个视频,这是很多软件现在的普遍现象这其实非常浪费时间,知识点都分散在视频中的某处无法像文档一样检索。随之带来的一个问题就是 GUI 产生的程序无法被 git 这样的代码管理工具管理,可能随着时间最终脱离掌控变得无法维护,debug 也是一个难题。Command Line 则是很好的解决了以上的问题,统一的输入,制作简单,易于检索。这些特质命令行程序在脚本自动化方面获得了无法替代的优势,实际上在未被产品化的领域命令行界面一直是占据着主流,而且很多命令行软件到今天都很有生命力比如ffmpeg。
探究其原因,我认为归根结底 GUI 只试用于描述二维的世界(或是3维例如 VR 中的一些软件)。对于更高维度的表示,我们更倾向于使用一维的描述。一维的语言更简单,更适合承载更高维度的信息。 我不否认很多软件还是适合 GUI 的,比如 Shader Graph 就极其适合 GUI,操作对象是二维的纹理或是光栅化后的对象,可以在 GUI 中观察中间步骤的效果,方便 debug。Shader 的 GPU 编程也是管线化的,几乎不会出现嵌套相互引用的复杂逻辑。
所以我认为很长一段时间 GUI 还是主流,但在 AI 技术的帮助下命令行的交互方式会迎来一次复兴。其简单的规范化的输入方式会更容易接入 AI ,易于 AI 检索,甚至方便 AI 理解(如果 AI 真的能够理解的话)。而且由于人们不关心中间的过程,只是描述结果,而不是叫 AI 执行那些命令的过程,那些令人生畏的代码也不会带来太多的困扰。
何况代码本身也不会带来什么困扰,很多时候只是出于对不知道的东西的畏惧而已,实际上对着一个命令行操作是一件非常酷的事情就像《黑客帝国》里面那样。做为一个 natural childbirth in zion 的人,你要问我在屏幕上的绿色字符中看见了什么?我看见了 matrix 里漂亮的小妞和雪白的大腿,neo像救世主般从天而降。