Write up: 让AI听得懂人话的一些努力
本帖最后由 huzpsb 于 2024-12-24 00:04 编辑最近写了AIMC,可能也有人注意到了,它对MC插件的生成能力好像比正常的GPT要强一些,并且没什么幻觉。
这是为什么呢?本篇Write up旨在分享AIMC背后的设计理念。
#0:先测试,再立项
在一切的开始,我让ChatGPT使用Java、js、lua、(遗憾的是没有Python,因为运行时太大了)
调用了一些Bukkit的api。原始的实验结果在这里就不贴出了,但是结论是——
它最会js。
它写的Java总是没有导入。虽然理论上我可以写一个语法解析器帮他自动Alt+Enter一些,但是我总归是一只鸽子
除此之外,它写的lua狗屁不通不尽人意
因此最终选择了js
#1:基于幻觉,利用幻觉
当你在设计一个AI-LC的时候,你一定遇到过这个问题:
这AI怎么又tm的使用不存在的方法哇!
咳咳,其实我也遇到了这个问题。我是怎么解决的呢?
其实很简单——当一切都是幻觉的时候,一切就都不是幻觉。
具体来说,我先什么资料也没有提供,直接向ChatGPT要求,“使用JS写一个插件,xxxx”
它的确捏造了很多函数。作为修复,我实现了这些函数。当然,为了防止它再忘,我还是把这些函数的定义加入了上下文。
假想朋友总是很容易被记住;而ChatGPT也似乎异乎寻常地理解这些由它自己编造的函数。
甚至它倾向于把这个脚本语言叫做BukkitJS?因此在LangChain的内部环节,我都使用“BukkitJS”来称呼这个语言。
连$都是幻觉的一部分——可能是写jq写的吧。
不管怎么说,这项工作近乎消除了全部的幻觉。
#2:DRY,DSL
但是#1的方法总是仅限于Bukkit——对于第三方插件,比如说Vault,事实上无法控制API的定义。
不过这也没关系。只需要声明“BukkitJS有相关的工具类”,它总是很乐于编造一些wrapper函数。
以至于它甚至编造了一些关于Bukkit本身的函数,比如说ItemBuilder?
基于此我向$中又塞了许多链式的、基于ChatGPT幻觉的Wrapper。
总的来说$看上去更像是一种DSL——完全由幻觉产生的那种。
我做了一些轻微的工作来确保这些Wrapper的功能是完备的,仅此而已。
#3:放下性能情节,尊重AI智商
后续发现AI不是很能处理长函数——这倒不是什么新鲜事,Cognitive Complexity对AI也生效。
但是对GUI来说就很头大了——哪怕是有DSL,一堆回调组成的函数也不是简单东西...
括号不闭合可是要命的。
后来发现AI对命令的理解不是很到位。具体来说,AI眼中的命令貌似和事件广播是有一点混淆的?
我尝试引导AI,“GUI具有简单的回调“
结果它提出了给每个物品单独绑定一个命令。抛开性能不谈,这确是一个好方法。
就是性能很幽默。
此类事件不一而足;从这个意义上说$不适合人类编写,因为其实设计的不怎么人类,
并且性能也很一般。但是对于Chat来说,这便是如虎添翼!
#4:Summary
最终的结果大家也看到了,这套基于幻觉的设计理念确实给AI的能力带来了飞跃。
主观的说,AI就像一个自闭症儿童。放下知识的诅咒,接受AI的幻想,你会发现,其实它的幻想是自称逻辑的。
它也有自己的美丽世界,只不过逻辑和你我熟悉的不太一样罢了。
以上,hs。
放个demo镇楼。
https://s21.ax1x.com/2024/12/23/pAXcyXq.png
页:
[1]