集成GPT-4的Github Copilot X還在小范圍內(nèi)測(cè)中,而集成GPT-4的Cursor已公開發(fā)行。Cursor是一個(gè)集成GPT-4的IDE,可以用自然語(yǔ)言編寫代碼,讓編寫代碼和聊天一樣簡(jiǎn)單。
GPT-4和GPT-3.5在處理和編寫代碼的能力上差別還是很大的。官網(wǎng)的一份測(cè)試報(bào)告。

前兩個(gè)是GPT-4,一個(gè)采用文本輸入,一個(gè)采用圖像輸入;第三個(gè)是GPT3.5,可以看出GPT-4的代碼能力相較于GPT-3.5有較大能力的提升。
集成GPT-4的Github Copilot X還在小范圍內(nèi)測(cè)中,而集成GPT-4的Cursor已公開發(fā)行。Cursor是一個(gè)集成GPT-4的IDE,可以用自然語(yǔ)言編寫代碼,讓編寫代碼和聊天一樣簡(jiǎn)單。
集成GPT-4的Cursor,快捷鍵:windows電腦 ctrl+k,mac電腦 comand+k 喚起需求輸入框,來(lái)用自然語(yǔ)言編寫代碼;ctrl+l,comand+l 喚起聊天窗口,讓編寫代碼和聊天一樣簡(jiǎn)單。
首先,按下 ctrl+k。寫下一段需求:寫一個(gè)python程序,要求實(shí)現(xiàn)圖片轉(zhuǎn)字符畫并寫入文件,要用到pillow 庫(kù)的使用,araparse庫(kù)

cursor在一個(gè)空白的文件中,生成了一段完整的python代碼。

# Welcome to Cursor
# 1. Try generating with command K on a new line. Ask for a pytorch script of a feedforward neural network
# 2. Then, select the outputted code and hit chat. Ask if there's a bug. Ask how to improve.
# 3. Try selecting some code and hitting edit. Ask the bot to add residual layers.
# 4. To try out cursor on your own projects, go to the file menu (top left) and open a folder.
from PIL import Image
import argparse
# 命令行輸入?yún)?shù)處理
parser = argparse.ArgumentParser()
parser.add_argument('file') # 輸入文件
parser.add_argument('-o', '--output') # 輸出文件
parser.add_argument('--width', type = int, default = 80) # 輸出字符畫寬
parser.add_argument('--height', type = int, default = 80) # 輸出字符畫高
# 獲取參數(shù)
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
# 字符畫所使用的字符集,共70個(gè)字符,可自行擴(kuò)展
ascii_char = list("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-=[]{};':\",./<>?\\|`~ ")
# 將256灰度映射到70個(gè)字符上
def get_char(r, g, b, alpha = 256):
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]
if __name__ == '__main__':
im = Image.open(IMG)
im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j, i)))
txt += '\n'
print(txt)
# 字符畫輸出到文件
if OUTPUT:
with open(OUTPUT, 'w') as f:
f.write(txt)
else:
with open("output.txt", 'w') as f:
f.write(txt)
看看自動(dòng)生成的代碼能否直接運(yùn)行。
用于轉(zhuǎn)換的圖片選用下面這張:

(venv) PS C:\Users\hanwei\PycharmProjects\pythonProject> python .\main.py -h
usage: main.py [-h] [-o OUTPUT] [--width WIDTH] [--height HEIGHT] file
positional arguments:
file
options:
-h, --help show this help message and exit
-o OUTPUT, --output OUTPUT
--width WIDTH
--height HEIGHT
(venv) PS C:\Users\hanwei\PycharmProjects\pythonProject> python .\main.py .\golang.png
運(yùn)行程序后,轉(zhuǎn)換的效果如下:

下面來(lái)讀讀代碼:
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
這段代碼好奇怪,問(wèn)問(wèn)Cursor是啥意思。按下 ctrl+l,喚起聊天窗口,輸入:這段代碼是啥意思


Cursor給出了解釋,原來(lái)是通過(guò)r,g,b的值加權(quán)計(jì)算出灰度值,然后通過(guò)灰度值計(jì)算出字符。還給出了參考鏈接 ??https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale??

按下 ctrl+l,喚起聊天窗口,讓AI解釋下整段代碼,輸入:用中文解釋下整段代碼


可見AI解釋的非常準(zhǔn)確和詳盡。
上面代碼的功能是將圖片轉(zhuǎn)換成黑白的帶有灰度的ASCII字符畫,下面來(lái)改造一下,讓它能夠生成彩色的字符畫。
按下 ctrl+k 喚醒需求文本框,輸入:請(qǐng)將這段代碼由生成黑白的字符改成生成彩色的字符

看到動(dòng)畫:AI會(huì)逐行掃描每一行代碼,在需要改動(dòng)的地方標(biāo)注出來(lái),然后在下面給出改動(dòng)的代碼。并保留原來(lái)的代碼,方便對(duì)比。

AI只改動(dòng)了2行的代碼(實(shí)際上只改動(dòng)了一行,第二處AI估計(jì)大腦短路了,完全等價(jià)的改動(dòng)),實(shí)現(xiàn)了由生成黑白的字符改成生成彩色的字符。下面測(cè)試一下:
(venv) PS C:\Users\hanwei\PycharmProjects\pythonProject> python .\main2.py .\golang.png
生成的結(jié)果如下,發(fā)現(xiàn)文本文件打開后,多了很多顏色的信息

直接打開文本文件查看,是無(wú)法看出原來(lái)的圖像了,需要在終端查看顏色效果:


可見,原來(lái)圖片的藍(lán)色信息,且兩種不同深淺的藍(lán)色都顯示了出來(lái)。Perfect!