文心一言 VS ChatGPT 测评

By 刘志军, 2023-04-15, 分类: 思考

ChatGPT

今天收到文心一言的内测邀请,第一时间体验了代表国内最先进水平的AIGC产品,李彦宏说他们的技术只落后ChatGPT大概2个月时间,所以我想拿两者来做个对比测试。

我用的测评方法是用它来给我写一段代码,需求是用python实现一个猜数字的游戏,最多3次机会

提问:

用python实现一个猜数字的游戏,最多3次机会

回答:

import random  

# 生成一个1到100之间的随机整数  
number = random.randint(1, 100)  

# 初始化猜测次数  
guesses = 0  

print("我想了一个1到100之间的数字,请你猜猜看。")  

while guesses < 3:  
    guess = int(input("你猜是多少?"))  
    guesses += 1  

    if guess < number:  
        print("你猜的数字太小了。")  
    elif guess > number:  
        print("你猜的数字太大了。")  
    else:  
        print(f"恭喜你,你猜对了!我想的数字是{number}。")  
        break  

if guesses == 3:  
    print(f"很遗憾,你只猜对了2次。我想的数字是{number}。")
在这个代码中,我们首先使用Python的random模块生成一个1到100之间的随机整数作为答案。然后,我们使用一个while循环来让玩家最多猜3次。在每次循环中,我们让玩家输入一个猜测的数字,并将猜测次数加1。然后,我们根据猜测的数字与答案的大小关系,给出相应的提示。如果玩家猜对了,我们输出恭喜信息并结束循环。如果玩家猜错了,我们根据猜测次数的不同,给出相应的提示并继续循环。如果玩家猜对了3次,我们输出很遗憾的信息并结束循环。

看起来还不错,代码能正常运行,还提供了代码解释

不过这段代码其实还不完善,没有对用户输入的内容做合法性校验,比如输入一个非数字“a”,就会报ValueError的错误。

继续问:

如果用户输入的不是数字怎么办

回答:

如果用户输入的不是数字,程序会提示用户重新输入。如果用户重新输入的是数字,程序会继续执行,否则会提示用户输入的不是数字。

有点像我在面试一个实习生,虽然能回答我,但并不是我期望的结果,因为输入非数字程序早就异常终止了,咋还重新输。

继续问:

我运行该代码的时候报ValueError的错误,如何修复这个bug

我直接告诉它会报ValueError错误,看看它是否可以自己修复代码

回答:

如果您在运行代码时遇到ValueError错误,可能是因为您在代码中使用了错误的输入或者代码中存在语法错误。以下是一些可能导致ValueError错误的原因和解决方法:
1. 输入不是数字:如果您在代码中使用了非数字输入,例如文本输入或者命令行参数,程序会抛出ValueError错误。您可以在代码中添加一些输入验证来确保用户输入的是数字。
2. 语法错误:如果您的代码中存在语法错误,例如缺少分号、缺少括号等,程序也会抛出ValueError错误。您可以检查代码中的语法错误并进行修正。
3. 数据类型不匹配:如果您在代码中使用了不匹配的数据类型,例如将整数类型的变量赋值给浮点数类型的变量,程序也会抛出ValueError错误。您可以检查代码中的数据类型是否匹配,并进行相应的修正。

感觉文心一言联系上下文追问的能力非常弱,到这里它完全忘记我之前问的什么问题了。

为了进一步测试它的效果,我只能重新建一个对话了。

新问题:

用python实现一个猜数字的游戏,数字限制在10到20之间,并对用户输入的内容做合法性校验,最多3次机会

我加了两个条件,1、数字范围限制 2、输入合法性校验

回答:

import random  

# 生成随机数字  
number = random.randint(10, 20)  

# 初始化猜测次数  
guesses = 0  

# 循环猜数字  
while True:  
    # 获取用户猜测的数字  
    guess = int(input("请猜一个 10 到 20 之间的数字:"))  

    # 校验猜测的数字是否合法  
    if guess < number:  
        print("猜的数字太小了,请再试一次。")  
    elif guess > number:  
        print("猜的数字太大了,请再试一次。")  
    else:  
        print("恭喜你,猜对了!你用了 %d 次机会。" % guesses)  
        break  

    # 增加猜测次数  
    guesses += 1  

# 如果猜测次数达到了最大限制,提示用户失败  
if guesses == 3:  
    print("很遗憾,你没有在 3 次机会内猜对数字。正确答案是 %d。" % number)

第一个需求实现了,第二个需求还是没有实现,不知道百度训练的数据是不是都是从CSDN爬过来的。

最后对比下ChatGPT会是怎样?这是基于GPT4模型生成的答案

import random

def is_valid_input(user_input):
    if not user_input.isdigit():
        return False
    num = int(user_input)
    return 10 <= num <= 20

def guess_number_game():
    target_number = random.randint(10, 20)
    attempts_left = 3

    while attempts_left > 0:
        user_input = input(f"猜一个10到20之间的数字(你还有{attempts_left}次机会): ")

        if not is_valid_input(user_input):
            print("输入无效,请输入一个10到20之间的整数。")
            continue

        user_number = int(user_input)
        attempts_left -= 1

        if user_number == target_number:
            print("恭喜你,猜对了!")
            break
        elif user_number < target_number:
            print("猜测的数字太小了。")
        else:
            print("猜测的数字太大了。")

    if attempts_left == 0:
        print(f"很遗憾,你没有猜对。正确的数字是 {target_number}。")

if __name__ == "__main__":
    guess_number_game()

对比来看,你会发现文言一心更像是一个实习生写的代码,而ChatGPT把核心逻辑用一个函数封装出来了,另外对用户输入的参数也用了一个独立的函数封装,一个函数只做一件事,代码非常干净,变量名也很到位。

你不得不感叹ChatGPT写的代码封装能力不亚于一个3年以上的工程师水平。


有问题可以扫描二维码和我交流

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

猜你喜欢

2023-03-19
一个集成了GPT-4的免费编辑器 Cursor
2023-03-24
王炸!ChatGPT 开放插件,新时代的操作系统
2023-05-10
用 ChatGPT 搭建一个 Telegram 机器人
2023-03-29
ChatGPT常见问题汇总(最全)
2023-05-08
如何导出ChatGPT聊天记录
2023-05-26
如何注册一个美国苹果账号 Apple ID
2023-04-11
为什么ChatGPT 使用 Python实现?
2023-04-26
如何获取chatgpt的key?
2023-02-10
ChatGPT保姆级注册教程
2023-04-19
开发者关心的ChatGPT API额度、Token、价格