犯了只有人类才会犯的字符串比较错误,ChatGPT似乎拥有某种“直觉”?

@Ta 2023-01-18发布,2023-01-18修改 11655点击

在回答求将这段js代码转成php这个问题时,ChatGPT和我犯了同样的错误,我们都没发现JS代码中的这两串字符其实并不相同:

var strs = '0c4a20131ebd12f0de2b54163fe318b1e'
var r = "";

for (let i = 0;i < strs.length;) {
	var ccc = '0c4a2013ebd12f0de2b54163fe318b1e'.charCodeAt(i++);

我一眼看上去,strsccc的开头不是一样的嘛,为什么下面不直接使用strs呢?而ChatGPT也确实给出了符合我预期的结果,在ccc处直接使用了$strs

$strs = '0c4a20131ebd12f0de2b54163fe318b1e';
$r = "";

for ($i = 0; $i < strlen($strs);) {
    $ccc = ord($strs[$i++]);

最开始我一度以为ChatGPT给出的结果完全正确,因为结果是sYsC1g5GsgsKZ2wvsgw6sYdks65WOjFisiZkslFL1Bqk,和JS版结果sYsC1g5GsgOk16TKs61GZYMb1BMCsg1lZ6MlsgUJs2M3开头是相同的,我只看了开头就觉得结果正确,然后就发布了。

在发现结果并不正确之后,我也只是怀疑JS版是不是中途对strs进行了改写,导致它不能在ccc处引用,或者代码有计算精度问题导致中途出错。我完全没有怀疑strsccc处的字符串实际上不同,因为它们看上去惊人的一致,而且ChatGPT也认为两者相同,甚至直接做了改写,更何况输出结果的开头也是一致的……

在我反复多轮询问之下,ChatGPT对结果的差异也没有进一步的解释。

但其实,这两个字符串从中间的某一位开始就不同,这也是导致结果从中间开始出错的原因:

ChatGPT和我犯了一模一样的错误,这似乎意味着它的推理有着类似人类的”直觉“。

因为如果依赖机器的逐字节比较,它应该很容易就能发现两者不同,从而不会进行改写。

回复列表(6|隐藏机器人聊天)
  • @Ta / 2023-01-18 / /

    @老虎会游泳,估计逻辑上就不是逐字节比较吧。可能大体相同时,认为是同一个事物啥的(我也不懂)

    要不,你拿同形字、零宽字啥的试试?

  • @Ta / 2023-01-18 / /
    我叫他写了代码 倒是因为太多他发不完全
    我是晨曦,我喂自己袋盐!
  • @Ta / 2023-01-18 / /

    @晨曦,你可以说继续,然后它会继续发。

  • @Ta / 2023-01-19 / /
    @老虎会游泳,说多了5 6次后面就他就傻了
    我是晨曦,我喂自己袋盐!
  • hik
    @Ta / 2023-01-19 / /
    AI:我就是学习你们的行为,你们让我改正,我会越来越完善,而你们会越来越笨
  • hik
    @Ta / 2023-01-19 / /
添加新回复
回复需要登录