若要提高 AI 的稳定性、可靠性,可以从两个方向出发,
- 训练更强的大模型
- 使用更稳定且简单可靠的代码组织方式
训练更强的大模型注定与普通人无关,掌控权不在普通人手中,所以第二个更具可行性。
那么怎样才能稳定且简单可靠呢?
我们首先得知道不稳定的根源,然后才能找到稳定的方法。
我们都已经习惯了 func(input) ⇒ output
的编程方式,而这恰恰是不稳定的根源,看似风平浪静实则危机四伏。因为一个 input
往往不会只导出一个 output
,而是会导出多个 output
,比如一个 input
满足某个条件时,会执行多个任务。
所以实际上是 func(input) ⇒ [output...]
你可能会说把它拆为多个函数不就好了,错,并不会,而是会变为 func(input) ⇒ [f(input)...]
,几乎没有变化。
由此,我们基于该事实可以得出结论,当出现一对多 input: [output...]
时,output
数量越多就越不稳定并且也会越复杂越不可靠。这跟我们的编程经验一致。
你读到这里就已经很清晰了,不稳定的关键位置呼之欲出了,一个 input
必定要把代码集中在一个地方 func
去导出多个 output
,就像你非得一口气搬着多个箱子,摇摇晃晃。
怎么更稳地搬箱子?
当然是一次只搬一个箱子!稳、简单、可靠!
在开始下面内容之前,我们得先弄清楚一个核心前提。
在 func(input) ⇒ output
中,最重要的部分是哪个?
func
?错!
是 input ⇒ output
,只要描述好两者的转换关系,就能表达出任何逻辑,实现任何功能和程序。也就是说你写的所有程序,其实只是在构建这种转换关系。
好了,现在还是用箱子作比喻。
func(input) ⇒ [output...]
比作 我的车(我的箱子) ⇒ [你的箱子...]
我的车很特殊,它必须得一口气拉上所有的箱子,即使做函数拆分,也好比我先用一辆大车拉上所有的箱子,然后再用小车拉一个箱子给你们。
从上面的核心前提能够佐证,既然我的车这么特殊,那就不要用我的车了呗,自然也可以换种搬运方式,比如换为你的车:
你的车(我的箱子) ⇒ 你的箱子
我现在不管送货上门了,我把箱子就放在我的仓库,等你们自己开车来拉。这样一来,你们自己只搬运一个箱子,很稳定、简单可靠,同时我也清闲了啥也不用管,也很稳定、简单可靠。
以前,我给你们送货时,你们每个人收货要求都不一样,所以我必须得挨个了解清楚你们各自的要求之后再打包不同规格的箱子。现在简单多了,我就提供同一款箱子,你们自己拉回去自己去适配,因为你们自己肯定比我更清楚要求,即使你们的要求变更也跟我没关系。
所以,这种方式就正好满足了:稳定且简单可靠!
是不是感觉这种方式很熟悉?这就是观察者模式,但是又与常规的观察者模式不同。
因为,你观察的是我的箱子,但是呢,我的箱子可能也还没运来呢,那你观察个空气啊!所以,你就不能直接观察我的箱子,而是应该观察我仓库里的存放该箱子的货架,货架肯定摆在仓库里。
所以,上面的公式就演变为:
你的车(我的仓库.箱子货架) ⇒ 你的箱子
转为程序公式:
Watch_transform(Struct.input) ⇒ output
理论部分就到此为止,光讲理论太模糊,所以我写了一个看得见摸得着的库 imsure,帮助你直观体验这种方式,在 imsure 里 Watch_transform
有个响亮的名字叫做 Rule
。
PS: 自始至终我宣传的核心都是这个理论,我当然希望你能认可这个理论,imsure 只是基于该理论的一个实现方案(宣称收费,但不强制收费,所以请不要诽谤我割韭菜),若你认可这个理论,你当然也可以实现自己的方案。
谢谢各位!
相关链接
imsure
imsure-demo