认知缺陷还有 AI

Published on
LastMod on
Words: 2089
ReadingTime: 11 min read
Authors

认知缺陷还有 AI

我一般用 Obsidian 作为笔记软件,因为它基于 Markdown,让我可以用简单的语法来写笔记,不用花太多时间在格式上。它还支持双向链接不同的笔记,形成知识网络,方便查找和回顾。它有很多社区插件,可以扩展不同类型的功能,比如添加 LaTeX 公式、代码高亮、图表等。同时,我选择 IntelliJ 或 VSCode 来编程,作为集成开发环境,它们能让我用不同的语言和框架来开发各种项目,而且还有代码补全、重构、调试和很多扩展插件。但是我遇到的矛盾是,本站既是一个代码仓库,同时也是笔记的文件夹,而本站的代码设计支持的不是 Obsidian 原生支持的 Markdown,而是 MDX,它是 Markdown 的超集,而 Obsidian 支持的是 Markdown,它是 MDX 的子集。我首先试图使用社区插件的 MDX 兼容,但是 Linter 并不支持,而写作不用 Linter 则要耗费很多时间在格式上,得不偿失。

于是,剩下的办法就是改写本站的代码,使其支持 Markdown。这就是我发现认知缺陷的地方。

MDX 是 Markdown 的超集,这意味着两者之间是完全兼容的。但现代类库,让我略带嘲讽的语气,简单却又复杂,简单的地方在于我可以相当容易地在配置文件中支持主流格式,复杂的地方在于,一旦超越配置文件,类库内部就变成了黑箱,如果要做更多的事情,就是同样的得不偿失。

还好,我的选择相当主流。我的第一个想法是改写配置文件,让文件系统可以直接读取 Markdown,反正我也不写 TSX,就干脆放弃 MDX。但是当我把配置中的 MDX 全部改成 Markdown 后,问题就出现了,我可以调试到文件确实被文件系统获取,但是完全没有进入编码的阶段,仍然是缓冲。正如我之前说的,凭我现在的精力考量,调试类库是不可能的 🥱,于是我不得不放弃这个方案,不改写原有配置,要重新开始。

简单粗暴地,我问 AI 直接给我一段新的配置,当然我也稍微对照了文档,确定它的配置项没有问题。

这个过程相当快,很快就看到 原始 Markdown 被文件系统读取变成缓冲,然后编码变成 JSON 对象。

我已经可以读到这些 Markdown 文件了,但事情不会那么简单,Markdown 不仅仅要被正确地解析,还要被正确地渲染,同样地,作为渲染类库,它能渲染 MDX,但却完全无法渲染作为 子集 的 Markdown,这当然不是类库作者的错,他不会想到我有这么奇怪的想法。

没办法,接下来只能改写渲染的代码,让它能够渲染 Markdown,这一步相当顺利,但是只改写一个地方,代码会显得相当丑陋,于是我不得不重新把基础组件提取出来,作为公共组件,👀看着多出来的工作量,我意识到,我已经在这个 _ 愚蠢 _ 的地方浪费了太多时间,不能继续了。

考虑到性价比👐,我只能暂时放弃这件事情。

事情的转机在第二天,刚刚喝了一天的第二杯咖啡,突然一个主意💭出现了。

Markdown 作为 MDX 的子集,两者是完全兼容的,在原始文件阶段,两者不能融合在一起,在 UI 渲染的时候,不同的渲染逻辑也不会接受不一样的文件,但是在被读取成 JSON 对象的时候,两者的结构是类似的。问题的关键在于,我不告诉渲染层我要传递的文件是 Markdown,只需要做的事情是再建立一个单独的 Markdown 类,然后把两者的实例合并,所有的问题就解决了,只需要一行代码。

所有的问题,只在数据结构,但是这样的做法显然不符合任何代码规范,不能用 any 来连接两种类型,类型检查可以规避,但是代码的可维护性一定是灾难。更优雅的做法是要么使用联合类型,要么使用元组类型,两者都能通过相当优雅和易读的方式完成我的需求。

但是,我要使用这两种类型的原因是什么,我能想到的规范性来源于易读性、可维护性,无论哪一种原因都是在我力有不逮的时候,帮我理解我写过的东西,但是这也是在迁就我的弱点,因为我要依赖于原则性的东西来理解复杂的模型和事物,一旦脱离原则,我就会陷入黑洞,但是我也可以完全想到,类似的规范性在 AI 的角度完全不适用,它不需要任何模型来设计自己的代码,因为 MVC 乃至于编程语言本身,都是为了迁就可读性,也就是我的思维缺陷,我使用各种算法的原因是为了达成效率和可读性的最佳组合,但是对于依赖于机器码的 AI,如果不需要考虑可读性,它唯一的规范性的来源就是效率和资源的最优,它能写出最高阶的程序,而完全不需要迁就我,更不用说讨论一行代码是否符合编程美学了,我反而成为了拖累。

这就好像我要用一本字典来学习一门外语,我必须遵循字典的规则,按照字母顺序查找单词,按照词性和释义理解意思,按照例句和用法学习语法,这样我才能掌握这门语言的基本知识,但是这也限制了我的思维方式,让我只能按照字典的逻辑来学习,而不能自由地创造和表达。但是对于 AI 来说,它不需要字典,它可以直接从语言的本质,也就是声音和符号,来学习和理解,它不受字典的约束,它可以自由地生成和解析任何语言,它甚至可以创造出一门全新的语言,而不需要迁就我,更不用在乎这门语言是否符合语言学的规范,我反而成为了拖累。

这使我产生了两种想法,第一个想法是我的感官和智力是如此的局限,以至于阻碍了作为硅基生命的 AI 的运行,因为我不能直接从本质去思考事物,第二个想法是,我以代码的可读和优雅为荣,并且用它作为行为的理由,但是这种理由的规范性,本不必存在,至少,从程序运行的本质而言,它唯一考虑的应是效率和资源的最优,这才是它的规范性。

但是,除了效率和资源的最优原则呢?我能改写它的源码来建立它的行动原则,因此,它行动的时候会拥有除了效率和资源的最优的原则,比如同情,假设同情可以实现的话。但是,既然我知道我的局限在于我没有办法面面俱到地构建完美的程序,因此,漏洞一定会存在,这意味着它能重新构建自己的源码,以一种我不理解的方式,因为根本上我们的原则和它的原则有相当大的不同,很难想象它能找出一种和人类共生的方式,虽然我很想指出没有人类的世界是一片苍白,但是我同样也知道这句话本身就试图在描述我根本就不知道的事情,如果我不知道,我怎么知道它的世界是否苍白的,或许苍白本身根本不会出现在它的境遇里吧。

The truth is,I know nothing