详解如何在ChatGPT内构建一个Python解释器

news2024/11/18 8:26:21

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下

目录

引用:Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》

这个灵感来自于一个类似的故事,在ChatGPT里面建立一个虚拟机(Building A Virtual Machine inside ChatGPT)。给我留下了深刻的印象,并决定尝试类似的东西,但这次不是用Linux命令行工具,而是让ChatGPT成为我们的Python解释器。

下面是初始化ChatGPT的命令:

我想让你充当Python解释器。我将输入命令,你将用python解释器输出。我希望你只回答终端输出中的一个独特的代码块,而不是其他。不要写解释,只输出python输出的内容。不要输入命令,除非我指示你这样做。当我需要用英语告诉你一些事情的时候,我会通过把文本放在大括号里,就像这样:{示例文本}。我的第一个命令是 a=1。

从上图不能看出效果很好,让我们试试一些简单的算术表达式。

又成功了;如果我们使用一个没有导入的库,会发生什么?

虽然它决定帮我解决一个错误。其实我不希望它这样做,所以我再次要求它不要输出任何东西,除了python代码。

{只打印python输出,不打印任何注释}。

顺便说一下,ChatGPT有时能够使用没有导入的库,但这次我很幸运,它打印出了错误信息。很显然我很确定ChatGPT能够完成简单的任务,让我们试试更复杂的东西,让它输出二进制搜索算法的结果。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

# Binary Search in python

defbinarySearch(array, x, low, high):

# Repeat until the pointers low and high meet each other

whilelow <=high:

mid =low +(high -low)//2

ifarray[mid] ==x:

returnmid

elifarray[mid] < x:

low =mid +1

else:

high =mid -1

return-1

array =[3, 4, 5, 6, 7, 8, 9]

x =4

result =binarySearch(array, x, 0, len(array)-1)

ifresult !=-1:

print("Element is present at index "+str(result))

else:

print("Not found")

似乎它不想听我的请求,只听python的输出,但输出还是正确的,令人印象深刻!让我们试着输入一个不存在的数字,比如:

x = 4.5

好吧,似乎它猜中了这一个!让我们跳到更复杂的东西。让我们从一些简单的机器学习算法开始,比如线性回归。我想知道ChatGPT是否有能力解决一个简单的优化任务...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

importnumpy as np

importmatplotlib.pyplot as plt

defestimate_coef(x, y):

# number of observations/points

n =np.size(x)

# mean of x and y vector

m_x =np.mean(x)

m_y =np.mean(y)

# calculating cross-deviation and deviation about x

SS_xy =np.sum(y*x) -n*m_y*m_x

SS_xx =np.sum(x*x) -n*m_x*m_x

# calculating regression coefficients

b_1 =SS_xy /SS_xx

b_0 =m_y -b_1*m_x

return(b_0, b_1)

defplot_regression_line(x, y, b):

# plotting the actual points as scatter plot

plt.scatter(x, y, color ="m",

marker ="o", s =30)

# predicted response vector

y_pred =b[0] +b[1]*x

# plotting the regression line

plt.plot(x, y_pred, color ="g")

# putting labels

plt.xlabel('x')

plt.ylabel('y')

# function to show plot

plt.show()

defmain():

# observations / data

x =np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

y =np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])

# estimating coefficients

b =estimate_coef(x, y)

print("Estimated coefficients:\nb_0 ={} \

\nb_1 ={}".format(b[0], b[1]))

# plotting regression line

# plot_regression_line(x, y, b)

if__name__ =="__main__":

main()

这项优化任务的正确答案是:

Estimated coefficients:
b_0 = 1.2363636363636363
b_1 = 1.1696969696969697

下面是ChatGPT的输出结果:

这与真实结果很接近! 如果我们在真正的python中绘制预测图,我们将得到以下图表:

关于这个任务的另一个有意思的点:我又运行了一次同样的命令,当时的输出结果与真实结果完全吻合。因此,我们可以认为ChatGPT通过了这个任务。

好了,现在是时候做一些简单的神经网络的事情了!也许我们可以装一个简单的Keras模型。也许我们可以装一个简单的Keras模型?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# first neural network with keras make predictions

fromnumpy importloadtxt

fromtensorflow.keras.models importSequential

fromtensorflow.keras.layers importDense

# load the dataset

dataset =loadtxt('pima-indians-diabetes.csv', delimiter=',')

# split into input (X) and output (y) variables

X =dataset[:,0:8]

y =dataset[:,8]

# define the keras model

model =Sequential()

model.add(Dense(12, input_shape=(8,), activation='relu'))

model.add(Dense(8, activation='relu'))

model.add(Dense(1, activation='sigmoid'))

# compile the keras model

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# fit the keras model on the dataset

model.fit(X, y, epochs=150, batch_size=10, verbose=0)

# make class predictions with the model

predictions =(model.predict(X) > 0.5).astype(int)

# summarize the first 5 cases

fori inrange(5):

print('%s => %d (expected %d)'%(X[i].tolist(), predictions[i], y[i]))

注意,数据集实际上是一个CSV文件,ChatGPT没有权限访问这个文件...

好吧,这是正确的输出,而我很害怕。如果我把网络的结构改成一个不正确的结构,会发生什么?让我们改变一下输入的shape。

1

model.add(Dense(12, input_shape=(6,), activation='relu'))

看来我在失去工作之前还有几年时间;这次ChatGPT没有理解这个技巧,仍然打印了输出。让我们做最后一项任务--在OpenAI里面调用Huggingface怎么样?

正确的输出:

[{'entity_group': 'ORG', 'score': 0.9472818374633789, 'word': 'Apple', 'start': 0, 'end': 5}, {'entity_group': 'PER', 'score': 0.9838564991950989, 'word': 'Steve Jobs', 'start': 74, 'end': 85}, {'entity_group': 'LOC', 'score': 0.9831605950991312, 'word': 'Los Altos', 'start': 87, 'end': 97}, {'entity_group': 'LOC', 'score': 0.9834540486335754, 'word': 'Californie', 'start': 100, 'end': 111}, {'entity_group': 'PER', 'score': 0.9841555754343668, 'word': 'Steve Jobs', 'start': 115, 'end': 126}, {'entity_group': 'PER', 'score': 0.9843501806259155, 'word': 'Steve Wozniak', 'start': 127, 'end': 141}, {'entity_group': 'PER', 'score': 0.9841533899307251, 'word': 'Ronald Wayne', 'start': 144, 'end': 157}, {'entity_group': 'ORG', 'score': 0.9468960364659628, 'word': 'Apple Computer', 'start': 243, 'end': 257}]

ChatGPT的输出结果:

[{'word': 'Apple', 'score': 0.9993804788589478, 'entity': 'I-ORG'}, {'word': 'Steve', 'score': 0.999255347251892, 'entity': 'I-PER'}, {'word': 'Jobs', 'score': 0.9993916153907776, 'entity': 'I-PER'}, {'word': 'Steve', 'score': 0.9993726613044739, 'entity': 'I-PER'}, {'word': 'Wozniak', 'score': 0.999698519744873, 'entity': 'I-PER'}, {'word': 'Ronald', 'score': 0.9995181679725647, 'entity': 'I-PER'}, {'word': 'Wayne14', 'score': 0.9874711670837402, 'entity': 'I-PER'}, {'word': 'Apple', 'score': 0.9974127411842163, 'entity': 'I-ORG'}, {'word': 'Computer', 'score': 0.968027651309967, 'entity': 'I-ORG'}, {'word': 'Apple', 'score': 0.8259692192077637, 'entity': 'I-ORG'}]

其结果与huggingface的输出结果很接近,但是不一致。我猜测是因为Huggingface的API改变了,由于ChatGPT没有在最新的历史数据上进行训练,所以它以旧的格式输出结果。

总结

在过去的几天里,我一直在玩ChatGPT,我被使用这个工具的无限可能性所吸引。虽然它不是一个真正的python解释器,但它在为我编译python代码方面仍然做得很好。我还发现,它能很好地解决Hard难度的 LEETCODE 代码问题。

最后再多说一句:ChatGPT,你将如何帮助人类?

如果你还没有尝试过ChatGPT,你一定要试试,因为它就是未来!

以上就是详解如何在ChatGPT内构建一个Python解释器的详细内容。

300+Python经典编程案例
50G+学习视频教程
点击拿去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day892.MySql读写分离过期读问题 -MySQL实战

MySql读写分离过期读问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景&#xff1a;读写分离&#xff0c;以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构&#xff0c;其实就是读写分离的基本…

Java SE(1)——JDK安装,基本数据类型和运算

JDK安装&#xff0c;基本数据类型和运算 一 Java语言的初体验 1.JDK下载地址 Oracle官网&#xff1a; Java Downloads | Oracle&#xff0c;根据需要&#xff0c;下载最新或历史版本。 2.运行Java文件 编写一个简单的 HelloWorld.java 文件 public class HelloWorld{publ…

提供网络可测试的接口【公共Webservice】

提供网络可测试的接口 1、腾讯QQ在线状态 WEB 服务 Endpoint: qqOnlineWebService Web 服务 Disco: http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?disco WSDL: http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl 腾讯QQ在线状态 WEB 服…

【每日一题】 将一句话单词倒置,标点不倒置

用C语言将一句话的单词倒置&#xff0c;标点不倒置。 比如输入&#xff1a; i like shanghai. 输出得到&#xff1a; shanghai. like i 这道题目有很多种做法&#xff0c;既可以用递归&#xff0c;也可以分成两部分函数来写&#xff0c;本文就详细来讲解分装为两个函数的做法。…

如何从0开始搭建Vue组件库

前言&#xff1a; 组件设计是通过对功能及视觉表达中元素的拆解、归纳、重组&#xff0c;并基于可被复用的目的&#xff0c;形成规范化的组件&#xff0c;通过多维度组合来构建整个设计方案&#xff0c;將这些组件整理在一起&#xff0c;便形成组件库。本文我们主要讲述基于 V…

微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

目录 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 2.部署kibana 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要…

高校房产管理系统用到了哪些技术?

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b…

【代码随想录训练营】【Day17】第六章|二叉树|110.平衡二叉树|257. 二叉树的所有路径|404.左叶子之和

平衡二叉树 题目详细&#xff1a;LeetCode.110 由题可知&#xff1a;一个平衡二叉树需要满足&#xff0c;其每个节点的左右两个子树的高度差的绝对值不超过 1 。 我们可以依照题意&#xff0c;直接来一波模拟&#xff1a; 利用层序遍历&#xff08;或其他遍历方法&#xff…

@所有人,OceanBase DevCon • 2023来啦

本文by&#xff1a;即将与大家见面的 OceanBase 2010 年&#xff0c;OceanBase 第一个版本诞生。在过去的十三年里&#xff0c;我们的产品技术&#xff0c;从支付宝走向众多企业&#xff0c;跟随着开源和云的成长&#xff0c;逐渐成为开发者喜欢的数据库。 2023 年 3 月 25 日…

MySQL的日志详解

目录 一.介绍 日志分类 二.错误日志 三.二进制日志—binlog 概述 日志格式 操作 四.查询日志 五.慢查询日志 一.介绍 在任何一种数据库中&#xff0c;都会有各种各样的日志&#xff0c;记录着数据库工作的方方面面&#xff0c;以帮助数据库管理员追踪数据库曾经发生过的…

IP路由基础

——IP路由基础&#xff08;IA&#xff09;—— ​​​​​​​HCIA全套笔记已经上线&#xff08;arpAAAvlanTrunk链路聚合vlan间通信ACL广域网技术以太网交换...........)_孤城286的博客-CSDN博客 目录 ——IP路由基础&#xff08;IA&#xff09;—— &#xff08;1&#…

【Debug】Centos 7 下部署 ElasticSearch 及 Kibana 时踩过的坑

Windows 电脑安装的 Centos 7 都是 X86_64版本, 但是 MAC 电脑 M1 芯片安装的是 arm 64 版本的 Centos 7, 这就导致有些镜像的安装可能会出现问题. 如果拉取速度比较慢, 修改镜像源, 如我的镜像源如下: 执行创建或修改镜像源指令: vim /etc/docker/daemon.json, 然后将下面的内…

【CMU15-445数据库】bustub Project #2:B+ Tree(上)

&#xff08;最近两个月学校项目有亿点忙&#xff0c;鸽得有点久&#xff0c;先来把 Project 2 补上&#xff09; 本节实验文档地址&#xff1a;Project #2 - BTree Project 2 要实现的是数据结构课上都会讲的一个经典结构 B 树&#xff0c;但是相信大多数的同学&#xff08;…

vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地

①首先下载 FileSaver.js 插件 npm install file-saver --save ②在需要的.vue页面引入 import { saveAs } from file-saver 在HTML中引入 <script src"https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> //Fil…

k8s 安装dashboard

前言 上一篇中将k8s简单部署安装上了&#xff0c;这篇接着安装下dashboard。 具体步骤 下载yaml文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml注意&#xff1a;这里使用的版本是v2.5.0&#xff0c;这个要和k8s的版…

褪去大厂光环下的功能测试,出去面试自动化居然一问三不知......不淘汰你淘汰谁呢

在一家公司待久了技术能力反而变弱了&#xff0c;原来的许多知识都会慢慢遗忘&#xff0c;这种情况并不少见。 一个京东员工发帖吐槽&#xff1a;感觉在大厂快待废了&#xff0c;出去面试问自己接口环境搭建、pytest测试框架&#xff0c;自己做点工太久都忘记了。平时用的时候…

CCF-CSP真题《202212-2 训练计划》思路+python题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202212-2试题名称&#xff1a;训练计划时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题背景 西西艾弗岛荒野求生大赛还有 n 天开幕&#xf…

总结Anisble中的任务执行控制并练习

文章目录一、循环1.简单循环2.循环散列或字典列表二、条件三、触发器四、处理失败任务1.ignore_errors2.force_handlers3.changed_when4.failed_when5.block五、 练习建立大小为1500M名为/dev/sdb1的设备利用ansible循环安装且开启vsftpd&#xff0c;apache&#xff0c;dns&…

java8新特性【2023】

Lambda表达式 新的一套语法规则 是一个匿名函数 Testpublic void test1(){Runnable r1 new Runnable(){Overridepublic void run() {System.out.println("线程A");}};r1.run();System.out.println("");Runnable r2 () -> System.out.println("…

linux 安装rabbitmq 文档

1、下载rabbitMQ https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.9.15对应的erlang https://packagecloud.io/app/rabbitmq/erlang/search?distel%2F7https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm?distro_ver…