官方 gpt3.5, gpt4.0、github copilot chat、gpt3.5 api、gpt4 api 对比

2023-11-05

这是「进击的Coder」的第 848 篇技术分享

作者:刘志军

来源:Python 之禅

阅读本文大概需要 9 分钟。

gpt4 的智能程度大于 gpt3.5,毫无争议,但是 OpenAI 提供的 GPT3.5 API  能力是否和官方的 GPT3.5 相当?对应的 GPT4.0 是否也一样?另外, Github 的 copilot chat 能力又怎样?

我试着用一个编程问题分别用不同的模型去测试看看效果如何。

问题:请帮我实现一个 Python 函数,根据指定时间计算当月最后一天, 传入的参数值为 datetime 类型,返回的结果也为 datetime

我把 AI 返回给我的所有内容直接贴出来

GPT3.5 API 的回答

import datetime

def get_last_day_of_month(date):
    # 获取下个月的第一天
    next_month = date.replace(day=28) + datetime.timedelta(days=4)
    # 往前推一天,即为当月的最后一天
    last_day = next_month - datetime.timedelta(days=1)
    return last_day

# 示例用法
date = datetime.datetime(2022, 9, 15)
last_day = get_last_day_of_month(date)
print(last_day)  # 输出:2022-09-30
```

在上面的代码中,我们首先获取下个月的第一天,然后往前推一天,即可得到当月的最后一天。


粗略一看,感觉也没什么毛病,特别是它还给你加了注释,说得好像很有道理,先获取下个月第一天,然后再往前减一天就得到了当月的最后一天。实际运行时就有 bug,因为 9 月只有 30 天,28+4=32,相当于  next_month 的值 10 月 2 日了,减一天也是 10 月 1 日, 最后的返回值就是错误的。

结论:有明显的 bug

GPT4.0 API 回答:

import datetime

def get_last_day_of_month(date):
    # 获取下个月的第一天
    if date.month == 12:
        next_month = date.replace(year=date.year+1, month=1, day=1)
    else:
        next_month = date.replace(month=date.month+1, day=1)
    # 往前推一天,即为当月的最后一天
    last_day = next_month - datetime.timedelta(days=1)
    return last_day

# 示例用法
date = datetime.datetime(2022, 9, 15)
last_day = get_last_day_of_month(date)
print(last_day)  # 输出:2022-09-30
```

在上面的代码中,我们首先获取下个月的第一天,然后往前推一天,即可得到当月的最后一天。


GPT4.0 API 的回答思路其实和 GPT3.5 是类似的,同样是先获取下个月的第一天再减 1 天,只不过换了种方式实现,这次是直接将月份加 1,天数设为第 1 天,另外还做了边界处理,如果当前是 12 月份,直接将年份加 1,避免了 bug 出现, 这份代码没什么毛病。只是看起来代码量多了点。

结论:无 bug,但代码量偏多

官方 GPT3.5 回答

下面是一个使用Python实现的函数,根据指定时间计算当月最后一天,并返回结果为datetime类型:


from datetime import datetime, timedelta
import calendar

def get_last_day_of_month(date):
    # 获取当前日期的年份和月份
    year = date.year
    month = date.month

    # 获取当月的天数
    _, last_day = calendar.monthrange(year, month)

    # 构建最后一天的日期
    last_day_date = datetime(year, month, last_day)

    return last_day_date
你可以调用这个函数并传入一个datetime类型的日期作为参数,它将返回该日期所在月份的最后一天。例如:


date = datetime(2023, 6, 15)
last_day = get_last_day_of_month(date)
print(last_day)  # 输出:2023-06-30 00:00:00
这将返回datetime(2023, 6, 30),表示2023年6月的最后一天。


官方 GPT3.5 用到了 calendar 模块下的一个函数 monthrange, 这个函数怎么用它并没有做过多解释,其实这个函数会根据月份返回两个值(元组),第一个值是这个月第一天是星期几,第二个值是这个月份的天数。 这个月份天数就很容易计算当月最后一天了。

结论:无 bug,但解释不够具体

官方 GPT4.0 回答

在Python中,可以使用calendar模块的monthrange()函数来获取一个月的最后一天。这个函数返回一个包含两个元素的元组,第一个元素是指定月份第一天的星期(0-6表示星期一到星期日),第二个元素是指定月份的天数。

下面是一个函数的实现,该函数接受一个datetime对象作为参数,返回该月份的最后一天:


from datetime import datetime
import calendar

def get_last_day_of_month(date):
    _, last_day = calendar.monthrange(date.year, date.month)
    return datetime(date.year, date.month, last_day)

# 测试
date = datetime.now()
print(get_last_day_of_month(date))
请注意,这个函数返回的日期是月份的最后一天,但是时间部分与传入的日期相同。如果你希望最后一天的时间部分是23:59:59,你可以修改函数如下:


from datetime import datetime, time
import calendar

def get_last_day_of_month(date):
    _, last_day = calendar.monthrange(date.year, date.month)
    return datetime.combine(datetime(date.year, date.month, last_day), time(23, 59, 59))

# 测试
date = datetime.now()
print(get_last_day_of_month(date))


官方 4.0 的实现其实和 3.5 是一样的,但是,这个回答更贴心,比如这里给你介绍了 monthrange 函数的作用,如果我是第一次使用这个函数,我还要去查一下 API 是怎么使用的,这里它直接给你介绍了,另外,考虑到你可能还有其他需求,它也一并给了你解决方法,提前预测你的需求,牛得一批。

结论:无 bug,方案最佳,解释很详细

GitHub Copilot Chat 的回答

计算当月最后一天的方法与计算当月第一天类似,只需要将 day 参数设置为当月的最后一天即可。可以使用 calendar 模块来获取当月的最后一天。

以下是一个实现该功能的 Python 函数:

from datetime import datetime
import calendar

def get_last_day_of_month(dt):
    """
    Calculate the last day of the month for a given datetime.

    Args:
        dt (datetime): The datetime to calculate the last day of the month for.

    Returns:
        datetime: The datetime representing the last day of the month.
    """
    # Get the last day of the month for the given datetime
    last_day = calendar.monthrange(dt.year, dt.month)[1]

    # Create a datetime object for the last day of the month
    d = datetime(dt.year, dt.month, last_day)

    return d

该函数接受一个 datetime 对象作为参数,然后使用 calendar.monthrange() 函数获取当月的最后一天。该函数返回一个元组,其中第二个元素表示当月的最后一天。然后,使用 datetime() 函数创建一个 datetime 对象,表示当月的最后一天,并返回该对象。

使用该函数的示例如下:

# Create a datetime object for January 15th, 2022
dt = datetime(2022, 1, 15)

# Calculate the last day of the month for the given datetime
last_day = get_last_day_of_month(dt)

# Print the result
print(last_day)  # Output: 2022-01-31 00:00:00

在这个示例中,我们创建了一个 datetime 对象,表示 2022 年 1 月 15 日。然后,我们使用 get_last_day_of_month() 函数计算了该日期所在月份的最后一天,并将结果存储在 last_day 变量中。最后,我们打印了 last_day 变量的值,输出结果为 2022-01-31 00:00:00。

Copilot 的实现方案和官方的 GPT4 几乎是一样的,唯一不同之处是,Copilot 对代码的编写更规范,比如它给函数加上了文档注释,可读性会好些,考虑到 Copilot 是 GitHub 出品的,写代码更强大更规范在情理之中。

结论:无 bug,且代码有详细注释

最后总结一下,对程序员写代码来说,GitHub Copilot Chat  最优, 官方 GPT4 次之,GPT4 API 第三,  GPT3 排第4,GPT3.5 API 最弱。

考虑到官方 GPT3.5 有时也会胡言乱语,大部分情况下,GPT4 的 API 应该是要强于官方 GPT3 的。

另外,除了官方 GPT3.5 是免费之外,其它都需要收费,性价比最高的当属官方 GPT3.5,而性价比最低的是 GPT4.0 API。

f527312285657dab0975ee5007a7efb5.png

这里我只是让它写一个简单的函数作为测试,所以并非绝对权威,做这个实现的目的是粗概的了解下各个模型之间的表现和差距,希望对你有一定帮助。

91a0ddf21e41001e9601c88b3ebe1611.png

End

欢迎大家加入【ChatGPT&AI 变现圈】,零门槛掌握 AI 神器!我们带你从小白到高手,解锁智能问答、自动化创作、技术变现的无限可能。与我们共同成长,开启 AI 新征程!立即行动,未来已来!(详情请戳:知识星球:ChatGPT&AI 变现圈,正式上线!

扫码加入:

af1b092636be7f38f0cbf91c581fadad.jpeg

好文和朋友一起看~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

官方 gpt3.5, gpt4.0、github copilot chat、gpt3.5 api、gpt4 api 对比 的相关文章

随机推荐

  • Linux屏中信息量大,一屏或几屏显示不全怎么办

    Linux屏中信息量大 一屏或几屏显示不全 两种方法 1 加个参数 more 例如 ls l more 这样敲完命令后 屏幕信息会停留在第一页上 再敲回车后 又多显示一行 但如果 信息太多敲回车太麻烦 可以采用第二种方法 2 写入一个文件中
  • linux下eclipse C++ 多线程调试

    初学linux编程 想要用linux下eclipse C 多线程调试 发现相关资料很少 所以想写一篇这样的文章 在这个页面看到 这里 If you use eclipse CDT you probably understand that e
  • 小信号先滤波还是先放大?

    1 是先滤波再放大 还是先放大再滤波 ADI 技术 电子技术论坛 广受欢迎的专业电子论坛 ADI亚洲技术支持中心的同事们给出的建议是 一般是先放大再滤波 这样经过放大器带来的噪声也可以被滤除 您怎么看 我觉得应该看是什么信号以及用什么样的运
  • Quartz 建表语句SQL文件

    Quartz 通过配置初始化数据库 https blog csdn net weixin 44371237 article details 133278217 官网找SQL SQL文件在jar里面 github下载 https github
  • SecureCRT MAC版本的单词跳转

    20210201 引言 最近更换了笔记本 第一次用mac 使用起来还是跟windows有很多不同 之前也已经安装了很多我在windows下的软件 例如securecrt 这个是我一直使用的终端软件 可能很多人在mac下都是使用iterm2
  • Linux系统意外断电无法启动解决方案

    首先看提示哪个盘有问题 如 sda2 fsck y dev sda2 修复完成后键入 reboot 重启电脑后修复OK
  • Gradle SNAPSHOT 版本更新

    转自 https www cnblogs com scoftlin p 9809623 html 在引用Maven 库上的aar 时经常会出现我们更新依赖的库时 Studio 并不能及时将最新的依赖库拉下来 这个因为gradle为了加快构建
  • [机器学习与scikit-learn-46]:特征工程-特征选择(降维)-2-常见的特征降维的方法大全

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123953894 目录 前言 第1章
  • 服务器安装系统如何收费,服务器系统安装费用

    服务器系统安装费用 内容精选 换一换 根据是否支持高级的SCSI命令来划分磁盘模式 分为VBD 虚拟块存储设备 Virtual Block Device 类型和SCSI 小型计算机系统接口 Small Computer System Int
  • 不使用binlog,canal,kafka等,只用java+mybatis拦截器来实现项目中的异步双写主从数据库,代码逻辑全整理

    项目中因为要迁库 所以我要在原项目中接入我的双写逻辑 确保新旧两个库都有数据写入 假如新库写入失败 旧库数据也能写入 这就确保了重要数据不能丢失 一开始考虑的方案是使用数据同步工具 像是canal或是DTS等 但是环境这块卡的比较死 没有其
  • CSS3 opacity 属性设置 div 元素的不透明级别:

    div 本元素的不透明度是 0 5 请注意 文本和背景色都受到不透明级别的影响 div
  • for循环各部分的执行顺序

    最近在考虑for循环第三个参数是 i or i 如果清楚了for循环各部分的执行顺序的话 其实这个问题无关紧要 因为第三个参数的变化是留给第二个判断语句判断的 所以 i or i 的结果都是增一 判断结果一样 for循环的执行顺序是 初始化
  • vue项目中使用echarts做词云图

    效果图 安装依赖 npm install echarts npm i echarts wordcloud 完整代码
  • Android国际化多语言切换

    关于App国际化 之前有讲到国际化资源 字符换 布局相关 想要了解的猛戳用力抱一下APP国际化 借着本次重构多语言想跟大家聊一下多语言切换 多语言切换对于一款国际化App来讲是重中之重 并非难事 但是若要做好也是一件不容易的事情 问题 An
  • react 中的计算属性 useMemo

    介绍 本篇文章主要是讲解以下 useMemo的正确用法 你们没有看错 useMemo的出现使得react也有了 计算属性 为什么要使用计算属性 其实主要优势就是性能好 通过下面例子可以看出 比较计算属性与普通函数 使用函数完成计算功能 im
  • MySQL安装详细教程!!!

    安装之前 先卸载你之前安装过的数据库程序 否则会造成端口号占用的情况 1 首先下载MySQL MySQL Download MySQL Community Server 下载路径 2 下载版本不一样 安装方法略有不同 版本5的安装基本一致
  • 手欠,给DELL R720加硬盘

    公司有一台比较旧的dell R720服务器 只上了一块15K 300G的硬盘 阵列卡H310M 让采购买了一块4T sata硬盘 因为原来系统上有重要数据 一直没敢动 昨天晚上一狠心直接插上了 什么也不用设置 直接进系统提示发现新硬盘 格式
  • springboot默认日志log,控制台不打印mybatis sql执行日志解决办法

    增加配置 logging level com XXX mapper debug
  • 5.模型训练

    参考PyTorch深度学习快速入门教程 绝对通俗易懂 小土堆 P25 33 现有网络模型的使用及修改 官方文档 以VGG16为例 pretrained True时是已经在ImageNet数据集上训练好的 需要先安装scipy库才能使用Ima
  • 官方 gpt3.5, gpt4.0、github copilot chat、gpt3.5 api、gpt4 api 对比

    这是 进击的Coder 的第 848 篇技术分享 作者 刘志军 来源 Python 之禅 阅读本文大概需要 9 分钟 gpt4 的智能程度大于 gpt3 5 毫无争议 但是 OpenAI 提供的 GPT3 5 API 能力是否和官方的 GP