chatgpt使用及辅助编程方面的体验

chatgpt使用及辅助编程方面的体验

文章目录

  • chatgpt使用及辅助编程方面的体验
    • 1 引言
    • 2 辅助编程体验
      • 2.1 辅助编写代码
      • 2.2 找出代码问题
      • 2.3 代码优化
      • 2.4 解释代码
      • 结束语

1 引言

最近几个月什么最火,那一定时chatgpt,虽然在国内使用存在各种限制,但是还是挡不住各行各业的热情,顺便各种梯子也火了起来,国内大厂也纷纷布局LLM,先后推出了文心一言、通义千问等基于LLM的问答式应用。chatgpt刚出来时,我以为可能和元宇宙一样炒个概念,让资本市场疯狂一次,但是当我真的接触之后,想法完全不一样了,它真的会成为一次革命,一次像互联网一样,能够改变人们生活、工作方式的革命,为什么这样说?因为它像互联网一样,给人们带来的是效率的提升和能力的延展,会让人上瘾。
相信很多人已经开始依赖chatgpt了,比如协助写作、协助知识获取、协助设计、协助编程等等,本文从辅助编程的角度来简单介绍下chatgpt的能力。

2 辅助编程体验

这里简单介绍下几个辅助编程的场景,更多玩法可自行摸索。

2.1 辅助编写代码

提问:请帮我用java swing编写markdown编辑器
chatgpt回答:好的,以下是一个简单的Java Swing Markdown编辑器的示例代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
public class MarkdownEditor extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private JTextArea textArea;
    private JButton previewButton;
    private JPanel previewPanel;
    private HtmlRenderer renderer;
    private Parser parser;
    public MarkdownEditor() {
        super("Markdown Editor");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Initialize parser and renderer
        parser = Parser.builder().build();
        renderer = HtmlRenderer.builder().build();
        // Create toolbar
        JToolBar toolbar = new JToolBar();
        // Create preview button
        previewButton = new JButton("Preview");
        previewButton.addActionListener(this);
        toolbar.add(previewButton);
        // Add toolbar to frame
        add(toolbar, BorderLayout.PAGE_START);
        // Create text area
        textArea = new JTextArea();
        textArea.setFont(new Font("Arial", Font.PLAIN, 14));
        textArea.setForeground(Color.BLACK);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        // Add text area to scroll pane
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(400, 400));
        // Add scroll pane to frame
        add(scrollPane, BorderLayout.CENTER);
        // Create preview panel
        previewPanel = new JPanel();
        previewPanel.setBackground(Color.WHITE);
        // Add preview panel to frame
        add(previewPanel, BorderLayout.LINE_END);
        // Set frame properties
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // Render preview
        Node document = parser.parse(textArea.getText());
        String html = renderer.render(document);
        previewPanel.removeAll();
        previewPanel.add(new JScrollPane(new JTextArea(html)));
        previewPanel.revalidate();
        previewPanel.repaint();
    }
    public static void main(String[] args) {
        new MarkdownEditor();
    }
}

这个编辑器使用了CommonMark库来解析Markdown文本,并将其渲染为HTML。它包括一个工具栏,其中有一个预览按钮,当用户点击该按钮时,它会将Markdown文本解析为HTML,并在右侧的面板中显示预览。

生成代码方面,对于通用机器学习算法、简单逻辑、各种框架内常用代码的生成,生成的代码基本可用。

2.2 找出代码问题

提问:

package main

myvar := 1 //error

func main() {  

}
以上golang代码问题出在哪里

chatgpt回答:
chatgpt使用及辅助编程方面的体验_第1张图片

2.3 代码优化

提问:

func ReadFLVTag(r io.Reader) (t byte, timestamp uint32, payload []byte, err error) {
    head := make([]byte, 11)
    if _, err = io.ReadFull(r, head); err != nil {
        return
    }
    t = head[0]
    dataSize := util.ReadBEint
    timestamp = (uint32(head[7]) << 24) | (uint32(head[4]) << 16) | (uint32(head[5]) << 8) | uint32(head[6])
    payload = make([]byte, dataSize)
    if _, err = io.ReadFull(r, payload); err == nil {
        _, err = io.ReadFull(r, head[:4])
    }
    return
}请对以上代码进行优化,并给出优化前后的对比

chatgpt回答:
chatgpt使用及辅助编程方面的体验_第2张图片

2.4 解释代码

提问:

func WriteFLVTag(w io.Writer, t byte, timestamp uint32, payload net.Buffers) (err error) {
    head := make([]byte, 11)
    tail := make([]byte, 4)
    head[0] = t
    dataSize := uint32(util.SizeOfBuffers(payload))
    util.PutBE(tail, dataSize+11)
    util.PutBE(head[1:4], dataSize)
    head[4] = byte(timestamp >> 16)
    head[5] = byte(timestamp >> 8)
    head[6] = byte(timestamp)
    head[7] = byte(timestamp >> 24)
    var tag = net.Buffers{head}
    tag = append(tag, payload...)
    tag = append(tag, tail)
    // Tag Data
    _, err = tag.WriteTo(w)
    return
}请对以上代码进行解释,并添加注释

chatgpt回答:

以下是对WriteFLVTag函数的注释:
func WriteFLVTag(w io.Writer, t byte, timestamp uint32, payload net.Buffers) (err error) {
    // 创建长度为11的头部和长度为4的尾部
    head := make([]byte, 11)
    tail := make([]byte, 4)
    // 头部第一个字节表示标签类型
    head[0] = t
    // 数据长度为有效负载长度加上11个字节的头部长度
    dataSize := uint32(util.SizeOfBuffers(payload))
    util.PutBE(tail, dataSize+11) // 将标签长度放入尾部中
    util.PutBE(head[1:4], dataSize) // 将数据长度放入头部中
    // 时间戳占用3个字节,需要进行位移和按位或运算
    head[4] = byte(timestamp >> 16)
    head[5] = byte(timestamp >> 8)
    head[6] = byte(timestamp)
    head[7] = byte(timestamp >> 24)
    // 将头部和有效负载合并为一个net.Buffers对象
    var tag = net.Buffers{head}
    tag = append(tag, payload...)
    tag = append(tag, tail)
    // 将合并后的数据写入io.Writer中
    _, err = tag.WriteTo(w)
    return
}
这个函数的作用是将FLV标签写入一个io.Writer对象中。函数接受标签的类型、时间戳和有效负载,然后创建一个FLV标签,包括一个长度为11的头部、有效负载和一个长度为4的尾部。头部包括标签类型、数据长度和时间戳,尾部包括数据长度。然后将这个标签写入io.Writer对象中。
这个函数的核心是构建FLV标签,首先计算标签的长度和各个字段的值,然后将它们放入标签的头部和尾部。最后,将头部、有效负载和尾部合并到一个net.Buffers对象中,并将这个对象写入io.Writer中。

结束语

通过这几个月对chatgpt的使用,发现自己已经非常依赖它了,查资料用它,系统架构设计用它,写代码用它,编写文档也用它,虽然国内还没有城市的类似的产品,但是相信不久的将来基于LLM的应用会无处不在。


你可能感兴趣的:(chatgpt,人工智能)