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

目录
  • 下面是初始化ChatGPT的命令:
  • 总结

引用:Art KulakovHow 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能够完成简单的任务,让我们试试更复杂的东西,让它输出二进制搜索算法的结果。

# Binary Search in python

def binarySearch(array, x, low, high):

    # Repeat until the pointers low and high meet each other
    while low <= high:

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

        if array[mid] == x:
            return mid

        elif array[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)

if result != -1:
    print("Element is present at index " + str(result))
else:
    print("Not found")

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

x = 4.5

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

import numpy as np
import matplotlib.pyplot as plt

def estimate_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)

def plot_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()

def main():
    # 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模型?

# first neural network with keras make predictions
from numpy import loadtxt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 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
for i in range(5):
 print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i]))

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

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

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解释器的详细内容,更多关于ChatGPT构建Python解释器的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用ChatGPT来自动化Python任务

    目录 1.概述 2.内容 2.1 使用ChatGPT来绘制线性回归 2.2 使用Python给微信发信息 2.3 使用Python发送电子邮件 2.4 使用Python开发一个爬虫程序 3.总结 1.概述 最近,比较火热的ChatGPT很受欢迎.今天,笔者为大家来介绍一下ChatGPT能做哪些事情. 2.内容 ChatGPT是一款由OpenAI开发的专门从事对话的AI聊天机器人.它的目标是让AI系统更加自然的与之交互,但它也可以在我们编写代码的时候提供一些帮助. 2.1 使用ChatGPT来绘制

  • 如何在Python里使用ChatGPT及ChatGPT是什么?注册方式?

    目录 问: 如何在python中使用chatGPT? ChatGPT是什么?怎么注册? 废话不多说,直接开干!需要库 pip install openai import openai # Set your API key openai.api_key = "你的chatgpt的密钥key" # Use the GPT-3 model completion = openai.Completion.create(engine="text-davinci-002",pro

  • 手把手教你在Python里使用ChatGPT

    目录 前言 知识点 实现 代码 后话 前言 近来chatGPT挺火的,也试玩了一下,确实挺有意思.这里记录一下在Python中如何去使用chatGPT. 本篇文章的实现100%基于 chatGPT,我是搬运工无疑了!!! 本片文章比较简单. 知识点 pip install openai 看看 chatGPT的表现: 使用python编写一段发送网络请求的代码 python如何md5 也有抽风的表现: 小明妈妈大小明20岁,20年后小明妈妈大小明多少岁? 一个蛋糕切成8块我吃不完,切成4块刚刚好?

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

    目录 下面是初始化ChatGPT的命令: 总结 引用:Art Kulakov <How to Build a Python Interpreter Inside ChatGPT> 这个灵感来自于一个类似的故事,在ChatGPT里面建立一个虚拟机(Building A Virtual Machine inside ChatGPT).给我留下了深刻的印象,并决定尝试类似的东西,但这次不是用Linux命令行工具,而是让ChatGPT成为我们的Python解释器. 下面是初始化ChatGPT的命令:

  • 详解如何在code block创建一个C语言的项目

    有两种方法创建一个项目 1.在开始 界面 2.在菜单栏创建 接下来就是新建项目的步骤啦 1.在点了create 之后弹出来的窗口中 2.接下来就是c还是c++的问题 其实c和c++语法基本互通的(毕竟C++要兼容C),只是生成的后缀名不一样.anyway,如果是看的C语言语法书的话,还是选择C吧(其实C++中可以用到C语法,只是头文件要自己加,C就C吧) 3.填 写项目的基本资料 4. 5. 6.字好小怎么办?? 按照ctrl+鼠标向上滑轮(或者+号)(是小数字键盘上的+哦) 7. 那么这两个绿

  • 详解如何在ASP.NET Core中使用IHttpClientFactory

    利用IHttpClientFactory可以无缝创建HttpClient实例,避免手动管理它们的生命周期. 当使用ASP.Net Core开发应用程序时,可能经常需要通过HttpClient调用WebAPI的方法以检查终结点是否正常工作.要实现这一点,通常需要实例化HttpClient并使用该实例来调用你的方法.但是直接使用HttpClient也有一些缺点,主要与手动管理实例的生命周期有关. 你可以使用IHttpClientFactory创建HttpClient来避免这些问题.IHttpClie

  • 详解如何在Go语言中调用C源代码

    目录 开坑说明 内嵌形式 外置的C代码 1. 构建libauth.a静态库 2. 对main.go稍加修改 3. 编译 开坑说明 最近在编写客户端程序或与其他部门做功能集成时多次碰到了跨语言的sdk集成,虽说方案很多诸如rpc啊,管道啊,文件io啊,unix socket啊之类的不要太多,但最完美的基础方式还是让程序与sdk结合到一起(个人观点,不喜勿喷),顺便研究了下在go调用标准c接口的种种方法与坑,内容不少,有空便慢慢更新了. 内嵌形式 先让我们来看一个最简单的cgo实例 package

  • 详解如何在Flutter中用小部件创建响应式布局

    目录 前提条件 使用容器的问题 展开式小组件的介绍 灵活小组件的介绍 设置一个示例应用程序 代码执行 扩展的小部件例子 灵活部件的例子 扩大的和灵活的部件之间的区别 总结 构建响应式屏幕布局意味着编写一段代码,以响应设备布局的各种变化,因此应用程序会根据设备的屏幕尺寸和形状显示其UI. 在这篇文章中,我们将探讨Flutter中用于屏幕响应的扩展和灵活部件. 由于Flutter的跨平台.单一代码库的能力,了解屏幕管理以防止像柔性溢出错误或糟糕的用户界面设计这样的问题是至关重要的. 我们还将设计一个

  • 详解如何在pyqt中通过OpenCV实现对窗口的透视变换

    窗口的透视变换效果    当我们点击Win10的UWP应用中的小部件时,会发现小部件会朝着鼠标点击位置凹陷下去,而且不同的点击位置对应着不同的凹陷情况,看起来就好像小部件在屏幕上不只有x轴和y轴,甚至还有一个z轴.要做到这一点,其实只要对窗口进行透视变换即可.下面是对Qt的窗口和按钮进行透视变换的效果: 具体代码    1.下面先定义一个类,它的作用是将传入的 QPixmap 转换为numpy 数组,然后用 opencv 的 warpPerspective 对数组进行透视变换,最后再将 nump

  • 详解如何在vue+element-ui的项目中封装dialog组件

    1.问题起源 由于 Vue 基于组件化的设计,得益于这个思想,我们在 Vue 的项目中可以通过封装组件提高代码的复用性.根据我目前的使用心得,知道 Vue 拆分组件至少有两个优点: 1.代码复用. 2.代码拆分 在基于 element-ui 开发的项目中,可能我们要写出一个类似的调度弹窗功能,很容易编写出以下代码: <template> <div> <el-dialog :visible.sync="cnMapVisible">我是中国地图的弹窗&l

  • 详解如何在Go服务中做链路追踪

    目录 1. 使用全局 map 来实现 2. 使用 Context 来实现 3. 小结 使用 Go 语言开发微服务的时候,需要追踪每一个请求的访问链路,这块在 Go 中目前没有很好的解决方案. 在 Java 中解决这个问题比较简单,可以使用 MDC,在一个进程内共享一个请求的 RequestId. 在 Go 中实现链路追踪有两种思路:一种是在项目中使用一个全局的 map, key 是 goroutine 的唯一 Id,value 是 RequestId,另一种思路可以使用 context.Cont

  • 详解如何在Flutter中获取设备标识符

    目录 使用 platform_device_id 应用预览 代码 使用 device_info_plus 应用预览 代码 结论 本文将引导您完成 2 个示例,演示如何在 Flutter 中获取设备标识符 使用 platform_device_id 如果您只需要运行应用程序的设备的 id,最简单快捷的解决方案是使用platform_device_id包.它适用于 Android (AndroidId).iOS (IdentifierForVendor).Windows (BIOS UUID).ma

  • 详解如何在JavaScript中使用装饰器

    目录 安装 vite配置 webpack配置 使用 语法: @+函数名 类装饰器 带参数的修饰器 类成员装饰器 多个装饰器的执行顺序 应用 延迟 节流 防抖 Decorator装饰器是ES7的时候提案的特性,目前处于Stage 3候选阶段(2022年10月). 装饰器简单来说就是修改类和类方法的语法糖,很多面向对象语言都有装饰器这一特性. 为了使用装饰器特性,我们需要用进行babel转义.这里需要用到的是@babel/plugin-proposal-decorators. 安装 npm inst

随机推荐