编程工具-GPT来AI编程代码

Posted 十一姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程工具-GPT来AI编程代码相关的知识,希望对你有一定的参考价值。

一、安装介绍

1、https://www.cursor.so/ 下载安装,重要的说三遍(目前免费!免费!免费!),支持多平台 Mac / Windows / Linux,亲测可用,Cursor 是一个基于人工智能技术的代码生成器,它可以根据程序员输入的代码上下文和要实现的功能,自动生成相应的代码。

2、支持语言:默认打开后有两个文件js文件和python文件,也可以支持更多的其它语言类型编程比如:html / css / python / c / rust / go / c# / java / php/ js

3、常用命令基本操作:ctrl+k后提问则会在当前语言文件下自动生成相应代码 (当打开文件才会触发)

4、常用命令基本操作:ctrl+l后提问则可以进行高亮代码的解释,或者聊天,但一般最好和编程相关的提问

二、测试功能

1、js代码混淆


2、js代码反混淆,可见绿色部分是它解混淆后的,非常直观了


2、监控鼠标生成xpath

3、js逆向-补环境生成轨迹的提问

4、python执行js的提问

5、验证码的提问

三、更多推荐

1、工具-Cursor/GPT-AI智能编程
2、比Microsoft Coplilot更好用的辅助编程工具——Cursor
3、chatgpt4最新免费使用方式!限时删!
4、狂飙!GPT-4最新20+个应用案例集锦,附视频
5、使用基于GPT-4模型的IDE: Cursor用法全解读

Cursor编程初体验,搭载GPT-4大模型,你的AI助手,自然语言编程来了

背景

这两天体验了下最新生产力工具Cursor,基于最新的 GPT-4 大模型,目前免费国内可访问不限次数跨平台,你确定不来体验一把?官方的 Slogan

Build Software. Fast. Write, edit, and chat about your code with GPT-4
In partnership with OpenAI

  • 在进行初步体验时,以下几点需要了解:
  1. Cursor编程的上下文是你所在的代码文件,即如果你的文件后缀名为.py,那么在具体沟通时,就无需再出现“使用Python实现……”这种多余的前提,可以用更具体的限制;
  2. 代码生成之后还会提示合并还是丢弃:Accept或者Reject
  3. 支持回滚:如果想撤销某次的PromptCtrl+Z, Reject
  4. 偶尔会出现生产的代码不完整的问题,只需问一句:没写完吧?
  5. Ctrl+K,生成代码或者对选定的代码段进行优化;
  6. Ctrl+L,对聊模式,对编程问题或者选定的代码段直接提问;
  • 支持的语言

  • 聊天模式

  • 提示合并还是丢弃


以下通过12个简单的问题,从语言支持语法支持业务场景代码解释代码优化等方面来体验一把这个编程生产力利器。

理论上,对于复杂的任务,只要分解到GPT能够理解的那一步,都可以胜任。程序员的AI助手(它竟然可以帮我们找Bug~~),自然语言编程真的来了。至于下面生成的代码能不能用,还需要进行实际验证,但目测从语言支持、语义理解以及逻辑推理等方面来看,可用率至少80%吧。

语言支持

编程语言支持: TypeScript , HTML , CSS , Python , C , Rust , Go , CSharp , Java , PHP , SQL 等数十种。

Node.js

// Welcome to Cursor

// 1. Try generating with command K on a new line. Ask for a new react component of an error popup.
// 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 a button that updates a statefield.
// 4. To try out cursor on your own projects, go to file menu (top left) and open a folder.
const bcrypt = require('bcryptjs');

const password = 'myPassword123';
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync(password, salt);

console.log(hash);

const isMatch = bcrypt.compareSync('myPassword123', hash);
console.log(isMatch); // true

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.
# K-Means Clustering Algorithm

import numpy as np
import matplotlib.pyplot as plt

class KMeans:
    def __init__(self, k=2, max_iter=100):
        self.k = k
        self.max_iter = max_iter
        
    def fit(self, X):
        self.centroids = 
        
        # Initialize centroids randomly
        for i in range(self.k):
            self.centroids[i] = X[np.random.choice(len(X))]
        
        # Iterate until convergence or max iterations reached
        for i in range(self.max_iter):
            self.clusters = 
            for j in range(self.k):
                self.clusters[j] = []
            
            # Assign each data point to the closest centroid
            for x in X:
                distances = [np.linalg.norm(x - self.centroids[c]) for c in self.centroids]
                closest_centroid = distances.index(min(distances))
                self.clusters[closest_centroid].append(x)
            
            # Update centroids to be the mean of their assigned data points
            for c in self.clusters:
                self.centroids[c] = np.mean(self.clusters[c], axis=0)
    
    def predict(self, X):
        predictions = []
        for x in X:
            distances = [np.linalg.norm(x - self.centroids[c]) for c in self.centroids]
            closest_centroid = distances.index(min(distances))
            predictions.append(closest_centroid)
        return predictions

# Example usage
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
kmeans = KMeans(k=2)
kmeans.fit(X)
predictions = kmeans.predict(X)
colors = ['r', 'g', 'b', 'c', 'm', 'y']
for i in range(len(X)):
    plt.scatter(X[i][0], X[i][1], color=colors[predictions[i]])
plt.show()

Java

  • 第三问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请简单封装一个函数,实现友好时间的功能,要求该函数可输入一个参数【时间戳】,输出一个字符串【三天前、昨天、今天、明天、刚刚(10分钟内)】。
public static String friendlyTime(long timestamp) 
    long current = System.currentTimeMillis();
    long diff = current - timestamp;
    if (diff < 10 * 60 * 1000) 
        return "刚刚";
     else if (diff < 24 * 60 * 60 * 1000) 
        return "今天";
     else if (diff < 2 * 24 * 60 * 60 * 1000) 
        return "昨天";
     else if (diff < 3 * 24 * 60 * 60 * 1000) 
        return "前天";
     else 
        return "更早之前";
    

Java

  • 第四问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请将一维数组的内容进行正向排序,并进行反向输出。[1,7,8,4,3,6,2,5,9]
public class Array 
    public static void main(String[] args) 
        int[] arr = 1, 7, 8, 4, 3, 6, 2, 5, 9;
        Arrays.sort(arr); // sort the array in ascending order
        for (int i = 0; i < arr.length; i++) 
            System.out.print(arr[i] + " ");
        
        System.out.println();
        for (int i = arr.length - 1; i >= 0; i--) 
            System.out.print(arr[i] + " ");
        
    

Java

  • 第五问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请将两个数组的交集与并集取出,存放于新的数组中。[q,w,e,r,t],[a,w,d,s,r,g]
public static void main(String[] args) 
    String[] arr1 = "q", "w", "e", "r", "t";
    String[] arr2 = "a", "w", "d", "s", "r", "g";

    Set<String> set1 = new HashSet<>(Arrays.asList(arr1));
    Set<String> set2 = new HashSet<>(Arrays.asList(arr2));

    // Intersection
    Set<String> intersection = new HashSet<>(set1);
    intersection.retainAll(set2);
    System.out.println("Intersection: " + intersection);

    // Union
    Set<String> union = new HashSet<>(set1);
    union.addAll(set2);
    System.out.println("Union: " + union);

SQL

  • 数据表结构

  • 第六问:
    • 连接本地数据库:localhost:3306,用户名:root,密码:root,从数据库poetry中的poems读取前10条数据并打引,通过author_id关联poems_author表。
USE poetry;
SELECT poems.title, poems.content, poems_author.name 
FROM poems 
JOIN poems_author 
ON poems.author_id = poems_author.id 
LIMIT 10;

语法支持

  • 第七问:
    • 编码实现从数组中找出最小值:[8, 1, 4, 0, -3]
    • 采用lambda方式实现
public class Min 
  public static void main(String[] args) 
    int[] arr = 8, 1, 4, 0, -3;
    int min = Arrays.stream(arr).min().getAsInt();
    System.out.println("The minimum value in the array is: " + min);
  

业务场景

  • 第八问(源自于实际的物联网开发场景):
    • 使用YoLoV5编码实现识别烟雾火焰
import torch
from PIL import Image
import requests
from io import BytesIO

# Load model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# Define class names
class_names = ['smoke', 'fire']

# Define function to predict image
def predict_image(image_url):
    # Load image from URL
    response = requests.get(image_url)
    img = Image.open(BytesIO(response.content))
    
    # Predict image
    results = model(img)
    
    # Get class predictions
    class_predictions = results.pred[0].softmax(-1)
    
    # Get class indices
    class_indices = class_predictions.argmax(-1).tolist()
    
    # Get class names
    class_names_predicted = [class_names[i] for i in class_indices]
    
    return class_names_predicted

  • 第九问:
    • 连接本地数据库:localhost:3306,用户名:root,密码:root,从数据库poetry中的poems读取前5条数据并打印。
    • 把这5条数据导出到Excel
    • 发送到钉钉
import java.sql.*;

public class Database 
    public static void main(String[] args) 
        try 
            // Connect to local database
            String url = "jdbc:mysql://localhost:3306/poetry";
            String user = "root";
            String password = "root";
            Connection connection = DriverManager.getConnection(url, user, password);

            // Read first 5 rows from poems table
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM poems LIMIT 5");

            // Print results
            while (resultSet.next()) 
                System.out.println(resultSet.getString("title") + " by " + resultSet.getString("author") + " " + resultSet.getString("content") + " " + resultSet.getString("style") + " " + resultSet.getString("dynasty") + " " + resultSet.getString("notes"));
            
			// Export results to Excel
			ResultSetToExcelConverter converter = new ResultSetToExcelConverter(resultSet);
			converter.export("poems.xlsx");

			DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=ACCESS_TOKEN");
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            request.setMsgtype("text");
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent("Results from database query: " + resultSet.toString());
            request.setText(text);
            client.execute(request);

            // Close connection
            resultSet.close();
            statement.close();
            connection.close();
         catch (SQLException e) 
            System.out.println("Error connecting to database: " + e.getMessage());
        
    

  • 第十问(源自于实际的物联网开发场景):
    • 编码实现一个OPC UA客户端
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadResponse;
import org.eclipse.milo.opcua.stack.core.types.structured.WriteValue;
import org.eclipse.milo.opcua.stack.core.types.structured.WriteResponse;

import java.util.concurrent.CompletableFuture;

public class OPCClient 

    public static void main(String[] args) throws Exception 
        // Create a new OPC UA client
        OpcUaClient client = OpcUaClient.create("opc.tcp://localhost:12686/example");

        // Connect to the server
        client.connect().get();

        // Read a value from the server
        NodeId nodeId = new NodeId(2, "/HelloWorld/ScalarTypes/Int32");
        ReadValueId readValueId = new ReadValueId(nodeId, QualifiedName.DEFAULT, null, null);
        CompletableFuture<ReadResponse> readResponse = client.read(readValueId);
        Variant value = readResponse.get().getResults()[0].getValue().getValue();

        System.out.println("Value: " + value);

        // Write a value to the server
        WriteValue writeValue = new WriteValue(nodeId, QualifiedName.DEFAULT, new Variant(42));
        CompletableFuture<WriteResponse> writeResponse = client.write(writeValue首个接入 GPT-4,曾经比 GitHub Copilot 还好用的代码编辑器开源了!

牛逼!GPT-3加持,这是要终结编程吗?

与AI结对编程式是什么体验 Copilot vs AlphaCode, Codex, GPT-3

与AI结对编程式是什么体验 Copilot vs AlphaCode, Codex, GPT-3

我体验了首个接入GPT-4的代码编辑器,太炸裂了

“自然”语言编程(NLC)的到来比你想象的要快