0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GPT-4处于一个什么样的编码地位

jf_ro2CN3Fa 来源:芋道源码 2023-06-16 10:42 次阅读

面试环节第一步——回答问题,写软件需求

面试环节第二步——上手写代码

测试用例

比 ChatGPT 背后 GPT-3.5 更为强大的模型 GPT-4,已正式对外发布。在 OpenAI 官方发布的 GPT-4 Developer Livestream(https://www.youtube.com/watch?v=outcGtbnMuQ)视频中,我们亲眼见证了 OpenAI CTO Greg Brockman 演示了 GPT-4 将一张手绘草稿架构图变成一个现实可滑动的网站;同时,它也能帮助我们直接生成代码,甚至当我们把代码运行报错的界面截一个图发给 GPT-4 时,它就能给出相应的解决方案提示。

这种直接对标程序员饭碗的工具,在日常开发场景下,生成的代码是否真的可用?如果说 ChatGPT 达到了 Google L3 级别工程师,能拿到 18.3 万美元的薪资,那么 GPT-4 处于一个什么样的编码地位?

近日,前 Google 软件开发工程师、现任 IT 在线学习平台 Scaler 的教学系统设计师 Naman Bhalla 模拟了 GPT-4 去参加 Uber 这类公司面试会遇到的问题,其以“设计一个分布式缓存系统”为主题,探讨 GPT-4 在面试环节中的表现情况。

目前,他还把包含所有测试用例的完整代码放到 GitHub 上公开了出来:https://github.com/Naman-Bhalla/lldassignments/tree/master/src/main/java/dev/naman/lldassignments/casestudies/distributedcache/solution

整体而言,在写需求、回答问题、写代码环节中,GPT-4 能力达到普通工程师级别。不过,在测试用例环境,GPT-4 似乎失去上下文的逻辑性,甚至一度把自己搞懵。

接下来,我们将分享 Naman Bhalla 测试的全过程。

面试环节第一步——回答问题,写软件需求

软件项目开发过程中,对于程序员而言,实施软件开发的基础就是要先写一份软件需求说明。

因此,在开始时,Naman Bhalla 提出要求 GPT-4 ——“为 Uber 构建一个分布式缓存,给我写一份问题需求。”

一句话之后,GPT-4 快速地给出了标题、问题描述、具体的要求:

标题:Uber 的分布式缓存系统

问题描述:

设计并实现一个分布式缓存系统,可以有效地存储和管理 Uber 服务的数据。该缓存应支持高可用和可扩展的架构,以满足 Uber 不断增长的对快速和高效数据检索的需求。

要求:

1.设计一款分布式缓存系统,可以支持以下操作:

a. Put(key, value): 将键值对存储在缓存中。

b.Get(key):如果它存在于缓存中,检索与给定键相关的值。

c.Delete(key):从缓存中删除与给定键相关的键值对。

2.缓存应该有一个可配置的大小(键值对的数量)和一个可配置的生存时间(TTL,Time to live)。当缓存达到最大容量时,系统应该删除最近使用最少的项目(LRU)来为新的项目腾出空间。

3.确保缓存分布在多个节点上,以提高可扩展性和可用性。设计系统能够良好地处理节点故障和网络分区。

4.实施一致性散列的机制,将键值对均匀地分布在缓存的各个节点上。

5.系统应该支持水平扩展。它应该很容易地从缓存中增加或删除节点,而不会有明显的停机时间或数据损失。

6.为数据的一致性和容错性实施读和写的法定人数。该系统应该能够处理并发的读和写,而不会造成数据的不一致。

7.包括监控和记录功能,可以跟踪高速缓存系统的健康和性能。

8.设计一个简单的用户界面或命令行界面来与缓存系统进行交互,允许用户执行诸如放、取和删除等操作

9.编写测试案例来验证缓存系统的正确性和可靠性

GPT-4 能够说出基本要求,准确度也不错。可以说,过了第一关。

紧接着,Naman Bhalla 针对分布式缓存中一些经典的问题进行了提问,比如:“如何确保代码中支持类似于读取自己的写入数据(Reading your own writes)的一致性问题?”、“缓存可以支持哪些功能?是不是包括一些优化、可扩展性和对客户可用性的保证?”

对于提供一些文字解答方面,GPT-4 给出的答案都很充分,还列出了多个小点,便于大家很直观地看出回答的错与对。

针对第一问时,其答复道:

读取自己的写入数据(Reading your own writes)的一致性保证了一旦客户端进行了写操作,所有来自同一客户端的后续读操作都会返回更新的数据。为了保证分布式缓存系统的这种一致性水平,你可以实施以下策略:

基于 Session 的方法。

客户端缓存。

粘性路由。

读后写的一致性。

版本管理或时间戳。

因果一致性。

第二个问题,GPT-4 回答,“缓存可以支持各种功能、优化和保证,以提高它的性能、可扩展性和对客户的可用性。其中一些功能包括驱逐策略、生存时间(TTL)、数据一致性、缓存分区、缓存复制、缓存的持久性等等”。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

面试环节第二步——上手写代码

当问题以不错的结果完成之后,接下来,所谓是骡子是马,拿出来溜溜,由此也进入了程序员岗位最为重要的实操环节——写代码。

Naman Bhalla 给出的要求是,让 GPT-4 用 Java 编写一个分布式缓存的代码,支持以下要求:

值得注意的是,上文解答过程中,足以让 GPT-4 能够把 Naman Bhalla 提出的 5 项要求弄懂。

不过,当拿到最新写代码需求时,GPT-4 首先还是有些懵,其表示,“由于问题的复杂性和和响应格式的限制,我不能提供分布式缓存系统的完整代码。但是,我可以给你一个系统组件的大纲和一些代码片段,由此可以帮助你开始实施这个系统。你可以根据你的要求修改和扩展这些代码片段。”

于是它提供了四个部分的代码片段:

CacheNode

DistributedCache

ConsistentHashing

CacheClient

当然,这对于想要“坐享其成”的程序员而言,未必是一个好消息,大家都想要拿来就能用的代码,必然不想听到只给代码片段的回复。

因此,当 Naman Bhalla 继续要求 GPT-4 实现 CacheNode 的完整代码时,GPT-4 还是满足了他的小心思,提供了完整的算法和代码:

除了 CacheNode 这部分的代码之外,Naman Bhalla 相继得到了 GPT-4 提供的 DistributedCache、ConsistentHashing、EvictionStrategy(接口以及LRU 和 LFU 实现)的代码。

680f8414-05eb-11ee-962d-dac502259ad0.jpg

不知道什么原因,GPT-4 决定不再提供关于 Request Collapsing、Async Processing、Prefetching 的代码。不过,如果进一步跟它提要求,支持这些功能时,它还是嗒嗒嗒地敲下了这些代码。

682222d6-05eb-11ee-962d-dac502259ad0.jpg

当然,在这过程中,站在程序员的角度来看,想要 GPT-4 生成的代码即可用,首先要看得懂这些代码,知道分布式缓存系统实现的具体逻辑,否则,缺失哪一块都不知道,更别论拿着代码去运行了。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

测试用例

完整的代码有了之后,便进入了写测试用例的时候了。Naman Bhalla 直接要求 GPT-4 编码每个部分的 junit 测试示例。

GPT-4 的回复是:

为了测试 DistributedCache 的实现,我们将创建一个名为"DistributedCacheTest "的 JUnit 测试类。这个测试类将涵盖以下情况:

测试基本的 put 和 get 功能。

测试删除功能。

测试添加和删除一个缓存节点。

测试请求合并。

测试 prefetching。

很显然,GPT-4 知道要测试哪些用例,也写了正确的测试用例。

6831b1b0-05eb-11ee-962d-dac502259ad0.jpg

不过,它并没有写最后一个关于 prefetching 的测试用例。因为它的逻辑没有被定义。为此,GPT-4 提供了一些建议,如「你需要在 DistributedCache 类中实现 prefetchKeys 方法,该方法根据给定的键生成一个 prefetch 的键列表。一旦你实现了这个方法,你就可以添加一个测试案例来验证 prefetch 是否按预期工作。」

承接上文,Naman Bhalla 建议 GPT-4 还是自己直接给出一个自定义 prefetch 的示例。不出意料,GPT-4 照做了,然后实现了测试。

684e0928-05eb-11ee-962d-dac502259ad0.jpg

Naman Bhalla 表示,由于在面试过程中,面试官经常问程序员如何在代码中支持 XXX。于是,他本着好奇的性子,就问 GPT-4 在实现中如何支持读取自己的写入数据(Read your own writes)。

68583b1e-05eb-11ee-962d-dac502259ad0.jpg

Naman Bhalla 注意到,GPT-4 所写的一个测试用例是不稳定的,因为它产生了非确定性的输出。由于并发性,它产生了非确定性的输出。当 Naman Bhalla 进一步向 GPT-4 问了这个问题,它很快就纠正了错误。

686f1c26-05eb-11ee-962d-dac502259ad0.jpg

然而,当要求 GPT-4 实现对给定线程的密钥请求的粘性,以确保没有一致性问题。

GPT-4 答复道:“为了确保每个键的请求都进入同一个线程,你可以在 CacheNode 类中使用ExecutorService创建一个线程池。每个键将根据其散列代码被散列到一个特定的线程,以确保对一个特定键的所有操作都由同一个线程执行。”

事实上,它提出了一个非最佳的 ExecutorService,但告诉 Naman Bhalla 最佳的解决方案是什么,并且也进行了编码。

687e4aac-05eb-11ee-962d-dac502259ad0.jpg689a6f7a-05eb-11ee-962d-dac502259ad0.jpg

不知何故,GPT-4 在这里开始发狂了。开始不断重复自己的代码,而不是完成代码。另外,ExecutorService 的实现是错误的。它没有扩展超类,也没有实现它的所有方法。

68a4b458-05eb-11ee-962d-dac502259ad0.jpg

当 Naman Bhalla 要求 GPT-4 修复这个问题时,“它似乎已经疯了”,Naman Bhalla 无奈地说道。

因为,GPT-4 不仅没有修复上面的问题,反而又创建了一个新的 Cache 类,它基本上在做与 CacheNode 相同的工作。Naman Bhalla 称,最初认为 GPT-4 这样做可能是为了提高代码质量。但似乎它已经开始忘记上文了,再次定义了许多先前已经定义的类。

68b5e8ae-05eb-11ee-962d-dac502259ad0.jpg68c28000-05eb-11ee-962d-dac502259ad0.jpg

为了让 GPT-4 回归正轨,Naman Bhalla 复制粘贴了它之前写的 CacheNode 的代码,并要求它为新的 ExecutorService 修改它。

68d6fd00-05eb-11ee-962d-dac502259ad0.jpg68e4bf12-05eb-11ee-962d-dac502259ad0.jpg69028ad8-05eb-11ee-962d-dac502259ad0.jpg

最终,GPT-4 虽然犯了一些错误,但在提示下得到了修复。修复完成之后,Naman Bhalla 又要求 GPT-4 再写一些测试用例来全面测试。特别是针对并发请求。但由于 GPT-4 已经开始失去上文背景,所以它不可避免地又犯了错误,Naman Bhalla 不得不告诉它之前写的代码。

69111742-05eb-11ee-962d-dac502259ad0.jpg69268a46-05eb-11ee-962d-dac502259ad0.jpg

几经折腾,GPT-4 终于实现了正确的测试用例:

693a779a-05eb-11ee-962d-dac502259ad0.jpg

写在最后

整体而言,GPT-4 提供了完整的分布式缓存系统代码,其能力处于一个不错的水平。不过,距离理想中的一键就能生成可用的代码,还有很长的距离,仍然需要程序员从中不断提供“提示语”,并优化纠错。

那么,如果让 GPT-4 作为工程师入职,你会支持还是拒绝?
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54458
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66807
  • GPT
    GPT
    +关注

    关注

    0

    文章

    302

    浏览量

    14870

原文标题:让 GPT-4 帮我设计一个分布式缓存系统,从尝试到被我逼疯!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在ARM程序移植过程中什么代码段处于什么样的模式

    在程序移植的过程中,什么代码段处于什么样的模式,这可真是困扰人的大难题,有没有种标志或办法能够识别"代码段
    发表于 10-13 14:06

    在ARM程序移植中,什么代码段处于什么样的模式,怎么看?

    在程序移植的过程中,什么代码段处于什么样的模式,这可真是困扰人的大难题,有没有种标志或办法能够识别"代码段
    发表于 02-17 15:05

    GPT-4发布!多领域超越“人类水平”,专家:国内落后2-3年

    电子发烧友网报道(文/吴子鹏)北京时间3月15日凌晨,人工智能研究公司OpenAI正式发布了其下一代大型语言模型GPT-4。目前,ChatGPT的Plus订阅用户已经可以使用GPT-4,其他用户需要
    的头像 发表于 03-16 01:58 4083次阅读
    <b class='flag-5'>GPT-4</b>发布!多领域超越“人类水平”,专家:国内落后2-3年

    ChatGPT升级 OpenAI史上最强大模型GPT-4发布

    ChatGPT升级 史上最强大模型GPT-4发布 OpenAI正式推出了ChatGPT升级版本,号称史上最强大模型GPT-4发布。OpenAI期待GPT-4成为一个更有价值的AI工具。 GPT
    的头像 发表于 03-15 18:15 2422次阅读

    Open AI团队发推正式宣布:GPT-4来了!

    对于 GPT-4 的实际能力,团队也给大家提前打了一针强心剂,即便 GPT-4 在许多现实世界场景中能力不如人类,但在各种专业和学术基准上的表现,还是超过了人类的平均水平。
    的头像 发表于 03-16 11:10 1698次阅读

    关于GPT-4的产品化狂想

    GPT-4是条件,而不是结果
    的头像 发表于 03-26 10:48 2596次阅读
    关于<b class='flag-5'>GPT-4</b>的产品化狂想

    GPT-4是这样搞电机的

    GPT-4写电机基础程序没问题
    的头像 发表于 04-17 09:41 675次阅读
    <b class='flag-5'>GPT-4</b>是这样搞电机的

    GPT-4 的模型结构和训练方法

    GPT-4 的发布报道上,GPT-4 的多模态能力让人印象深刻,它可以理解图片内容给出图片描述,甚至能在图片内容的基础上理解其中的隐喻或推断下一时刻的发展。
    的头像 发表于 05-22 15:21 2012次阅读
    <b class='flag-5'>GPT-4</b> 的模型结构和训练方法

    GPT-4已经会自己设计芯片了吗?

      GPT-4已经会自己设计芯片了!芯片设计行业的一个老大难问题HDL,已经被GPT-4顺利解决。并且,它设计的130nm芯片,已经成功流片。 GPT-4,已经可以帮人类造芯片了! 只用简单的英语
    的头像 发表于 06-20 11:51 610次阅读
    <b class='flag-5'>GPT-4</b>已经会自己设计芯片了吗?

    OpenAI宣布GPT-4 API全面开放使用!

    OpenAI 在博客文章中写道:“自 3 月份以来,数百万开发者请求访问 GPT-4 API,并且利用 GPT-4 的创新产品范围每天都在增长。” “我们设想基于对话的模型未来可以支持任何用例。”
    的头像 发表于 07-12 14:55 882次阅读

    gpt-4怎么用 英特尔Gaudi2加速卡GPT-4详细参数

    介绍GPT-4 详细参数及英特尔发布 Gaudi2 加速器相关内容,对大模型及 GPU 生态进行探讨和展望。英特尔发布高性价比Gaudi2加速卡GPT4详细参数分析。
    发表于 07-21 10:50 627次阅读
    <b class='flag-5'>gpt-4</b>怎么用 英特尔Gaudi2加速卡<b class='flag-5'>GPT-4</b>详细参数

    GPT-4没有推理能力吗?

    今年三月,OpenAI 重磅发布了 GPT-4 大模型,带来了比 ChatGPT 背后 GPT-3.5 更强的推理、计算、逻辑能力,也引发了全民使用的热潮。在各行各领域研究人员、开发者、设计师的使用过程中,「GPT-4 是最为领
    的头像 发表于 08-11 14:20 673次阅读
    <b class='flag-5'>GPT-4</b>没有推理能力吗?

    谷歌Gemini被曝算力达GPT-4五倍,手握TPU王牌碾压OpenAI

    根据Patel和Nishball的说法,此前屡屡被爆料将成为GPT-4大杀器的谷歌Gemini,已经开始在新的TPUv5 Pod上进行训练了,算力高达~1e26 FLOPS,比训练GPT-4的算力还要大5倍。如今,凭借着TPUv5,谷歌已经成为了算力王者。
    的头像 发表于 09-04 16:02 590次阅读
    谷歌Gemini被曝算力达<b class='flag-5'>GPT-4</b>五倍,手握TPU王牌碾压OpenAI

    ChatGPT plus有什么功能?OpenAI 发布 GPT-4 Turbo 目前我们所知道的功能

    OpenAI 发布 GPT-4 Turbo 目前我们所知道的功能分析解答 在最近的OpenAI DevDay上,该组织发布了一项备受期待的公告:推出GPT-4 Turbo,这是对其突破性AI模型
    的头像 发表于 12-13 09:19 606次阅读
    ChatGPT plus有什么功能?OpenAI 发布 <b class='flag-5'>GPT-4</b> Turbo 目前我们所知道的功能

    微软Copilot全面更新为OpenAI的GPT-4 Turbo模型

    起初,Copilot作为Bing Chat AI助手推出,初期采用GPT-3.5模型,随后升级至GPT-4取得显著进步,如今再次更新至性能卓越的GPT-4 Turbo模型,这无疑将使得Copilot功能再上新台阶。
    的头像 发表于 03-13 13:42 252次阅读